void glopMaterial(GLContext *c, GLParam *p) { int mode = p[1].i; int type = p[2].i; float v[4] = { p[3].f, p[4].f, p[5].f, p[6].f }; int i; GLMaterial *m; if (mode == TGL_FRONT_AND_BACK) { p[1].i=TGL_FRONT; glopMaterial(c,p); mode=TGL_BACK; } if (mode == TGL_FRONT) m = &c->materials[0]; else m = &c->materials[1]; switch (type) { case TGL_EMISSION: for (i = 0; i < 4; i++) m->emission.v[i] = v[i]; break; case TGL_AMBIENT: for (i = 0; i < 4; i++) m->ambient.v[i] = v[i]; break; case TGL_DIFFUSE: for (i = 0; i < 4; i++) m->diffuse.v[i] = v[i]; break; case TGL_SPECULAR: for (i = 0; i < 4; i++) m->specular.v[i] = v[i]; break; case TGL_SHININESS: m->shininess = v[0]; m->shininess_i = (int)(v[0] / 128.0f) * SPECULAR_BUFFER_RESOLUTION; break; case TGL_AMBIENT_AND_DIFFUSE: for (i = 0; i < 4; i++) m->diffuse.v[i] = v[i]; for (i = 0; i < 4; i++) m->ambient.v[i] = v[i]; break; default: assert(0); } }
void glopMaterial(GLContext *c,GLParam *p) { int mode=p[1].i; int type=p[2].i; GLfloat *v=&p[3].f; int i; GLMaterial *m; if (mode == GL_FRONT_AND_BACK) { p[1].i=GL_FRONT; glopMaterial(c,p); mode=GL_BACK; } if (mode == GL_FRONT) m=&c->materials[0]; else m=&c->materials[1]; switch(type) { case GL_EMISSION: for(i=0;i<4;i++) m->emission[i]=v[i]; break; case GL_AMBIENT: for(i=0;i<4;i++) m->ambient[i]=v[i]; break; case GL_DIFFUSE: for(i=0;i<4;i++) m->diffuse[i]=v[i]; break; case GL_SPECULAR: for(i=0;i<4;i++) m->specular[i]=v[i]; break; case GL_SHININESS: m->shininess=v[0]; m->shininess_i = (int)(((v[0]/ (float)(128))* (float)(SPECULAR_BUFFER_RESOLUTION))); break; case GL_AMBIENT_AND_DIFFUSE: for(i=0;i<4;i++) m->diffuse[i]=v[i]; for(i=0;i<4;i++) m->ambient[i]=v[i]; break; default: assert(0); } }
void glopMaterial(GLContext *c, GLParam *p) { int mode = p[1].i; int type = p[2].i; Vector4 v(p[3].f, p[4].f, p[5].f, p[6].f); GLMaterial *m; if (mode == TGL_FRONT_AND_BACK) { p[1].i = TGL_FRONT; glopMaterial(c, p); mode = TGL_BACK; } if (mode == TGL_FRONT) m = &c->materials[0]; else m = &c->materials[1]; switch (type) { case TGL_EMISSION: m->emission = v; break; case TGL_AMBIENT: m->ambient = v; break; case TGL_DIFFUSE: m->diffuse = v; break; case TGL_SPECULAR: m->specular = v; break; case TGL_SHININESS: m->shininess = v.X; m->shininess_i = (int)(v.X / 128.0f) * SPECULAR_BUFFER_RESOLUTION; break; case TGL_AMBIENT_AND_DIFFUSE: m->diffuse = v; m->ambient = v; break; default: assert(0); } }
void glopColor(GLContext * c, GLParam * p) { c->current_color.X = p[1].f; c->current_color.Y = p[2].f; c->current_color.Z = p[3].f; c->current_color.W = p[4].f; c->longcurrent_color[0] = p[5].ui; c->longcurrent_color[1] = p[6].ui; c->longcurrent_color[2] = p[7].ui; if (c->color_material_enabled) { GLParam q[7]; q[0].op = OP_Material; q[1].i = c->current_color_material_mode; q[2].i = c->current_color_material_type; q[3].f = p[1].f; q[4].f = p[2].f; q[5].f = p[3].f; q[6].f = p[4].f; glopMaterial(c, q); } }