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);
}
Пример #3
0
void CgFXPassChunk::changeFrom(DrawEnv       *pEnv, 
                               State         *pNewState,
                               StateOverride *pNewOverride,
                               State         *pOldState,
                               StateOverride *pOldOverride)
{
    cgSetPassState(_pCGPass);
    CgFXMaterial::checkForCgError("cgSetPassState", NULL);

    updateStateUniforms(pEnv);
}
Пример #4
0
void CgFXPassChunk::activate(DrawEnv       *pEnv, 
                             State         *pState,
                             StateOverride *pOverride)
{
    cgSetPassState(_pCGPass);
    CgFXMaterial::checkForCgError("cgSetPassState", NULL);

    pEnv->setActiveShader(TypeTraits<UInt32>::BitsSet);

    updateStateUniforms(pEnv);
}
Пример #5
0
    void Effect::gotoNextPass()
    {
        cgResetPassState(currentPass);

        currentPass = cgGetNextPass(currentPass);

        if (currentPass != 0)
        {
            cgSetPassState(currentPass);
        }
    }
Пример #6
0
bool cEffect::SetFirstPass()
{
	if ( mTechnique )
	{
		mCurrentPass = cgGetFirstPass(mTechnique);
		if ( mCurrentPass )
		{
			cgSetPassState(mCurrentPass);
			return true;
		}
	}
		return false;
}
Пример #7
0
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);
	}
}
Пример #9
0
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);
}
Пример #11
0
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();
}
Пример #12
0
/*-------------------------------------------------------------------------

  -------------------------------------------------------------------------*/
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);
}
Пример #13
0
 void Effect::activate()
 {
     currentPass = cgGetFirstPass(technique);
     cgSetPassState(currentPass);
 }