--With regards to the AGAL validation error, its not valid to use two constant operands in a single instruction. Please copy over one of the constants to a temporary and use it for now. We ll fix it on our side to make this automatic under the covers if ppl use it in the language.

--Also, I am not sure if its an AGAL restriction that interpolateds must be float-4. But, please use float-4 for now. If its an AGAL restriction, the language would still allow you to use float3s, but we ll take care of putting it into the right format while translating to AGAL.

Now, admittedly, I am a complete newbie, and quite evidently Mssrs. Jin-Hunag and Bharani are not. Since I am exposing my ignorance for what I believe will be the benefit of a few other folks who are unable to understand what is wrong, and unable to understand how to correct it, let's define where I am.

01. I am trying to run what should be the simplest example from Mr. Santander's minimole project. -- Segments Demo. I think it is the simplest in terms of the amount of infrastructure required to make it work, and am I talking about the infrastructure both in the Actionscript API from the latest incubator download that is available [051211], as well as the infrastructure of the latest pixelbender3d toolkit [042711].

02. Now, unfortunately, that leaves us a little unsure as to whether or not minimole examples will work under those conditions. Mr. Santander left us with some beautifully working examples at the end of April, but then announced that he was not going to be able to devote time to maintaining those sources. The main reason, therefore, for my using this as the 'Hello World' example is that:

a. Adobe Labs does not provide a 'Hello World" example; and

b. At the end of June, Mr. Santander completed the migration of his project from SVN to GIT AND made a minor bug fix to his library. Preseumably, his examples are working as of that date.

So, that's the state of affairs -- I am sure that advanced users of these tools could get the Segments Demo running in a couple of minutes, but this is a request for the rest of us.

03. Where is there a list documenting Error Code #3625? It is not to be found in the 051211 PRERELEASE DOCUMENTATION asdocs..

04. Given the three-way split of output from the compilation of two source files -- a vertexKernel.pbvk and a materialKernel.pbmk -- all of which have been black-box-welded by the time that this error occurs, in which source file should I look for "token 9"?

Error: Error #3625: AGAL validation failed: Bad AGAL source operands. Both are constants (this must be precomputed) at token 9 of vertex program. at flash.display3D::Program3D/upload() at com.li.minimole.materials::MaterialBase/initPB3D()[G:\Flash_AS\lib\com\li\minimole\materi als\MaterialBase.as:85] at com.li.minimole.materials::LineMaterial/buildProgram3d()[G:\Flash_AS\lib\com\li\minimole\ materials\LineMaterial.as:46] at com.li.minimole.materials::MaterialBase/set context3d()[G:\Flash_AS\lib\com\li\minimole\materials\MaterialBase.as:45] at com.li.minimole.core::Mesh/set context3d()[G:\Flash_AS\lib\com\li\minimole\core\Mesh.as:109] at com.li.minimole.core::Scene3D/set context3d()[G:\Flash_AS\lib\com\li\minimole\core\Scene3D.as:31] at com.li.minimole.core::View3D/context3dCreatedHandler()[G:\Flash_AS\lib\com\li\minimole\co re\View3D.as:87]

05. Or, since Mr. Santander obviously spent a lot of time looking at these kinds of errors, in which of the three .pbasm files should I look for "token 9"? Is it to be found anywhere in this diagnostic output?

06. Assuming that that message is pointing somewhere in here, where, exactly, and how, exactly, are we to write the code so is to avoid the compilers coming up with some operator that has two operands which are constants?

I hope I have found the right "stuff" and correctly laid out what I think is the 'pipeline", so that you can reply with some nice, clear, interspersed comments using big, bold, red text to help us learn how to use these tools.

Because scale and scale2 are both parameters (and therefore constant for every vertex), the value scale + scale2 isn't going to change and could actually be precomputed. The low level hardware doesn't allow you to do a computation with two parameters like this. We are fixing the compiler to allow this (although it's still not a great idea - it puts in extra instructions that aren't necessary and will slow down the computation). In the meantime, there are two workarounds:

1. Do the computation outside the kernel. In the example shown oprecalculate scale + scale2 and pass in the result of that computation as the parameter.

2. Copy one of the values to a temporary and use the temporary in the computation:

I also understand and appreciate the fact that performing some operation on two constants on the 'Actionscript side of the interface' will result in a more efficient pipeline.

So, part of my objective has been met. For the benefit of the community I wonder if I can entice you to going the second mile? I understand the roles played by the various members of a software development organization, so I am pretty sure that you don't get up every day looking for a chance to do quality assurance on the technical writing team. Can we be assured that as an 'Employee' moinitoring and providing helpful assistance for the forum, as you have here, that the issues being raised are finding their way back to product management for the allocation of the necessary resources?

You have ignored the question/quandry that the user has in attempting to get from the cryptic diagnostic error message to where s/he can fix the problem.

A. Where is the cross-reference of error codes to nice descriptions of their meaning?

B. How would the user know whether to look for the problem in the vertex kernel or the material kernel source?

C. You know that a parameter data type is a constant, but how does the new user come to learn that?

D. What is the heuristic for getting from a Token # to a line of code?

My hope is that working on these matters will result in a better product for Adobe and for those of us who imagine using your facilities to deliver superior rich application experiences.

Can we be assured that as an 'Employee' moinitoring and providing helpful assistance for the forum, as you have here, that the issues being raised are finding their way back to product management for the allocation of the necessary resources?

I can certainly give you that assurance. We're a small team, and most of the Adobe people responsing to posts on this forum are part of that small team. We do feed the information on here back to our management, and we do take it into account when planning.

function(){return A.apply(null,[this].concat($A(arguments)))}

A. Where is the cross-reference of error codes to nice descriptions of their meaning?

Pixel Bender 3D is built on top of the Molehill API that is part of Flash. That's handled by a separate team. There's a bunch of information on the Molehill APIs here:

Our goal with the Pixel Bender 3D components is never to hand anything in to Molehill that will give errors. We are obviously not there yet but we're working on it.

function(){return A.apply(null,[this].concat($A(arguments)))}

B. How would the user know whether to look for the problem in the vertex kernel or the material kernel source?

Once we have all of the error checking into the compiler stages properly, the compiler will tell you. If there is a problem in the Molehill API you'll probably need to swap out a vertex program for a known good vertex program and see if that fixes the problem. Relating that back to the original source code can be tricky though, the compiler does a lot of optimization work which means that the final output is often very different from the source input.

function(){return A.apply(null,[this].concat($A(arguments)))}

C. You know that a parameter data type is a constant, but how does the new user come to learn that?

Through what will be improved documentation by the time we ship, through better error checking in the compiler so that error messages relate more closely to the original source code and through discussions like this on the forum.

function(){return A.apply(null,[this].concat($A(arguments)))}

D. What is the heuristic for getting from a Token # to a line of code?

There isn't one I'm afraid. It's like trying to get from a line of assembler to the original line of C++ or Java or ActionScript.

The bottom line is that we know that what we're shipping now isn't production quality - it's a beta release. We're taking the feedback we get to fix bugs, improve the documentation and make the system more robust so that when we do the full release we'll be putting out a much higher quality system.

I know that it's frustrating working with prerelease software and documentation, but this is exactly the sort of feedback we need to improve things.