Exemple #1
0
void RenderMethod_PhongPoint_CG::setShaderData(const GeometryChunk &gc) {
	const Renderer::Light &light0 = renderer->getLight();
	
	ASSERT(light0.type == Renderer::Light::POINT, "point lights only pls");
	
	mat4 MI = (gc.transformation).inverse(); // world -> object projection
	
	// Set the position of the light (in object-space)
	vec3 LightPosObj = MI.transformVector(light0.position);
	cgGLSetParameter3fv(cgLightPos, LightPosObj);
	
	// Set the position of the camera (in object-space)
	vec3 CameraPosWld = renderer->getCamera().getPosition();
	vec3 CameraPosObj = MI.transformVector(CameraPosWld);
	cgGLSetParameter3fv(cgCameraPos, CameraPosObj);
	
	// Set the light properties
	cgGLSetParameter1fv(cgkC, &light0.kC);
	cgGLSetParameter1fv(cgkL, &light0.kL);
	cgGLSetParameter1fv(cgkQ, &light0.kQ);
	
	// Set the material properties
	cgGLSetParameter4fv(cgKa, gc.material.Ka);
	cgGLSetParameter4fv(cgKd, gc.material.Kd);
	cgGLSetParameter4fv(cgKs, gc.material.Ks);
	cgGLSetParameter1fv(cgShininess, &gc.material.shininess);
	
	// Everything else
	cgGLSetStateMatrixParameter(cgMVP, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);
	cgGLSetStateMatrixParameter(cgView, CG_GL_MODELVIEW_MATRIX, CG_GL_MATRIX_IDENTITY);
}
Exemple #2
0
void RenderMethod_TerrainPhong_CG::setShaderData(const GeometryChunk &gc) {
	ASSERT(renderer, "Null pointer");
	const Renderer::Light &light0 = renderer->getLight();
	
	ASSERT(light0.type == Renderer::Light::DIRECTIONAL, "dir lights only pls");
	
	mat4 MI = (gc.transformation).inverse(); // world -> object projection
	
	// Set the direction of the light (in object-space)
	vec3 LightDirObj = MI.transformVector(light0.direction.getNormal());
	cgGLSetParameter3fv(cgLightDir, LightDirObj);
	
	// Set the position of the camera (in object-space)
	vec3 CameraPosWld = renderer->getCamera().getPosition();
	vec3 CameraPosObj = MI.transformVector(CameraPosWld);
	cgGLSetParameter3fv(cgCameraPos, CameraPosObj);
	
	// Set the material properties
	cgGLSetParameter4fv(cgKa, gc.material.Ka);
	cgGLSetParameter4fv(cgKd, gc.material.Kd);
	
	// Everything else
	cgGLSetStateMatrixParameter(cgMVP, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);
	cgGLSetStateMatrixParameter(cgView, CG_GL_MODELVIEW_MATRIX, CG_GL_MATRIX_IDENTITY);
}
Exemple #3
0
void ShaderCG::preRender(Renderer* renderer)
{
#ifdef HAS_CG
  if (!use_cg) return;

  cgGLEnableProfile(profile_vertex);
  cgGLEnableProfile(profile_fragment);
  cgGLBindProgram(program_vertex);
  cgGLBindProgram(program_fragment);

  if(g_modelViewProjMatrix != NULL)
    cgGLSetStateMatrixParameter(g_modelViewProjMatrix, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);

  if(g_modelViewMatrix != NULL)
    cgGLSetStateMatrixParameter(g_modelViewMatrix, CG_GL_MODELVIEW_MATRIX, CG_GL_MATRIX_IDENTITY);

  if(g_modelViewMatrixI != NULL)
    cgGLSetStateMatrixParameter(g_modelViewMatrixI, CG_GL_MODELVIEW_MATRIX, CG_GL_MATRIX_INVERSE);

  if(g_modelViewMatrixIT != NULL)
    cgGLSetStateMatrixParameter(g_modelViewMatrixIT, CG_GL_MODELVIEW_MATRIX, CG_GL_MATRIX_INVERSE_TRANSPOSE);

  Light light;
  renderer->getLight(&light, 0);

  if(g_lightDiffuse != NULL)
    cgGLSetParameter4fv(g_lightDiffuse, light.getDiffuse());

  if(g_lightPosition != NULL)
    cgGLSetParameter4fv(g_lightPosition, light.getPos());

/*
  if(g_lightAmbiente != NULL)
    cgGLSetParameter4fv(g_lightAmbiente, light.getAmbiente());

  if(g_lightSpecular != NULL)
    cgGLSetParameter4fv(g_lightSpecular, light.getSpecular());
*/


  ErrorCheck();

  glDisable(GL_LIGHTING);

#endif // HAS_CG
}
Exemple #4
0
void RenderMethod_Grass_CG::setShaderData(const GeometryChunk &gc) {
	const Renderer::Light &light0 = renderer->getLight();
	
	ASSERT(light0.type == Renderer::Light::POINT, "point lights only pls");
	
	mat4 MI = (gc.transformation).inverse(); // world -> object projection
	
	// Set the position of the light (in object-space)
	vec3 LightPosObj = MI.transformVector(light0.position);
	cgGLSetParameter3fv(cgLightPos, LightPosObj);
	
	// Set the position of the camera (in object-space)
	vec3 CameraPosWld = renderer->getCamera().getPosition();
	vec3 CameraPosObj = MI.transformVector(CameraPosWld);
	cgGLSetParameter3fv(cgCameraPos, CameraPosObj);
	
	// Send the inverse view matrix
	mat4 ViewI = getViewI();
	cgGLSetMatrixParameterfr(cgViewI, ViewI);
	
	// Send the camera right vector (in object-space)
	vec3 CameraRightEye = vec3(1.0, 0.0, 0.0);
	vec3 CameraRightObj = ViewI.transformVector(CameraRightEye);
	cgGLSetParameter3fv(cgCameraRight, CameraRightObj);
	
	// Send the camera right vector (in object-space)
	vec3 CameraUpEye = vec3(0.0, 1.0, 0.0);
	vec3 CameraUpObj = ViewI.transformVector(CameraUpEye);
	cgGLSetParameter3fv(cgCameraUp, CameraUpObj);
	
	// Set the light properties
	cgGLSetParameter1fv(cgkC, &light0.kC);
	cgGLSetParameter1fv(cgkL, &light0.kL);
	cgGLSetParameter1fv(cgkQ, &light0.kQ);
	
	// Set the material properties
	cgGLSetParameter4fv(cgKa, gc.material.Ka);
	cgGLSetParameter4fv(cgKd, gc.material.Kd);
	
	// Set animation time
	cgGLSetParameter1fv(cgTime, &angle);
	
	// Everything else
	cgGLSetStateMatrixParameter(cgMVP, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);
	cgGLSetStateMatrixParameter(cgView, CG_GL_MODELVIEW_MATRIX, CG_GL_MATRIX_IDENTITY);
}
void ParticleShaderDiskDevelop::drawParticle(int i)
{

	cgGLEnableProfile(vProfile);
	cgGLEnableProfile(fProfile);
	cgGLBindProgram(vProgram);
	bindCGParametersVertex();
	bindCGParametersFragment();
	cgGLBindProgram(fProgram);

	GLfloat lightpos[4];
	glGetLightfv(GL_LIGHT0, GL_POSITION, lightpos);

	cgGLSetParameter4fv(lightPositionEC, lightpos);

	// Pull the diffuse color
	GLfloat diff[4];
	glGetMaterialfv(GL_FRONT, GL_DIFFUSE, diff);

	// Set the disk center
	GLfloat dC[3] = {0.0, 0.0, 0.0};

	// Get the radius
	if (radius_data)
		radius = (*radius_data)[i];
	else
		radius = 1.0;
	
	// Set the per-particle Cg parameters
	cgGLSetParameter3fv(diskCenterWC, dC);
	cgGLSetParameter4fv(diffuseColor, diff);
	cgGLSetParameter1f(diskRadius, GLfloat(radius * scale));
	cgGLSetStateMatrixParameter(modelViewProj, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);
	cgGLSetStateMatrixParameter(modelView, CG_GL_MODELVIEW_MATRIX, CG_GL_MATRIX_IDENTITY);
	cgGLSetStateMatrixParameter(modelViewIT, CG_GL_MODELVIEW_MATRIX, CG_GL_MATRIX_INVERSE_TRANSPOSE);
	
	gluDisk(quad,0,radius*scale*1.51,4,4);

	cgGLDisableProfile(vProfile);
    cgGLDisableProfile(fProfile);
}
void Cg::SetParameter(CGparameter param,float* f,int elenum){
	if (param != NULL)
	{
		if(elenum == 4)
			cgGLSetParameter4fv(param, f);

	}
	else
	{
		cout<<"CGparameter is null"<<endl;
		abort();
	}
	CheckCgError();
}
void ParticleShaderVoronoi::drawSecondPass(int i)
{

	// push the shader name down
	glPushName(0xffffffff);

	glMatrixMode(GL_MODELVIEW);
	glPushMatrix();

	gmVector3 p = position->getPosition(i);
	glTranslatef(p[0],p[1],p[2]);

	gmMatrix4 rotMat = orientation->getMatrix(i);

	GLdouble mat[16];
	rotMat.copyTo(mat);

	glMultMatrixd(mat);

	//setColor(i);

	// Pull the diffuse color
	GLfloat diff[4];
	glGetMaterialfv(GL_FRONT, GL_DIFFUSE, diff);

	// Set the disk center
	GLfloat dC[3] = {0.0, 0.0, 0.0};

	// Get the radius
	if (radius_data)
		radius = (*radius_data)[i];
	else
		radius = 1.0;
	
	// Set the per-particle Cg parameters
	cgGLSetParameter3fv(diskCenterWC, dC);
	cgGLSetParameter4fv(diffuseColor, diff);
	cgGLSetParameter1f(diskRadius, GLfloat(radius * scale));
	cgGLSetStateMatrixParameter(modelViewProj, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);
	cgGLSetStateMatrixParameter(modelView, CG_GL_MODELVIEW_MATRIX, CG_GL_MATRIX_IDENTITY);
	cgGLSetStateMatrixParameter(modelViewIT, CG_GL_MODELVIEW_MATRIX, CG_GL_MATRIX_INVERSE_TRANSPOSE);
	
	// Now, actually draw the shape
	drawShape(i);	
   
	glPopMatrix();
	glPopName();

}
Exemple #8
0
void SetupVertexProgramParameters(ZZshProgram prog, int context)
{
	ZZshParameter p;

	p = cgGetNamedParameter(prog, "g_fPosXY");
	if( p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE )
		cgConnectParameter(g_vparamPosXY[context], p);

	// Set Z-test, log or no log;
	if (conf.settings().no_logz) {
       		g_vdepth = float4( 255.0 /256.0f,  255.0/65536.0f, 255.0f/(65535.0f*256.0f), 1.0f/(65536.0f*65536.0f));
		vlogz = float4( 1.0f, 0.0f, 0.0f, 0.0f);
	}
	else {
		g_vdepth = float4( 256.0f*65536.0f, 65536.0f, 256.0f, 65536.0f*65536.0f);
		vlogz = float4( 0.0f, 1.0f, 0.0f, 0.0f);
	}

	p = cgGetNamedParameter(prog, "g_fZ");
	if( p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE ) {
		cgGLSetParameter4fv(p, g_vdepth);

		p = cgGetNamedParameter(prog, "g_fZMin"); // Switch to flat-z when needed
		if( p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE )  {
			//ZZLog::Error_Log("Use flat-z\n");
			cgGLSetParameter4fv(p, vlogz);
		}
		else
			ZZLog::Error_Log("Shader file version is outdated! Only log-Z is possible.");
	}

	float4 vnorm = float4(g_filog32, 0, 0,0);
	p = cgGetNamedParameter(prog, "g_fZNorm");
	if( p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE )
		cgGLSetParameter4fv(p, vnorm);

	p = cgGetNamedParameter(prog, "g_fBilinear");
	if( p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE )
		cgGLSetParameter4fv(p, float4(-0.2f, -0.65f, 0.9f, 1.0f / 32767.0f ));

	p = cgGetNamedParameter(prog, "g_fZBias");
	if( p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE )
		cgGLSetParameter4fv(p, float4(1.0f/256.0f, 1.0004f, 1, 0.5f));

	p = cgGetNamedParameter(prog, "g_fc0");
	if( p != NULL && cgIsParameterUsed(p, prog) == CG_TRUE )
		cgGLSetParameter4fv(p, float4(0,1, 0.001f, 0.5f));
}
bool CgShaderProgramGL::setConstant(const io::stringc &Name, const f32* Buffer, s32 Count)
{
    if (!Buffer)
        return false;

    /* Get top-level parameter */
    CGparameter Param = cgGetNamedParameter(cgProgram_, Name.c_str());

    if (!Param)
        return false;

    /* Get array parameter */
    if (cgGetParameterType(Param) != CG_ARRAY)
        return false;

    s32 ArraySize = cgGetArraySize(Param, 0);

    for (s32 i = 0; i < ArraySize; ++i)
    {
        /* Get array element parameter */
        CGparameter ElementParam = cgGetArrayParameter(Param, i);

        switch (cgGetParameterType(ElementParam))
        {
        case CG_FLOAT:
            cgGLSetParameterArray1f(Param, 0, Count, Buffer);
            return true;
        case CG_FLOAT2:
            cgGLSetParameterArray2f(Param, 0, Count/2, Buffer);
            return true;
        case CG_FLOAT3:
            cgGLSetParameterArray3f(Param, 0, Count/3, Buffer);
            return true;
        case CG_FLOAT4:
            cgGLSetParameterArray4f(Param, 0, Count/4, Buffer);
            return true;
        case CG_FLOAT4x4:
            cgGLSetMatrixParameterArrayfc(Param, 0, Count/16, Buffer);
            return true;

        case CG_STRUCT:
        {
            /* Get structure field parameter */
            CGparameter FieldParam = cgGetFirstStructParameter(ElementParam);

            while (FieldParam)
            {
                switch (cgGetParameterType(FieldParam))
                {
                case CG_FLOAT:
                    cgGLSetParameter1f(FieldParam, *Buffer);
                    Buffer += 1;
                    break;
                case CG_FLOAT2:
                    cgGLSetParameter2fv(FieldParam, Buffer);
                    Buffer += 2;
                    break;
                case CG_FLOAT3:
                    cgGLSetParameter3fv(FieldParam, Buffer);
                    Buffer += 3;
                    break;
                case CG_FLOAT4:
                    cgGLSetParameter4fv(FieldParam, Buffer);
                    Buffer += 4;
                    break;
                case CG_FLOAT4x4:
                    cgGLSetMatrixParameterfc(FieldParam, Buffer);
                    Buffer += 16;
                    break;
                case CG_INT:
                    cgSetParameter1i(FieldParam, *((s32*)Buffer));
                    Buffer += 1;
                    break;
                default:
                    break;
                }

                FieldParam = cgGetNextParameter(FieldParam);
            }
        }
        break;

        default:
            break;
        }
    }

    return true;
}
Exemple #10
0
void SetupFragmentProgramParameters(FRAGMENTSHADER* pf, int context, int type)
{
	// uniform parameters
	ZZshParameter p;

	p = cgGetNamedParameter(pf->prog, "g_fFogColor");
	if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) {
		cgConnectParameter(g_fparamFogColor, p);
	}

	SET_UNIFORMPARAM(sOneColor, "g_fOneColor");
	SET_UNIFORMPARAM(sBitBltZ, "g_fBitBltZ");
	SET_UNIFORMPARAM(sInvTexDims, "g_fInvTexDims");
	SET_UNIFORMPARAM(fTexAlpha2, "fTexAlpha2");
	SET_UNIFORMPARAM(fTexOffset, "g_fTexOffset");
	SET_UNIFORMPARAM(fTexDims, "g_fTexDims");
	SET_UNIFORMPARAM(fTexBlock, "g_fTexBlock");
	SET_UNIFORMPARAM(fClampExts, "g_fClampExts");
	SET_UNIFORMPARAM(fTexWrapMode, "TexWrapMode");
	SET_UNIFORMPARAM(fRealTexDims, "g_fRealTexDims");
	SET_UNIFORMPARAM(fTestBlack, "g_fTestBlack");
	SET_UNIFORMPARAM(fPageOffset, "g_fPageOffset");
	SET_UNIFORMPARAM(fTexAlpha, "fTexAlpha");

	// textures
	p = cgGetNamedParameter(pf->prog, "g_sBlocks");
	if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) {
		cgGLSetTextureParameter(p, ptexBlocks);
		cgGLEnableTextureParameter(p);
	}

	// cg parameter usage is wrong, so do it manually
	if( type == 3 ) {
		p = cgGetNamedParameter(pf->prog, "g_sConv16to32");
		if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) {
			cgGLSetTextureParameter(p, ptexConv16to32);
			cgGLEnableTextureParameter(p);
		}
	}
	else if( type == 4 ) {
		p = cgGetNamedParameter(pf->prog, "g_sConv32to16");
		if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) {
			cgGLSetTextureParameter(p, ptexConv32to16);
			cgGLEnableTextureParameter(p);
		}
	}
	else {
		p = cgGetNamedParameter(pf->prog, "g_sBilinearBlocks");
		if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) {
			cgGLSetTextureParameter(p, ptexBilinearBlocks);
			cgGLEnableTextureParameter(p);
		}
	}

	p = cgGetNamedParameter(pf->prog, "g_sMemory");
	if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) {
		//cgGLEnableTextureParameter(p);
		pf->sMemory = p;
	}
	p = cgGetNamedParameter(pf->prog, "g_sSrcFinal");
	if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) {
		//cgGLEnableTextureParameter(p);
		pf->sFinal = p;
	}
	p = cgGetNamedParameter(pf->prog, "g_sBitwiseANDX");
	if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) {
		//cgGLEnableTextureParameter(p);
		pf->sBitwiseANDX = p;
	}
	p = cgGetNamedParameter(pf->prog, "g_sBitwiseANDY");
	if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) {
		//cgGLEnableTextureParameter(p);
		pf->sBitwiseANDY = p;
	}
	p = cgGetNamedParameter(pf->prog, "g_sCLUT");
	if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) {
		//cgGLEnableTextureParameter(p);
		pf->sCLUT = p;
	}
	p = cgGetNamedParameter(pf->prog, "g_sInterlace");
	if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) {
		//cgGLEnableTextureParameter(p);
		pf->sInterlace = p;
	}

	// set global shader constants
	p = cgGetNamedParameter(pf->prog, "g_fExactColor");
	if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE ) {
		cgGLSetParameter4fv(p, float4(0.5f, (conf.settings().exact_color)?0.9f/256.0f:0.5f/256.0f, 0,1/255.0f));
	}

	p = cgGetNamedParameter(pf->prog, "g_fBilinear");
	if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE )
		cgGLSetParameter4fv(p, float4(-0.2f, -0.65f, 0.9f, 1.0f / 32767.0f ));

	p = cgGetNamedParameter(pf->prog, "g_fZBias");
	if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE )
		cgGLSetParameter4fv(p, float4(1.0f/256.0f, 1.0004f, 1, 0.5f));

	p = cgGetNamedParameter(pf->prog, "g_fc0");
	if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE )
		cgGLSetParameter4fv(p, float4(0,1, 0.001f, 0.5f));

	p = cgGetNamedParameter(pf->prog, "g_fMult");
	if( p != NULL && cgIsParameterUsed(p, pf->prog) == CG_TRUE )
		cgGLSetParameter4fv(p, float4(1/1024.0f, 0.2f/1024.0f, 1/128.0f, 1/512.0f));
}
Exemple #11
0
void ZZshSetParameter4fv(ZZshProgram& prog, ZZshParameter param, const float* v, const char* name) {
	ShaderHandleName = name;
	cgGLSetParameter4fv(param, v);
}
// display function
void display() {

  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

  GLfloat translation[3];

  cgGLBindProgram(cg_vertex_program);
  checkForCgError("binding vertex program");

  cgGLEnableProfile(cg_vertex_profile);
  checkForCgError("enabling vertex profile");

  glMatrixMode(GL_MODELVIEW);

    glPushMatrix();

    gluLookAt(camera_position[0], camera_position[1], camera_position[2],    // camera Position
	    0.0, 0.0, 0.0,   				         	     // view Center
            0.0, 1.0, 0.0);			        	    	     // up vector


    cgGLSetParameter3fv(cg_vertex_param_ambient_light, ambient_light);
    cgGLSetParameter3fv(cg_vertex_param_light_color, light_color);
    cgGLSetParameter4fv(cg_vertex_param_light_position, light_position);
    cgGLSetParameter4fv(cg_vertex_param_camera_position, camera_position);

    glPushMatrix();

      translation[0] = 2.0; translation[1] = 0.0; translation[2] = 0.0;

      glTranslatef(translation[0], translation[1], translation[2]);
      cgGLSetParameter3fv(cg_vertex_param_translation, translation);

      cgGLSetStateMatrixParameter(cg_vertex_param_modelview_proj, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);
      checkForCgError("set parameter modelview_proj");
   
      set_brass_material();
      glutSolidSphere(2.0, 30, 30);

    glPopMatrix();

    glPushMatrix();
    
      translation[0] = -2.0; translation[1] = 0.0; translation[2] = -1.0;

      glTranslatef(translation[0], translation[1], translation[2]);
      cgGLSetParameter3fv(cg_vertex_param_translation, translation);

      cgGLSetStateMatrixParameter(cg_vertex_param_modelview_proj, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);
      checkForCgError("set parameter modelview_proj");

      set_plastic_material();
      glutSolidCube(3.0);

    glPopMatrix();

    glPushMatrix();

      translation[0] = 0.0; translation[1] = -1.5; translation[2] = 0.0;

      glTranslatef(translation[0], translation[1], translation[2]);
      cgGLSetParameter3fv(cg_vertex_param_translation, translation);  

      cgGLSetStateMatrixParameter(cg_vertex_param_modelview_proj, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);
      checkForCgError("set parameter modelview_proj"); 

      set_plane_material();
      glBegin(GL_QUADS);
        glNormal3f(0.0, 1.0, 0.0);
        glVertex3f(-10.0, 0.0, -10.0);
        glVertex3f(10.0, 0.0, -10.0);
        glVertex3f(10.0, 0.0, 10.0);
        glVertex3f(-10.0, 0.0, 10.0);
      glEnd();

    glPopMatrix();

    glPushMatrix();

      glTranslatef(light_position[0], light_position[1], light_position[2]);

      cgGLSetParameter3fv(cg_vertex_param_translation, light_position);

      cgGLSetStateMatrixParameter(cg_vertex_param_modelview_proj, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);
      checkForCgError("set parameter modelview_proj");

      set_light_source_material();
      glutSolidSphere(0.2, 10, 10);

    glPopMatrix();

  glPopMatrix();

  cgGLDisableProfile(cg_vertex_profile);
  checkForCgError("disabling vertex profile");

  glutSwapBuffers();
}
void ParticleShaderVoronoi::drawPost()
{

	// Get the viewport dimensions
	GLint viewport[4];
	glGetIntegerv(GL_VIEWPORT, viewport);

	if ((pbufferOne->height != viewport[3]) || (pbufferOne->width != viewport[2]))
	{
		delete pbufferOne;
		setupBuffers(viewport[2], viewport[3]);
	}

	// Get the light position
	GLfloat lightpos[4];
	glGetLightfv(GL_LIGHT0, GL_POSITION, lightpos);

	// Create storage for matrices
	GLfloat mm[16];
	GLfloat pm[16];

	// If we're not sharing contexts, need to copy state
	glGetFloatv(GL_MODELVIEW_MATRIX, mm);
	glGetFloatv(GL_PROJECTION_MATRIX, pm);

	// Switch to pbufferOne rendering context
	if (wglMakeCurrent(pbufferOne->hdc, pbufferOne->hglrc) == FALSE)
		pbufferOne->wglGetLastError();

	// If we're not sharing contexts, need to update state
	if (pbufferOne->onecontext == false) {

		glMatrixMode(GL_PROJECTION);
		glLoadMatrixf(pm);
	
		glMatrixMode(GL_MODELVIEW);
		glLoadMatrixf(mm);

		glEnable(GL_DEPTH_TEST);
	}
	else {
		// Turn off color writes, for better performance
		glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
	}

	// Clear the depth texture
	glClear(GL_DEPTH_BUFFER_BIT);

	cgGLEnableProfile(vProfile);
	cgGLEnableProfile(fProfile);
	cgGLBindProgram(vProgram);
	bindCGParametersVertex();
	cgGLBindProgram(fProgramZero);
	bindCGParametersFragmentZero();
	

	// Draw into the buffer for the depth texture
	for (unsigned int i = 0; i < ps->size(); i++)
		drawParticle(i);

	// Turn back on color for eventual rendering
	if (pbufferOne->onecontext) {
		glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
	}

	cgGLDisableProfile(vProfile);
    cgGLDisableProfile(fProfile);

	// Switch to normal rendering context
	if (wglMakeCurrent(hdc, hglrc) == FALSE)
		pbufferOne->wglGetLastError();
	
	// Setup CG
	cgGLEnableProfile(vProfile);
	cgGLEnableProfile(fProfile);
	cgGLBindProgram(vProgram);
	bindCGParametersVertex();
	bindCGParametersFragmentOne();
	cgGLBindProgram(fProgramOne);
	
	// Make the depth texture active
	glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC) wglGetProcAddress("glActiveTextureARB");
	glActiveTextureARB(GL_TEXTURE0_ARB);
	
	// Bind the depth texture
	glEnable(GL_TEXTURE_RECTANGLE_NV);
	glMatrixMode(GL_TEXTURE);
	glLoadIdentity();
	glMatrixMode(GL_MODELVIEW);
	glBindTexture(GL_TEXTURE_RECTANGLE_NV, depth_texture);
	
	// Bind pbufferOne as a depth texture
	wglBindTexImageARB = (PFNWGLBINDTEXIMAGEARBPROC)wglGetProcAddress("wglBindTexImageARB");
	if (wglBindTexImageARB(pbufferOne->hpbuffer, WGL_DEPTH_COMPONENT_NV) == FALSE)
		pbufferOne->wglGetLastError();

	cgGLEnableTextureParameter(firstPassDepth);
	
	glActiveTextureARB(GL_TEXTURE1_ARB);
	
	// Set parameters
	cgGLSetParameter1f(depthRange, GLfloat(abs(10.0 - 0.5)));
	cgGLSetParameter4fv(lightPositionEC, lightpos);
	cgGLSetParameter1f(toleranceScaleFactor, GLfloat(toleranceScale));
	cgGLSetStateMatrixParameter(viewMatrix, CG_GL_MODELVIEW_MATRIX, CG_GL_MATRIX_IDENTITY);

	glEnable(GL_DEPTH_TEST);
	glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);

	// Draw the particles to the screen
	for (unsigned int i = 0; i < ps->size(); i++) {
		drawSecondPass(i);
	}

	cgGLDisableTextureParameter(firstPassDepth);
	
	glDisable(GL_TEXTURE_RECTANGLE_NV);

	// Release the depth texture
	wglReleaseTexImageARB = (PFNWGLRELEASETEXIMAGEARBPROC)wglGetProcAddress("wglReleaseTexImageARB");
	if (wglReleaseTexImageARB(pbufferOne->hpbuffer, WGL_DEPTH_COMPONENT_NV) == false)
		pbufferOne->wglGetLastError();

	cgGLDisableProfile(vProfile);
    cgGLDisableProfile(fProfile);
}
void ObjMeshGPUDeformer::RenderMaster(int masterMode, void * data)
{
  glActiveTextureARB(GL_TEXTURE0_ARB); 
  glDisable(GL_TEXTURE_2D);

  cgGLEnableProfile(VertexProfile);

  if (masterMode == 0)
  {
    cgGLBindProgram(VertexPass2Program);

    if (renderingMode & OBJMESHRENDER_TEXTURE)
    {
      cgGLEnableProfile(FragmentProfile);
      cgGLBindProgram(FragmentPass2Program);
    }

    cgGLSetStateMatrixParameter(ModelViewProjParam,
      CG_GL_MODELVIEW_PROJECTION_MATRIX,
      CG_GL_MATRIX_IDENTITY);

    cgGLSetStateMatrixParameter(ModelViewITParam,
      CG_GL_MODELVIEW_MATRIX,
      CG_GL_MATRIX_INVERSE_TRANSPOSE);

    cgGLSetParameter4f(LightPos1Param, lightPos[0], lightPos[1], lightPos[2], 1);  
    cgGLSetParameter4f(LightPos2Param, lightPos[4], lightPos[5], lightPos[6], 1);  
    cgGLSetParameter4f(LightPos3Param, lightPos[8], lightPos[9], lightPos[10], 1);  
    cgGLSetParameter4f(LightPos4Param, lightPos[12], lightPos[13], lightPos[14], 1); 
    cgGLSetParameter1f(Light1IntensityParam, lightIntensity[0]);  
    cgGLSetParameter1f(Light2IntensityParam, lightIntensity[1]);  
    cgGLSetParameter1f(Light3IntensityParam, lightIntensity[2]);  
    cgGLSetParameter1f(Light4IntensityParam, lightIntensity[3]);  

    cgGLSetParameter1f(AmbientIntensityParam, ambientIntensity);  
  }

  if (masterMode == 1)
  {
    cgGLBindProgram(VertexPass2ProgramShadow);

    cgGLSetStateMatrixParameter(ModelViewProjShadowParam,
      CG_GL_MODELVIEW_PROJECTION_MATRIX,
      CG_GL_MATRIX_IDENTITY);

    double intensity = *(double*)data;
    cgGLSetParameter1f(ShadowIntensityParam, intensity);
  }

  if (renderingMode & OBJMESHRENDER_TEXTURE)
  {
    cgGLEnableProfile(FragmentProfile);
    cgGLBindProgram(FragmentPass2Program);
  }

  cgGLSetStateMatrixParameter(ModelViewProjParam,
    CG_GL_MODELVIEW_PROJECTION_MATRIX,
    CG_GL_MATRIX_IDENTITY);

  cgGLSetStateMatrixParameter(ModelViewITParam,
    CG_GL_MODELVIEW_MATRIX,
    CG_GL_MATRIX_INVERSE_TRANSPOSE);

  cgGLSetParameter4f(LightPos1Param, lightPos[0], lightPos[1], lightPos[2], 1);  
  cgGLSetParameter4f(LightPos2Param, lightPos[4], lightPos[5], lightPos[6], 1);  
  cgGLSetParameter4f(LightPos3Param, lightPos[8], lightPos[9], lightPos[10], 1);  
  cgGLSetParameter4f(LightPos4Param, lightPos[12], lightPos[13], lightPos[14], 1); 
  cgGLSetParameter1f(Light1IntensityParam, lightIntensity[0]);  
  cgGLSetParameter1f(Light2IntensityParam, lightIntensity[1]);  
  cgGLSetParameter1f(Light3IntensityParam, lightIntensity[2]);  
  cgGLSetParameter1f(Light4IntensityParam, lightIntensity[3]);  

  cgGLSetParameter1f(AmbientIntensityParam, ambientIntensity);  

  glBindTexture(GL_TEXTURE_2D, vertexDeformationTextureID);
  BindRT();

  for(int groupNo=0; groupNo<numGroups; groupNo++)
  {
    const ObjMesh::Group * groupHandle = mesh->getGroupHandle(groupNo);
    int materialIndex = groupHandle->getMaterialIndex();
    const ObjMesh::Material * materialHandle = mesh->getMaterialHandle(materialIndex);

    float alpha = (float)(materialHandle->getAlpha());

    Vec3d Ka = materialHandle->getKa();
    float Kav[4] = { (float)Ka[0], (float)Ka[1], (float)Ka[2], alpha };

    Vec3d Kd = materialHandle->getKd();
    float Kdv[4] = { (float)Kd[0], (float)Kd[1], (float)Kd[2], alpha };

    Vec3d Ks = materialHandle->getKs();
    float Ksv[4] = { (float)Ks[0], (float)Ks[1], (float)Ks[2], alpha };

    float shininess = materialHandle->getShininess();

    glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, Kav);
    glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, Kdv);
    glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, Ksv);
    glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, shininess);

    float zero[4] = { 0, 0, 0, 0 };
    cgGLSetParameter4fv(KaParam, ambientEnabled ? Kav : zero);
    cgGLSetParameter4fv(KdParam, diffuseEnabled ? Kdv : zero);
    cgGLSetParameter4fv(KsParam, specularEnabled ? Ksv : zero);
    cgGLSetParameter1f(shininessParam, shininess);

    if ((renderingMode & OBJMESHRENDER_TEXTURE) && (materialHandle->hasTextureFilename()))
    {
      ObjMeshRender::Texture * textureHandle = meshRender->getTextureHandle(materialIndex);
      GLuint tname = textureHandle->getTexture();
      glActiveTextureARB(GL_TEXTURE1_ARB); 
      glBindTexture(GL_TEXTURE_2D, tname);
      glEnable(GL_TEXTURE_2D);
    }

    #ifdef OBJMESHGPUDEFORMER_USING_VBOS
      glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboID[5*groupNo+0]);
      glEnableClientState(GL_VERTEX_ARRAY);
      glVertexPointer(3, GL_FLOAT, 0, 0);

      if (vboNormalEnabled[groupNo])
      {
        glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboID[5*groupNo+1]);
        glEnableClientState(GL_NORMAL_ARRAY);
        glNormalPointer(GL_FLOAT, 0, 0);
      }

      glClientActiveTextureARB(GL_TEXTURE0_ARB);
      glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboID[5*groupNo+2]);
      glEnableClientState(GL_TEXTURE_COORD_ARRAY);
      glTexCoordPointer(2, GL_FLOAT, 0, 0);

      if (vboTex1Enabled[groupNo])
      {
        glClientActiveTextureARB(GL_TEXTURE1_ARB);
        glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboID[5*groupNo+3]);
        glEnableClientState(GL_TEXTURE_COORD_ARRAY);
        glTexCoordPointer(2, GL_FLOAT, 0, 0);
      }

      glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, vboID[5*groupNo+4]);
      glDrawElements(GL_TRIANGLES, 3 * numGroupTriangles[groupNo], GL_UNSIGNED_INT, 0);

      // turn off VBOs
      glDisableClientState(GL_VERTEX_ARRAY);
      if (vboNormalEnabled[groupNo])
        glDisableClientState(GL_NORMAL_ARRAY);
      glClientActiveTextureARB(GL_TEXTURE0_ARB);
      glDisableClientState(GL_TEXTURE_COORD_ARRAY);
      if (vboTex1Enabled[groupNo])
      {
        glClientActiveTextureARB(GL_TEXTURE1_ARB);
        glDisableClientState(GL_TEXTURE_COORD_ARRAY);
      }
      glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
      glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);

    #else
      glCallList(displayListStart + groupNo);
    #endif

    if ((masterMode == 0) && (renderingMode & OBJMESHRENDER_TEXTURE) && (materialHandle->hasTextureFilename()))
    {
      glDisable(GL_TEXTURE_2D);
      glActiveTextureARB(GL_TEXTURE0_ARB); 
    }
  }

  UnbindRT();

  if ((masterMode == 0) && (renderingMode & OBJMESHRENDER_TEXTURE))
    cgGLDisableProfile(FragmentProfile);

  cgGLDisableProfile(VertexProfile);
}
Exemple #15
0
 void OGLShader::setParameter(const std::string name, const float* value){
     cgGLSetParameter4fv(getParameter(name), value);
 }