Kent,
my apologies, delay of 1 year for reply is slightly extreme. I somehow overlooked this.
The shader and texture are two different beasts.
The shader type most close to texture is fragment (aka pixel) shader. It takes as input fragment from rasterizer, and can retrieve various information about it - such as fragment color, mapped texel color or normal. What the fragment shader does is that it can alter the final color of the pixel.
Here pseudocode for classic rendering:
glColor3ub(255, 0, 0)
drawSphere(1)
This will result in red sphere.
Here another pseudocode, now with shaders enabled:
setActiveShader(myShaderToTurnEverythingBlack)
glColor3ub(255, 0, 0)
drawSphere(1)
setActiveShader(null)
What does this do:
- first it sets active shader to my custom one, which is program to take fragment and set it to black - by setting it active no action is performed yet!
- then the color is set to red in OpenGL state machine
- then the sphere is drawn - here the geometry is rasterized, therefore fragments are. Here the shader wakes up, looks on the fragment (red piece of sphere) and it can paint it black
- then the shader is disabled
So the point is - due to shader postprocessing and dynamic nature, it cannot pre-generate "texture". Because it can depend on for example normal information, which is (object) fragment dependant.
The FX file DarkBasic uses is probably just the source code of the shader.
I am sure one could create something like Material class in Oxygen, which would allow to hold definition for color, textures and wanted shader, and when some method would be invoked, it would enable the needed states and when another, it would disable them again.
In short - you can have assigned both (multiple) textures and (single) shader as active for rendering. The shader has the final word in what the result will look like in the end.
As a material for study, there is an excellent tutorial on GLSL here:
http://www.lighthouse3d.com/tutorials/glsl-tutorial/Uff, I hoped I answered your question and my apologies for the delay,
Petr