void GPU_shader_uniform_texture(GPUShader *UNUSED(shader), int location, GPUTexture *tex) { GLenum arbnumber; int number = GPU_texture_bound_number(tex); int bindcode = GPU_texture_opengl_bindcode(tex); int target = GPU_texture_target(tex); if (number >= GPU_max_textures()) { fprintf(stderr, "Not enough texture slots.\n"); return; } if (number == -1) return; if (location == -1) return; GPU_ASSERT_NO_GL_ERRORS("Pre Uniform Texture"); arbnumber = (GLenum)((GLuint)GL_TEXTURE0 + number); if (number != 0) glActiveTexture(arbnumber); if (bindcode != 0) glBindTexture(target, bindcode); else GPU_invalid_tex_bind(target); glUniform1i(location, number); glEnable(target); if (number != 0) glActiveTexture(GL_TEXTURE0); GPU_ASSERT_NO_GL_ERRORS("Post Uniform Texture"); }
void GPU_texture_bind(GPUTexture *tex, int number) { GLenum arbnumber; if (number >= GG.maxtextures) { GPU_print_error("Not enough texture slots."); return; } if (number == -1) return; GPU_print_error("Pre Texture Bind"); arbnumber = (GLenum)((GLuint)GL_TEXTURE0_ARB + number); if (number != 0) glActiveTextureARB(arbnumber); if (tex->bindcode != 0) { glBindTexture(tex->target, tex->bindcode); } else GPU_invalid_tex_bind(tex->target); glEnable(tex->target); if (number != 0) glActiveTextureARB(GL_TEXTURE0_ARB); tex->number = number; GPU_print_error("Post Texture Bind"); }
void GPU_texture_bind(GPUTexture *tex, int number) { GLenum arbnumber; if (number >= GG.maxtextures) { GPU_print_error("Not enough texture slots."); return; } if (tex->fb) { if (tex->fb->object == GG.currentfb) { fprintf(stderr, "Feedback loop warning!: Attempting to bind texture attached to current framebuffer!\n"); } } if (number < 0) return; GPU_print_error("Pre Texture Bind"); arbnumber = (GLenum)((GLuint)GL_TEXTURE0_ARB + number); if (number != 0) glActiveTextureARB(arbnumber); if (tex->bindcode != 0) { glBindTexture(tex->target, tex->bindcode); } else GPU_invalid_tex_bind(tex->target); glEnable(tex->target); if (number != 0) glActiveTextureARB(GL_TEXTURE0_ARB); tex->number = number; GPU_print_error("Post Texture Bind"); }
void GPU_shader_uniform_texture(GPUShader *UNUSED(shader), int location, GPUTexture *tex) { GLenum arbnumber; if (tex->number >= GG.maxtextures) { GPU_print_error("Not enough texture slots."); return; } if (tex->number == -1) return; if (location == -1) return; GPU_print_error("Pre Uniform Texture"); arbnumber = (GLenum)((GLuint)GL_TEXTURE0_ARB + tex->number); if (tex->number != 0) glActiveTextureARB(arbnumber); if (tex->bindcode != 0) glBindTexture(tex->target, tex->bindcode); else GPU_invalid_tex_bind(tex->target); glUniform1iARB(location, tex->number); glEnable(tex->target); if (tex->number != 0) glActiveTextureARB(GL_TEXTURE0_ARB); GPU_print_error("Post Uniform Texture"); }
void GPU_texture_bind(GPUTexture *tex, int number) { if (number >= GPU_max_textures()) { fprintf(stderr, "Not enough texture slots.\n"); return; } if ((G.debug & G_DEBUG)) { if (tex->fb && GPU_framebuffer_bound(tex->fb)) { fprintf(stderr, "Feedback loop warning!: Attempting to bind texture attached to current framebuffer!\n"); } } if (number < 0) return; GPU_ASSERT_NO_GL_ERRORS("Pre Texture Bind"); GLenum arbnumber = (GLenum)((GLuint)GL_TEXTURE0 + number); if (number != 0) glActiveTexture(arbnumber); if (tex->bindcode != 0) { glBindTexture(tex->target, tex->bindcode); } else GPU_invalid_tex_bind(tex->target); glEnable(tex->target); if (number != 0) glActiveTexture(GL_TEXTURE0); tex->number = number; GPU_ASSERT_NO_GL_ERRORS("Post Texture Bind"); }