-
Notifications
You must be signed in to change notification settings - Fork 8
Open
Labels
glrendOpenGL RendererOpenGL Renderer
Description
Can't strictly be done in the shader, requires duplicating vertices CPU-side.
Probably not worth the effort implementing as nothing uses it, but tracking this for posterity.
Example with rdemo, with:
mirror_mat = CreateMaterial("mirror");
//mirror_mat->flags |= BR_MATF_ENVIRONMENT_L;
mirror_mat->flags |= BR_MATF_QUAD_MAPPING;
mirror_mat->colour_map = ref->mirror_pm;
BrMaterialAdd(mirror_mat);
Relevant softrend code in mapping.c:
void BR_ASM_CALL OpTriangleMapQuad(brp_block *block, brp_vertex *v0, brp_vertex *v1, brp_vertex *v2, br_uint_16 (*fp_vertices)[3],
br_uint_16 (*fp_edges)[3], br_vector4 *fp_eqn, struct temp_face *tfp)
{
br_vector2 *qv = (br_vector2 *)&rend.renderer->state.cache.quad_transformed;
switch(rend.face_flags[rend.current_index] & BR_FACEF_QUAD_MASK) {
case BR_FACEF_QUAD_012:
v0->comp[C_U] = qv[0].v[0];
v0->comp[C_V] = qv[0].v[1];
v1->comp[C_U] = qv[1].v[0];
v1->comp[C_V] = qv[1].v[1];
v2->comp[C_U] = qv[2].v[0];
v2->comp[C_V] = qv[2].v[1];
break;
case BR_FACEF_QUAD_123:
v0->comp[C_U] = qv[1].v[0];
v0->comp[C_V] = qv[1].v[1];
v1->comp[C_U] = qv[2].v[0];
v1->comp[C_V] = qv[2].v[1];
v2->comp[C_U] = qv[3].v[0];
v2->comp[C_V] = qv[3].v[1];
break;
case BR_FACEF_QUAD_230:
v0->comp[C_U] = qv[2].v[0];
v0->comp[C_V] = qv[2].v[1];
v1->comp[C_U] = qv[3].v[0];
v1->comp[C_V] = qv[3].v[1];
v2->comp[C_U] = qv[0].v[0];
v2->comp[C_V] = qv[0].v[1];
break;
case BR_FACEF_QUAD_301:
v0->comp[C_U] = qv[3].v[0];
v0->comp[C_V] = qv[3].v[1];
v1->comp[C_U] = qv[0].v[0];
v1->comp[C_V] = qv[0].v[1];
v2->comp[C_U] = qv[1].v[0];
v2->comp[C_V] = qv[1].v[1];
break;
case BR_FACEF_QUAD_032:
v0->comp[C_U] = qv[0].v[0];
v0->comp[C_V] = qv[0].v[1];
v1->comp[C_U] = qv[3].v[0];
v1->comp[C_V] = qv[3].v[1];
v2->comp[C_U] = qv[2].v[0];
v2->comp[C_V] = qv[2].v[1];
break;
case BR_FACEF_QUAD_103:
v0->comp[C_U] = qv[1].v[0];
v0->comp[C_V] = qv[1].v[1];
v1->comp[C_U] = qv[0].v[0];
v1->comp[C_V] = qv[0].v[1];
v2->comp[C_U] = qv[3].v[0];
v2->comp[C_V] = qv[3].v[1];
break;
case BR_FACEF_QUAD_210:
v0->comp[C_U] = qv[2].v[0];
v0->comp[C_V] = qv[2].v[1];
v1->comp[C_U] = qv[1].v[0];
v1->comp[C_V] = qv[1].v[1];
v2->comp[C_U] = qv[0].v[0];
v2->comp[C_V] = qv[0].v[1];
break;
case BR_FACEF_QUAD_321:
v0->comp[C_U] = qv[3].v[0];
v0->comp[C_V] = qv[3].v[1];
v1->comp[C_U] = qv[2].v[0];
v1->comp[C_V] = qv[2].v[1];
v2->comp[C_U] = qv[1].v[0];
v2->comp[C_V] = qv[1].v[1];
break;
}
block->chain->render(block->chain, v0, v1, v2, fp_vertices, fp_edges, fp_eqn, tfp);
}Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
glrendOpenGL RendererOpenGL Renderer