Defining software shader local entry points
To inform REDsdk that a custom software shading callback is located in the program executable file itself, just do:
RED::RenderShader shader;
RED::ShaderProgramID sshid;
RED::ShaderString ssh;
RED::Version version;
// Define the software shader callback entry point as local.
RC_TEST( ssh.SoftShaderStart( "", "SoftwareShader", version ) );
ssh.ShaderEnd();
// Load the software shader.
RC_TEST( iresmgr->LoadShaderFromString( sshid, ssh ) );
// Create the render code to bind vertex position data.
RED::RenderCode rcode;
rcode.BindChannel( RED_VSH_VERTEX, RED::MCL_VERTEX );
// Setup the shader.
RC_TEST( shader.SetRenderCode( rcode, RED_L0, RED::HW_SOFT_TRACER ) );
RC_TEST( shader.SetVertexProgramId( sshid, RED_L0, resmgr, RED::HW_SOFT_TRACER ) );
RC_TEST( shader.SetPixelProgramId( sshid, RED_L0, resmgr, RED::HW_SOFT_TRACER ) );
// Register the shading callback to the resource manager.
RC_TEST( iresmgr->RegisterShadingCallback( "SoftwareShader", SoftwareShader, NULL ) );
The 'SoftwareShader' method must be defined elsewhere in the same executable file otherwise the engine will return with an error code during the rendering of the shader.
Note:
You can also go the way described in Defining software shader DLL entry points and set the shader file to be the program executable itself instead of a DLL.
![]() | Iterating over lights in a software shader![]() |