Пример #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);
}
Пример #2
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);
}
Пример #3
0
static void gl_cg_set_uniform_parameter(
      void *data,
      struct uniform_info *param,
      void *uniform_data)
{
   CGparameter location;
   cg_shader_data_t *cg        = (cg_shader_data_t*)data;

   if (!param || !param->enabled)
      return;

   if (param->lookup.enable)
   {
      char ident[64];
      CGprogram prog = 0;

      switch (param->lookup.type)
      {
         case SHADER_PROGRAM_VERTEX:
            prog = cg->prg[param->lookup.idx].vprg;
            break;
         case SHADER_PROGRAM_FRAGMENT:
         default:
            prog = cg->prg[param->lookup.idx].fprg;
            break;
      }

      if (param->lookup.add_prefix)
         snprintf(ident, sizeof(ident), "IN.%s", param->lookup.ident);
      location = cgGetNamedParameter(prog, param->lookup.add_prefix ? ident : param->lookup.ident);
   }
   else
   {
      struct uniform_cg *cg_param = (struct uniform_cg*)uniform_data;
      location = cg_param->loc;
   }

   switch (param->type)
   {
      case UNIFORM_1F:
         cgGLSetParameter1f(location, param->result.f.v0);
         break;
      case UNIFORM_2F:
         cgGLSetParameter2f(location, param->result.f.v0, param->result.f.v1);
         break;
      case UNIFORM_3F:
         cgGLSetParameter3f(location, param->result.f.v0, param->result.f.v1,
               param->result.f.v2);
         break;
      case UNIFORM_4F:
         cgGLSetParameter4f(location, param->result.f.v0, param->result.f.v1,
               param->result.f.v2, param->result.f.v3);
         break;
      case UNIFORM_1FV:
         cgGLSetParameter1fv(location, param->result.floatv);
         break;
      case UNIFORM_2FV:
         cgGLSetParameter2fv(location, param->result.floatv);
         break;
      case UNIFORM_3FV:
         cgGLSetParameter3fv(location, param->result.floatv);
         break;
      case UNIFORM_4FV:
         cgGLSetParameter3fv(location, param->result.floatv);
         break;
      case UNIFORM_1I:
         /* Unimplemented - Cg limitation */
         break;
   }
}