void CgFXPassChunk::changeFrom(DrawEnv *pEnv, State *pNewState, StateOverride *pNewOverride, State *pOldState, StateOverride *pOldOverride) { cgSetPassState(_pCGPass); updateStateUniforms(pEnv); }
void CgFXPassChunk::activate(DrawEnv *pEnv, State *pState, StateOverride *pOverride) { cgSetPassState(_pCGPass); pEnv->setActiveShader(TypeTraits<UInt32>::BitsSet); updateStateUniforms(pEnv); }
void CgFXPassChunk::changeFrom(DrawEnv *pEnv, State *pNewState, StateOverride *pNewOverride, State *pOldState, StateOverride *pOldOverride) { cgSetPassState(_pCGPass); CgFXMaterial::checkForCgError("cgSetPassState", NULL); updateStateUniforms(pEnv); }
void CgFXPassChunk::activate(DrawEnv *pEnv, State *pState, StateOverride *pOverride) { cgSetPassState(_pCGPass); CgFXMaterial::checkForCgError("cgSetPassState", NULL); pEnv->setActiveShader(TypeTraits<UInt32>::BitsSet); updateStateUniforms(pEnv); }
void Effect::gotoNextPass() { cgResetPassState(currentPass); currentPass = cgGetNextPass(currentPass); if (currentPass != 0) { cgSetPassState(currentPass); } }
bool cEffect::SetFirstPass() { if ( mTechnique ) { mCurrentPass = cgGetFirstPass(mTechnique); if ( mCurrentPass ) { cgSetPassState(mCurrentPass); return true; } } return false; }
bool CgEffect::ExecutePass() { if(this->currentPass != NULL) cgResetPassState(this->currentPass); this->currentPass = this->nextPass; if(this->currentPass != NULL) cgSetPassState(this->currentPass); this->nextPass = cgGetNextPass(this->nextPass); return this->currentPass != NULL; }
void CgfxRenderPassChunk::changeFrom (DrawEnv *pEnv, StateChunk *pOld, UInt32 index) { if(pOld != this) { if(pOld->getClass() == CgfxRenderPassChunk::getClass()) { CgfxRenderPassChunk* old = dynamic_cast<CgfxRenderPassChunk*>(pOld); cgResetPassState(old->getCGPass()); } if(_mPass) cgSetPassState(_mPass); } }
bool cEffect::SetNextPass() { if ( mTechnique ) { assert( mCurrentPass ); cgResetPassState( mCurrentPass ); mCurrentPass = cgGetNextPass(mCurrentPass); if (mCurrentPass) { cgSetPassState( mCurrentPass ); return true; } } return false; }
void Effect::flush() { cgSetPassState(pass); }
void render(double et) { if (!cgshaders||!run||!camera||!context) return; ms_fbo->Activate(); glClear(GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT); if (v_forward != 0 || v_backward != 0) { if (v_forward == 1) { camera->set_velocity(10.0f); } else { if (v_backward == 1) { camera->set_velocity(-10.0f); } } } else { camera->set_velocity(0.0f); } if (v_right != 0 || v_left != 0) { if (v_right == 1) { camera->set_side_velocity(10.0f); } else { if (v_left == 1) { camera->set_side_velocity(-10.0f); } } } else { camera->set_side_velocity(0.0f); } #ifndef QUERY_POINTER camera->change_heading(DEMO_D2R*heading_degrees); camera->change_pitch (DEMO_D2R*pitch_degrees ); #else camera->set_heading(DEMO_D2R*90.0f*heading_degrees); camera->set_pitch (DEMO_D2R*90.0f*pitch_degrees ); #endif camera->set_viewer_matrix(et); camera->perspective((float)win_w, (float)win_h, camera_fov_radians, camera_znear, camera_zfar); int_params[0] = 1; lights_positions[0] = light0_direction[0]; lights_positions[1] = light0_direction[1]; lights_positions[2] = light0_direction[2]; float_params[0] = camera->m_position_aos.getX(); float_params[1] = camera->m_position_aos.getY(); float_params[2] = camera->m_position_aos.getZ(); cgshaders->set_array_param_3f(std::string("lights_positions"),0, 0, lights_positions); cgshaders->set_array_param_3f(std::string("float_params"), 0, 0, float_params); glViewport(0, 0, GLsizei(win_w), GLsizei(win_h)); /////////////////////////////////////////////////////////// skybox cgshaders->set_effect_matrix_param_fc("PROJECTION", camera->m_projection); cgshaders->set_effect_matrix_param_fc("VIEW_INVERSE", camera->m_inv_view); CGpass p0 = cgGetFirstPass(cgshaders->get_technique(std::string("skybox"))); cgSetPassState(p0); glActiveTexture(GL_TEXTURE5); glBindTexture(GL_TEXTURE_CUBE_MAP, skybox_t); glBindBuffer(GL_ARRAY_BUFFER, sphere0_vbo[0]); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); glEnableVertexAttribArray(0); glDrawArrays(GL_TRIANGLES, 0, (faces_size_sphere0/12)*3); glDisableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, GL_NONE); glBindTexture(GL_TEXTURE_CUBE_MAP, GL_NONE); //cgResetPassState(p0); ////////////////////////////////////////////////////////////// float mvp[16]; Matrix4 mvp_aos = camera->m_projection_aos*camera->m_view_aos; copy_matrix4_to_float(mvp_aos,mvp); if (plant_shader_time > 60.0) { plant_shader_time = 0.0; } plant_shader_time += et; cgshaders->set_effect_param_1f(std::string("PLANT_SHADER_TIME"), (float)plant_shader_time); //#if 0 for (unsigned int x = 0; x < objects.size(); x++) { DisplayInterface * di = objects.at(x); for (int k = 0; k < di->submeshes_size(); k++) { SubMesh * sm = di->get_submesh(k); if (!sm) continue; if (!sm->get_data()) continue; //if (pass == L_SHADOW_PASS && sm->get_data()->cast_shadows[0] == 0) // continue; //if (pass == L_2ND_SHADOW_PASS && sm->get_data()->cast_shadows[1] == 0) // continue; if (sm->callback != 0) { mparams[5] = sm->get_data()->shininess; mparams[6] = sm->get_data()->tc_scale_x; mparams[7] = sm->get_data()->tc_scale_y; mparams[8] = (float)win_w; mparams[9] = (float)win_h; sm->callback(sm->get_data(), cgshaders, int_params, mparams, float_params, lights_positions, camera->m_view, camera->m_inv_view, 0, 0, mvp, 0, 0); } } } //#endif // // ARK cgshaders->set_pass_state(cgshaders->get_first_pass(std::string("tbn0"))); // ARK MAIN glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, ark_sp); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, ark_nm); glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_2D, ark_t); for (unsigned int x = 0; x < ark.size(); x++) { DisplayInterface * di = ark.at(x); for (int k = 0; k < di->submeshes_size(); k++) { SubMesh * sm = di->get_submesh(k); if (!sm) continue; if (!sm->get_data()) continue; //if (pass == L_SHADOW_PASS && sm->get_data()->cast_shadows[0] == 0) // continue; //if (pass == L_2ND_SHADOW_PASS && sm->get_data()->cast_shadows[1] == 0) // continue; if (sm->callback != 0) { mparams[5] = sm->get_data()->shininess; mparams[6] = sm->get_data()->tc_scale_x; mparams[7] = sm->get_data()->tc_scale_y; mparams[8] = (float)win_w; mparams[9] = (float)win_h; sm->callback(sm->get_data(), cgshaders, int_params, mparams, float_params, lights_positions, camera->m_view, camera->m_inv_view, 0, 0, mvp, 0, 0); } } } glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, GL_NONE); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, GL_NONE); glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_2D, GL_NONE); //////// // ARK WHEELS glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, ark_wheels_sp); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, ark_wheels_nm); glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_2D, ark_wheels_t); for (unsigned int x = 0; x < ark_wheels.size(); x++) { DisplayInterface * di = ark_wheels.at(x); for (int k = 0; k < di->submeshes_size(); k++) { SubMesh * sm = di->get_submesh(k); if (!sm) continue; if (!sm->get_data()) continue; //if (pass == L_SHADOW_PASS && sm->get_data()->cast_shadows[0] == 0) // continue; //if (pass == L_2ND_SHADOW_PASS && sm->get_data()->cast_shadows[1] == 0) // continue; if (sm->callback != 0) { mparams[5] = sm->get_data()->shininess; mparams[6] = sm->get_data()->tc_scale_x; mparams[7] = sm->get_data()->tc_scale_y; mparams[8] = (float)win_w; mparams[9] = (float)win_h; sm->callback(sm->get_data(), cgshaders, int_params, mparams, float_params, lights_positions, camera->m_view, camera->m_inv_view, 0, 0, mvp, 0, 0); } } } glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, GL_NONE); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, GL_NONE); glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_2D, GL_NONE); // // ARK WHEELS glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, ark_tread_sp); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, ark_tread_nm); glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_2D, ark_tread_t); for (unsigned int x = 0; x < ark_tread.size(); x++) { DisplayInterface * di = ark_tread.at(x); for (int k = 0; k < di->submeshes_size(); k++) { SubMesh * sm = di->get_submesh(k); if (!sm) continue; if (!sm->get_data()) continue; //if (pass == L_SHADOW_PASS && sm->get_data()->cast_shadows[0] == 0) // continue; //if (pass == L_2ND_SHADOW_PASS && sm->get_data()->cast_shadows[1] == 0) // continue; if (sm->callback != 0) { mparams[5] = sm->get_data()->shininess; mparams[6] = sm->get_data()->tc_scale_x; mparams[7] = sm->get_data()->tc_scale_y; mparams[8] = (float)win_w; mparams[9] = (float)win_h; sm->callback(sm->get_data(), cgshaders, int_params, mparams, float_params, lights_positions, camera->m_view, camera->m_inv_view, 0, 0, mvp, 0, 0); } } } glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, GL_NONE); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, GL_NONE); glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_2D, GL_NONE); // glFinish(); glBindFramebuffer(GL_READ_FRAMEBUFFER, ms_fbo->GetFramebuffer()); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, scene_fbo->GetFramebuffer()); glBlitFramebuffer(0, 0, win_w, win_h, 0, 0, win_w, win_h, GL_COLOR_BUFFER_BIT, GL_LINEAR); glBindFramebuffer(GL_FRAMEBUFFER, GL_NONE); cgshaders->set_pass_state(cgshaders->get_first_pass(std::string("fsquad"))); glViewport(0, 0, static_cast<GLsizei>(win_w), static_cast<GLsizei>(win_h) ); glDepthFunc(GL_ALWAYS); glActiveTexture(GL_TEXTURE0); scene_fbo->BindColor(); glBindBuffer(GL_ARRAY_BUFFER, fsquad[0]); glVertexAttribPointer(0, 2, GL_FLOAT,GL_FALSE, 0, 0); glEnableVertexAttribArray(0); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glDisableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, GL_NONE); glBindTexture(GL_TEXTURE_RECTANGLE, GL_NONE); glDepthFunc(GL_LEQUAL); print_info(); context->swap_buffers(); }
/*------------------------------------------------------------------------- -------------------------------------------------------------------------*/ void FilterBox::Draw(float f) { if(!bValid) return; glPolygonMode( GL_FRONT_AND_BACK, GL_FILL); CGbool bRes; bRes = cgValidateTechnique(cgTechnique); if(!bRes) { bValid = false; const char * pszErrors = NULL; fprintf(stderr, "Validation of FilterRect failed"); fprintf(stderr, "CgFx Parse error : %s", pszErrors); const char *listing = cgGetLastListing(cgContext); return; } // // intermediate stage : bluring horizontal // glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb[1]); glPushAttrib(GL_VIEWPORT_BIT); glViewport(0,0,bufw,bufh); cgGLSetupSampler(srcSampler, textureID[0]); cgSetPassState(cgPassFilterH); FULLSCRQUAD(); glPopAttrib(); // // intermediate stage : bluring vertical // glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb[0]); glPushAttrib(GL_VIEWPORT_BIT); glViewport(0,0,bufw,bufh); cgGLSetupSampler(srcSampler, textureID[1]); cgSetPassState(cgPassFilterV); FULLSCRQUAD(); glPopAttrib(); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); // // Final stage : Blend the final texture to the screen // cgGLSetupSampler(tempSampler, textureID[0]); cgSetPassState(cgPassBlend); glBlendColor(f,f,f,f); float xoffset = -1.0f + 2.0f*(float)posx/(float)vpw; float yoffset = -1.0f + 2.0f*(float)posy/(float)vph; float xoffset2 = xoffset + 2.0f*(float)width/(float)vpw; float yoffset2 = yoffset + 2.0f*(float)height/(float)vph; glBegin(GL_QUADS); glTexCoord2f(0,0); glVertex4f(xoffset, yoffset, 0,1); glTexCoord2f(1,0); glVertex4f(xoffset2, yoffset,0,1); glTexCoord2f(1,1); glVertex4f(xoffset2, yoffset2,0,1); glTexCoord2f(0,1); glVertex4f(xoffset, yoffset2,0,1); glEnd(); cgResetPassState(cgPassBlend); }
void Effect::activate() { currentPass = cgGetFirstPass(technique); cgSetPassState(currentPass); }