CShaderProgramARB(const VfsPath& vertexFile, const VfsPath& fragmentFile, const CShaderDefines& defines, const std::map<CStrIntern, int>& vertexIndexes, const std::map<CStrIntern, int>& fragmentIndexes, int streamflags) : CShaderProgram(streamflags), m_VertexFile(vertexFile), m_FragmentFile(fragmentFile), m_Defines(defines), m_VertexIndexes(vertexIndexes), m_FragmentIndexes(fragmentIndexes) { pglGenProgramsARB(1, &m_VertexProgram); pglGenProgramsARB(1, &m_FragmentProgram); }
int COGL_FragmentProgramCombiner::ParseDecodedMux() { if( !m_bFragmentProgramIsSupported ) return COGLColorCombiner4::ParseDecodedMux(); OGLShaderCombinerSaveType res; pglGenProgramsARB( 1, &res.programID); OPENGL_CHECK_ERRORS; pglBindProgramARB( GL_FRAGMENT_PROGRAM_ARB, res.programID); OPENGL_CHECK_ERRORS; GenerateProgramStr(); pglProgramStringARB( GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, strlen(oglNewFP), oglNewFP); OPENGL_CHECK_ERRORS; //pglProgramStringARB( GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, strlen(oglFPTest), oglFPTest); if (glGetError() != 0) { GLint position; #ifdef DEBUGGER char *str = (char*)glGetString(GL_PROGRAM_ERROR_STRING_ARB); #endif glGetIntegerv( GL_PROGRAM_ERROR_POSITION_ARB, &position); if( position >= 0 ) { #ifdef DEBUGGER if( m_lastIndex >= 0 ) COGLColorCombiner4::DisplaySimpleMuxString(); DebugMessage(M64MSG_ERROR, "%s - %s", str, oglNewFP+position); #endif glDisable(GL_FRAGMENT_PROGRAM_ARB); return COGLColorCombiner4::ParseDecodedMux(); } } glEnable(GL_FRAGMENT_PROGRAM_ARB); OPENGL_CHECK_ERRORS; res.dwMux0 = m_pDecodedMux->m_dwMux0; res.dwMux1 = m_pDecodedMux->m_dwMux1; res.fogIsUsed = gRDP.bFogEnableInBlender && gRSP.bFogEnabled; m_vCompiledShaders.push_back(res); m_lastIndex = m_vCompiledShaders.size()-1; return m_lastIndex; }