New ctx->Driver.Map/UnmapTexture() functions for accessing textures from t_vb_program.c
This commit is contained in:
@@ -245,6 +245,50 @@ init_machine(GLcontext *ctx, struct gl_program_machine *machine)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Map the texture images which the vertex program will access (if any).
|
||||
*/
|
||||
static void
|
||||
map_textures(GLcontext *ctx, const struct gl_vertex_program *vp)
|
||||
{
|
||||
GLuint u;
|
||||
|
||||
if (!ctx->Driver.MapTexture)
|
||||
return;
|
||||
|
||||
for (u = 0; u < ctx->Const.MaxVertexTextureImageUnits; u++) {
|
||||
if (vp->Base.TexturesUsed[u]) {
|
||||
/* Note: _Current *should* correspond to the target indicated
|
||||
* in TexturesUsed[u].
|
||||
*/
|
||||
ctx->Driver.MapTexture(ctx, ctx->Texture.Unit[u]._Current);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Unmap the texture images which were used by the vertex program (if any).
|
||||
*/
|
||||
static void
|
||||
unmap_textures(GLcontext *ctx, const struct gl_vertex_program *vp)
|
||||
{
|
||||
GLuint u;
|
||||
|
||||
if (!ctx->Driver.MapTexture)
|
||||
return;
|
||||
|
||||
for (u = 0; u < ctx->Const.MaxVertexTextureImageUnits; u++) {
|
||||
if (vp->Base.TexturesUsed[u]) {
|
||||
/* Note: _Current *should* correspond to the target indicated
|
||||
* in TexturesUsed[u].
|
||||
*/
|
||||
ctx->Driver.UnmapTexture(ctx, ctx->Texture.Unit[u]._Current);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This function executes vertex programs
|
||||
*/
|
||||
@@ -278,6 +322,8 @@ run_vp( GLcontext *ctx, struct tnl_pipeline_stage *stage )
|
||||
}
|
||||
}
|
||||
|
||||
map_textures(ctx, program);
|
||||
|
||||
for (i = 0; i < VB->Count; i++) {
|
||||
GLuint attr;
|
||||
|
||||
@@ -329,6 +375,8 @@ run_vp( GLcontext *ctx, struct tnl_pipeline_stage *stage )
|
||||
#endif
|
||||
}
|
||||
|
||||
unmap_textures(ctx, program);
|
||||
|
||||
/* Fixup fog and point size results if needed */
|
||||
if (program->IsNVProgram) {
|
||||
if (ctx->Fog.Enabled &&
|
||||
|
Reference in New Issue
Block a user