Example #1
0
void ShaderParams::set_colour(const std::string& uniform_name, const Colour& values) {
    kmVec4 tmp;
    kmVec4Fill(&tmp, values.r, values.g, values.b, values.a);
    set_vec4(uniform_name, tmp);
}
Example #2
0
struct model_st *mdl_create_square_model(int xnum, int ynum, GLfloat lx,
					 GLfloat by, GLfloat rx, GLfloat ty)
{
    struct model_st *tmp;

    tmp = mdl_new_model(1);

    tmp->name = strdup("checker_model");

    int vcount = 6 * xnum * ynum;

    GLfloat dx = 1.0f / xnum;
    GLfloat dy = 1.0f / ynum;

    GLfloat(*vertices)[4] =
	(GLfloat(*)[4]) malloc(sizeof(GLfloat) * 4 * vcount);
    GLfloat(*tcoords)[2] =
	(GLfloat(*)[2]) malloc(sizeof(GLfloat) * 2 * vcount);
    GLfloat(*normals)[3] =
	(GLfloat(*)[3]) malloc(sizeof(GLfloat) * 3 * vcount);

    int k = 0;
    for (int i = 0; i < xnum; i++) {
	for (int j = 0; j < ynum; j++) {
	    set_vec4(i * dx, j * dy, 0.0, 1.0, vertices[k]);
	    set_vec4((i + 1) * dx, j * dy, 0.0, 1.0, vertices[k + 1]);
	    set_vec4(i * dx, (j + 1) * dy, 0.0, 1.0, vertices[k + 2]);

	    set_vec4(i * dx, (j + 1) * dy, 0.0, 1.0, vertices[k + 3]);
	    set_vec4((i + 1) * dx, j * dy, 0.0, 1.0, vertices[k + 4]);
	    set_vec4((i + 1) * dx, (j + 1) * dy, 0.0, 1.0, vertices[k + 5]);

	    set_vec2(lx, by, tcoords[k]);
	    set_vec2(rx, by, tcoords[k + 1]);
	    set_vec2(lx, ty, tcoords[k + 2]);

	    set_vec2(lx, ty, tcoords[k + 3]);
	    set_vec2(rx, by, tcoords[k + 4]);
	    set_vec2(rx, ty, tcoords[k + 5]);

	    set_vec3(0.0, 0.0, 1.0, normals[k]);
	    set_vec3(0.0, 0.0, 1.0, normals[k + 1]);
	    set_vec3(0.0, 0.0, 1.0, normals[k + 2]);

	    set_vec3(0.0, 0.0, 1.0, normals[k + 3]);
	    set_vec3(0.0, 0.0, 1.0, normals[k + 4]);
	    set_vec3(0.0, 0.0, 1.0, normals[k + 5]);

	    k += 6;
	}
    }

    tmp->vcount = vcount;
    tmp->vertices = (GLfloat *) vertices;
    tmp->tcoords = (GLfloat *) tcoords;
    tmp->normals = (GLfloat *) normals;
    tmp->draw_mode = GL_TRIANGLES;

    for (int i = 0; i < vcount; i++)
	DBG_TRACE(0, "V[%d] = %f %f %f %f\n", i,
		  tmp->vertices[4 * i + 0],
		  tmp->vertices[4 * i + 1],
		  tmp->vertices[4 * i + 2], tmp->vertices[4 * i + 3]);
    return tmp;
}