Hi,
My Engine supports only Per Pixel Lightning for NIVIDIA Cards. I''d like to use PPL for ATI Radeon series too. But I don''t have a ATI card so I need some help for converting my code for ATI users.
Here''s the first function for the NVIDIA Register Combiners.
// **********************************************
bool Init_Register_Combiners() // Register Combiners Initialisation
{
// The name of the extension
char *Extension;
Extension = (char *) glGetString(GL_EXTENSIONS);
if (!(strstr(Extension, "GL_NV_register_combiners")) == 1)
{
// The "GL_NV_register_combiners" extension is not supported
MessageBox(NULL,"GL_NV_register_combiners","Extension not supported :",MB_ICONERROR);
return false;
}
glCombinerParameterfvNV = (PFNGLCOMBINERPARAMETERFVNV) wglGetProcAddress("glCombinerParameterfvNV");
glCombinerParameterivNV = (PFNGLCOMBINERPARAMETERIVNV) wglGetProcAddress("glCombinerParameterivNV");
glCombinerParameterfNV = (PFNGLCOMBINERPARAMETERFNV) wglGetProcAddress("glCombinerParameterfNV");
glCombinerParameteriNV = (PFNGLCOMBINERPARAMETERINV) wglGetProcAddress("glCombinerParameteriNV");
glCombinerInputNV = (PFNGLCOMBINERINPUTNV) wglGetProcAddress("glCombinerInputNV");
glCombinerOutputNV = (PFNGLCOMBINEROUTPUTNV) wglGetProcAddress("glCombinerOutputNV");
glFinalCombinerInputNV = (PFNGLFINALCOMBINERINPUTNV) wglGetProcAddress("glFinalCombinerInputNV");
glGetCombinerInputParameterfvNV = (PFNGLGETCOMBINERINPUTPARAMETERFVNV) wglGetProcAddress("glGetCombinerInputParameterfvNV");
glGetCombinerInputParameterivNV = (PFNGLGETCOMBINERINPUTPARAMETERIVNV) wglGetProcAddress("glGetCombinerInputParameterivNV");
glGetCombinerOutputParameterfvNV = (PFNGLGETCOMBINEROUTPUTPARAMETERFVNV) wglGetProcAddress("glGetCombinerOutputParameterfvNV");
glGetCombinerOutputParameterivNV = (PFNGLGETCOMBINEROUTPUTPARAMETERIVNV) wglGetProcAddress("glGetCombinerOutputParameterivNV");
glGetFinalCombinerInputParameterfvNV = (PFNGLGETFINALCOMBINERINPUTPARAMETERFVNV) wglGetProcAddress("glGetFinalCombinerInputParameterfvNV");
glGetFinalCombinerInputParameterivNV = (PFNGLGETFINALCOMBINERINPUTPARAMETERIVNV) wglGetProcAddress("glGetFinalCombinerInputParameterivNV");
return true;
}
// **********************************************
void Setup_Register_Combiners() // Setup the Register Combiners
{
// Register Combiners Initialisation. We use 1 Register
glCombinerParameteriNV(GL_NUM_GENERAL_COMBINERS_NV, 1);
// Light Color
float Light_Color[] = { 1.0f, 1.0f, 1.0f, 1.0f };
// We give the Light Color params to the Register Combiners
glCombinerParameterfvNV(GL_CONSTANT_COLOR0_NV, (float *) &Light_Color);
// Register Combiners Calcul for the Light Attenuation
// ( 1 * Texture0 + 1 * Texture1)
glCombinerInputNV(GL_COMBINER0_NV, GL_RGB, GL_VARIABLE_A_NV, GL_TEXTURE0_ARB, GL_UNSIGNED_IDENTITY_NV, GL_RGB);
glCombinerInputNV(GL_COMBINER0_NV, GL_RGB, GL_VARIABLE_B_NV, GL_ZERO, GL_UNSIGNED_INVERT_NV, GL_RGB);
glCombinerInputNV(GL_COMBINER0_NV, GL_RGB, GL_VARIABLE_C_NV, GL_TEXTURE1_ARB, GL_UNSIGNED_IDENTITY_NV, GL_RGB);
glCombinerInputNV(GL_COMBINER0_NV, GL_RGB, GL_VARIABLE_D_NV, GL_ZERO, GL_UNSIGNED_INVERT_NV, GL_RGB);
glCombinerOutputNV(GL_COMBINER0_NV, GL_RGB, GL_DISCARD_NV, GL_DISCARD_NV, GL_SPARE0_NV, GL_NONE, GL_NONE, GL_FALSE, GL_FALSE, GL_FALSE);
// Final Register Combiners Initialisation with "(1 - Attenuation) * Color" calcul
glFinalCombinerInputNV(GL_VARIABLE_A_NV, GL_SPARE0_NV, GL_UNSIGNED_IDENTITY_NV, GL_RGB);
glFinalCombinerInputNV(GL_VARIABLE_B_NV, GL_ZERO, GL_UNSIGNED_IDENTITY_NV, GL_RGB);
glFinalCombinerInputNV(GL_VARIABLE_C_NV, GL_CONSTANT_COLOR0_NV, GL_UNSIGNED_IDENTITY_NV, GL_RGB);
glFinalCombinerInputNV(GL_VARIABLE_D_NV, GL_ZERO, GL_UNSIGNED_IDENTITY_NV, GL_RGB);
glFinalCombinerInputNV(GL_VARIABLE_G_NV, GL_ZERO, GL_UNSIGNED_INVERT_NV, GL_ALPHA);
// We enable the Register Combiners
glEnable(GL_REGISTER_COMBINERS_NV);
}
Now, the Vertex Program function :
// **********************************************
bool Init_Vertex_Program()
{
// The name of the extension
char *Extension;
// We want to check a extension, so we do it
Extension = (char *) glGetString(GL_EXTENSIONS);
if (!(strstr(Extension, "GL_NV_vertex_program")) == 1)
{
// The "GL_NV_vertex_program" extension is not supported
MessageBox(NULL,"GL_NV_vertex_program","Extension not supported :",MB_ICONERROR);
return false;
}
glBindProgramNV = (PFNGLBINDPROGRAMNV) wglGetProcAddress("glBindProgramNV");
glDeleteProgramsNV = (PFNGLDELETEPROGRAMSNV) wglGetProcAddress("glDeleteProgramsNV");
glExecuteProgramNV = (PFNGLEXECUTEPROGRAMNV) wglGetProcAddress("glExecuteProgramNV");
glGenProgramsNV = (PFNGLGENPROGRAMSNV) wglGetProcAddress("glGenProgramsNV");
glAreProgramsResidentNV = (PFNGLAREPROGRAMSRESIDENTNV) wglGetProcAddress("glAreProgramsResidentNV");
glRequestResidentProgramsNV = (PFNGLREQUESTRESIDENTPROGRAMSNV) wglGetProcAddress("glRequestResidentProgramsNV");
glGetProgramParameterfvNV = (PFNGLGETPROGRAMPARAMETERFVNV) wglGetProcAddress("glGetProgramParameterfvNV");
glGetProgramParameterdvNV = (PFNGLGETPROGRAMPARAMETERDVNV) wglGetProcAddress("glGetProgramParameterdvNV");
glGetProgramivNV = (PFNGLGETPROGRAMIVNV) wglGetProcAddress("glGetProgramivNV");
glGetProgramStringNV = (PFNGLGETPROGRAMSTRINGNV) wglGetProcAddress("glGetProgramStringNV");
glGetTrackMatrixivNV = (PFNGLGETTRACKMATRIXIVNV) wglGetProcAddress("glGetTrackMatrixivNV");
glGetVertexAttribdvNV = (PFNGLGETVERTEXATTRIBDVNV) wglGetProcAddress("glGetVerteexAttribdvNV");
glGetVertexAttribfvNV = (PFNGLGETVERTEXATTRIBFVNV) wglGetProcAddress("glGetVertexAttribfvNV");
glGetVertexAttribivNV = (PFNGLGETVERTEXATTRIBIVNV) wglGetProcAddress("glGetVertexAttribivNV");
glGetVertexAttribPointervNV = (PFNGLGETVERTEXATTRIBPOINTERVNV) wglGetProcAddress("glGetVertexAttribPointervNV");
glIsProgramNV = (PFNGLISPROGRAMNV) wglGetProcAddress("glIsProgramNV");
glLoadProgramNV = (PFNGLLOADPROGRAMNV) wglGetProcAddress("glLoadProgramNV");
glProgramParameter4fNV = (PFNGLPROGRAMPARAMETER4FNV) wglGetProcAddress("glProgramParameter4fNV");
glProgramParameter4dNV = (PFNGLPROGRAMPARAMETER4DNV) wglGetProcAddress("glProgramParameter4dNV");
glProgramParameter4dvNV = (PFNGLPROGRAMPARAMETER4DVNV) wglGetProcAddress("glProgramParameter4dvNV");
glProgramParameter4fvNV = (PFNGLPROGRAMPARAMETER4FVNV) wglGetProcAddress("glProgramParameter4fvNV");
glProgramParameters4dvNV = (PFNGLPROGRAMPARAMETERS4DVNV) wglGetProcAddress("glProgramParameters4dvNV");
glProgramParameters4fvNV = (PFNGLPROGRAMPARAMETERS4FVNV) wglGetProcAddress("glProgramParameters4fvNV");
glTrackMatrixNV = (PFNGLTRACKMATRIXNV) wglGetProcAddress("glTrackMatrixNV");
glVertexAttribPointerNV = (PFNGLVERTEXATTRIBPOINTERNV) wglGetProcAddress("glVertexAttribPointerNV");
glVertexAttrib1sNV = (PFNGLVERTEXATTRIB1SNV) wglGetProcAddress("glVertexAttrib1sNV");
glVertexAttrib1fNV = (PFNGLVERTEXATTRIB1FNV) wglGetProcAddress("glVertexAttrib1fNV");
glVertexAttrib1dNV = (PFNGLVERTEXATTRIB1DNV) wglGetProcAddress("glVertexAttrib1dNV");
glVertexAttrib2sNV = (PFNGLVERTEXATTRIB2SNV) wglGetProcAddress("glVertexAttrib2sNV");
glVertexAttrib2fNV = (PFNGLVERTEXATTRIB2FNV) wglGetProcAddress("glVertexAttrib2fNV");
glVertexAttrib2dNV = (PFNGLVERTEXATTRIB2DNV) wglGetProcAddress("glVertexAttrib2dNV");
glVertexAttrib3sNV = (PFNGLVERTEXATTRIB3SNV) wglGetProcAddress("glVertexAttrib3sNV");
glVertexAttrib3fNV = (PFNGLVERTEXATTRIB3FNV) wglGetProcAddress("glVertexAttrib3fNV");
glVertexAttrib3dNV = (PFNGLVERTEXATTRIB3DNV) wglGetProcAddress("glVertexAttrib3dNV");
glVertexAttrib4sNV = (PFNGLVERTEXATTRIB4SNV) wglGetProcAddress("glVertexAttrib4sNV");
glVertexAttrib4fNV = (PFNGLVERTEXATTRIB4FNV) wglGetProcAddress("glVertexAttrib4fNV");
glVertexAttrib4dNV = (PFNGLVERTEXATTRIB4DNV) wglGetProcAddress("glVertexAttrib4dNV");
glVertexAttrib4ubNV = (PFNGLVERTEXATTRIB4UBNV) wglGetProcAddress("glVertexAttrib4ubNV");
glVertexAttrib1svNV = (PFNGLVERTEXATTRIB1SVNV) wglGetProcAddress("glVertexAttrib1svNV");
glVertexAttrib1fvNV = (PFNGLVERTEXATTRIB1FVNV) wglGetProcAddress("glVertexAttrib1fvNV");
glVertexAttrib1dvNV = (PFNGLVERTEXATTRIB1DVNV) wglGetProcAddress("glVertexAttrib1dvNV");
glVertexAttrib2svNV = (PFNGLVERTEXATTRIB2SVNV) wglGetProcAddress("glVertexAttrib2svNV");
glVertexAttrib2fvNV = (PFNGLVERTEXATTRIB2FVNV) wglGetProcAddress("glVertexAttrib2fvNV");
glVertexAttrib2dvNV = (PFNGLVERTEXATTRIB2DVNV) wglGetProcAddress("glVertexAttrib2dvNV");
glVertexAttrib3svNV = (PFNGLVERTEXATTRIB3SVNV) wglGetProcAddress("glVertexAttrib3svNV");
glVertexAttrib3fvNV = (PFNGLVERTEXATTRIB3FVNV) wglGetProcAddress("glVertexAttrib3fvNV");
glVertexAttrib3dvNV = (PFNGLVERTEXATTRIB3DVNV) wglGetProcAddress("glVertexAttrib3dvNV");
glVertexAttrib4svNV = (PFNGLVERTEXATTRIB4SVNV) wglGetProcAddress("glVertexAttrib4svNV");
glVertexAttrib4fvNV = (PFNGLVERTEXATTRIB4FVNV) wglGetProcAddress("glVertexAttrib4fvNV");
glVertexAttrib4dvNV = (PFNGLVERTEXATTRIB4DVNV) wglGetProcAddress("glVertexAttrib4dvNV");
glVertexAttrib4ubvNV = (PFNGLVERTEXATTRIB4UBVNV) wglGetProcAddress("glVertexAttrib4ubvNV");
glVertexAttribs1svNV = (PFNGLVERTEXATTRIBS1SVNV) wglGetProcAddress("glVertexAttribs1svNV");
glVertexAttribs1fvNV = (PFNGLVERTEXATTRIBS1FVNV) wglGetProcAddress("glVertexAttribs1fvNV");
glVertexAttribs1dvNV = (PFNGLVERTEXATTRIBS1DVNV) wglGetProcAddress("glVertexAttribs1dvNV");
glVertexAttribs2svNV = (PFNGLVERTEXATTRIBS2SVNV) wglGetProcAddress("glVertexAttribs2svNV");
glVertexAttribs2fvNV = (PFNGLVERTEXATTRIBS2FVNV) wglGetProcAddress("glVertexAttribs2fvNV");
glVertexAttribs2dvNV = (PFNGLVERTEXATTRIBS2DVNV) wglGetProcAddress("glVertexAttribs2dvNV");
glVertexAttribs3svNV = (PFNGLVERTEXATTRIBS3SVNV) wglGetProcAddress("glVertexAttribs3svNV");
glVertexAttribs3fvNV = (PFNGLVERTEXATTRIBS3FVNV) wglGetProcAddress("glVertexAttribs3fvNV");
glVertexAttribs3dvNV = (PFNGLVERTEXATTRIBS3DVNV) wglGetProcAddress("glVertexAttribs3dvNV");
glVertexAttribs4svNV = (PFNGLVERTEXATTRIBS4SVNV) wglGetProcAddress("glVertexAttribs4svNV");
glVertexAttribs4fvNV = (PFNGLVERTEXATTRIBS4FVNV) wglGetProcAddress("glVertexAttribs4fvNV");
glVertexAttribs4dvNV = (PFNGLVERTEXATTRIBS4DVNV) wglGetProcAddress("glVertexAttribs4dvNV");
glVertexAttribs4ubvNV = (PFNGLVERTEXATTRIBS4UBVNV) wglGetProcAddress("glVertexAttribs4ubvNV");
return true;
}
Thanks you very much.
========================
Leyder Dylan
http://ibelgique.ifrance.com/Slug-Production/
========================Leyder Dylan (dylan.leyder@slug-production.be.tf http://users.skynet.be/fa550206/Slug-Production/Index.htm/