Updated September 22, 2011
This release of Adobe® Pixel Bender® 3D is prerelease software and is designed for evaluation purposes only. The technology is not final; but, many portions of the technology are fully implemented and ready for you to try and discuss.
Important: Pixel Bender 3D preview 3 has been tested with:
- Adobe Flash® Builder® 4.5.1
- Adobe Flash Player Beta 11.0.1.80
- Adobe Flex® SDK 4.5.1
- Adobe AIR® 3.0.0.3580
Features Added in Pixel Bender 3D Preview 3
Changes to the Public Interface
- RegisterElement.isValid is now a method rather than a property.
- RegisterElementGroup.nElements has been removed. Use RegisterElementGroup.elements.length instead.
Language Fixes
- The number of temporary registers available is limited. If your kernel uses too many temporary registers you will get an error at AGAL upload time, or you can check AGALProgram.temporaryRegisterCount to see if your program exceeds the temporary registers available (currently the limit is 8 registers).
- Indirect addressing (the [] operator) works correctly
- Bilinear filtering works correctly
- Conditional expressions work correctly
- float2x2 matrices work correctly
- Matrix * vector multiplication works correctly
- if statements work correctly
- Computations with two constant values work correctly
- Register allocation has been improved
- Vector construction works correctly
- Multiple samplers work
- Division works correctly
- The cross product function works correctly
- Many register allocation and translation bugs fixed
- The Version class now returns the version number 0.3
Example Code
Two new example projects have been added. EtherealCat shows how to sample from two separate images and mix the results together, Triangle is the absolute simplest set of kernels and code that generate anything useful – it's the "hello world" of Pixel Bender 3D.
We have removed the ImageBox example. Look at CylinderSphere for an example of 3D drawing, and EtherealCat for an example of using multiple images.
Features Added in Pixel Bender 3D Preview 2
Changes to the Public Interface
- RegisterMap provides information about the use of registers and numerical constants in the program.
- ProgramConstantsHelper doesn't throw an exception if you attempt to set a value that was in the original kernel but has since been optimized away.
- CompilerOptions has a new option - performPeepholeOptimization.
- AGALProgram returns the number of temporary registers required by this program. Programs which use more than 8 temporary registers will not run on Molehill.
- pb3dutil.exe no longer throws an exception if there's a compilation error. It does still report the error.
- The following classes have been added:
GlobalID
NumericalConstantInfo ParameterRegisterInfo
RegisterElement
RegisterElementGroup
TextureRegisterInfo
Version - The following functions in ProgramConstantsHelper have been implemented:
setBooleanParameterByName setBooleanParameterBySemantics setIntParameterByName
setIntParameterBySemantics
setMatrixParameterBySemantics setNumberParameterBySemantics
setTextureByName
setTextureBySemantics
Language Fixes
Vector * matrix multiplication works (but see the note on matrix * vector multiplication below).
Example Code
A new example project CylinderSphereNoHelper has been added to show how input values can be set without using the helper classes.
Known Issues
- Loops are not yet implemented.
- The strings returned from the format functions in the API have not been finalized - they might change in future releases.
- Mip mapped and cube textures are not supported. You cannot use the following in a sample instruction:
- PB3D_MIPLINEAR
- PB3D_MIPNEAREST
- PB3D_CUBE
- Texture LOD bias cannot be set in the sample instruction.
- Interpolated values must be float4.
- If you sample the same image more than once you must use the same options for each sample call.
- You are not allowed to have a parameter in a vertex kernel with the same name as a parameter used in the evaluateVertex function of a material kernel. This will fail in silent and hard to predict ways.
- Write swizzles must be in order.
- This is legal: f.xyz = f1.ywx;
- This is illegal: f.zyx = f1.ywx;