static void clear_texture(GLuint tex) { /* Clear the entire texture to red */ glClearTexImage(tex, 0, /* level */ GL_RGBA, GL_FLOAT, red); /* Clear two other sub-regions */ glClearTexSubImage(tex, 0, /* level */ ZERO_CLEAR_X, ZERO_CLEAR_Y, 0, ZERO_CLEAR_WIDTH, ZERO_CLEAR_HEIGHT, 1, GL_RGBA, GL_UNSIGNED_BYTE, NULL); glClearTexSubImage(tex, 0, /* level */ VALUE_CLEAR_X, VALUE_CLEAR_Y, 0, VALUE_CLEAR_WIDTH, VALUE_CLEAR_HEIGHT, 1, GL_RGBA, GL_FLOAT, green); if (!piglit_check_gl_error(GL_NO_ERROR)) piglit_report_result(PIGLIT_FAIL); }
enum piglit_result piglit_display(void) { bool pass = true; if (!piglit_check_gl_error(GL_NO_ERROR)) piglit_report_result(PIGLIT_FAIL); /* Clear the whole first texture with green */ glClearTexImage(texture[0], 0, GL_RGB, GL_FLOAT, green); pass &= piglit_check_gl_error(GL_NO_ERROR); /* Clear the left half of the second texture with blue */ glClearTexSubImage(texture[1], 0, 0, 0, 0, 32, 64, 1, GL_RGB, GL_FLOAT, blue); pass &= piglit_check_gl_error(GL_NO_ERROR); /* And the right half with yellow */ glClearTexSubImage(texture[1], 0, 32, 0, 0, 32, 64, 1, GL_RGB, GL_FLOAT, yellow); pass &= piglit_check_gl_error(GL_NO_ERROR); /* Render both textures to the screen */ piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, piglit_winsys_fbo); glEnable(GL_TEXTURE_2D); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); glBindTexture(GL_TEXTURE_2D, texture[0]); piglit_draw_rect_tex(0, 0, 64, 64, 0, 0, 1, 1); glBindTexture(GL_TEXTURE_2D, texture[1]); piglit_draw_rect_tex(64, 0, 64, 64, 0, 0, 1, 1); glDisable(GL_TEXTURE_2D); glDeleteTextures(2, texture); /* Check for the 3 separate regions */ pass &= piglit_probe_rect_rgb(0, 0, 64, 64, green); pass &= piglit_probe_rect_rgb(64, 0, 32, 64, blue); pass &= piglit_probe_rect_rgb(96, 0, 32, 64, yellow); piglit_present_results(); return pass ? PIGLIT_PASS : PIGLIT_FAIL; }
static void clear_texture(GLuint tex) { int i; for (i = 0; i < 6; i++) { glClearTexSubImage(tex, 0, /* level */ 0, 0, i, /* x/y/z */ 1, 1, 1, /* width/height/depth */ GL_RGB, GL_FLOAT, faces[i].color); } if (!piglit_check_gl_error(GL_NO_ERROR)) piglit_report_result(PIGLIT_FAIL); }
void display() { { // Compute the MVP (Model View Projection matrix) float Aspect = (Window.Size.x * 0.50f) / (Window.Size.y * 0.50f); glm::mat4 Projection = glm::perspective(45.0f, Aspect, 0.1f, 100.0f); glm::mat4 ViewTranslateZ = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -Window.TranlationCurrent.y)); glm::mat4 ViewRotateX = glm::rotate(ViewTranslateZ, Window.RotationCurrent.y, glm::vec3(1.f, 0.f, 0.f)); glm::mat4 ViewRotateY = glm::rotate(ViewRotateX, Window.RotationCurrent.x, glm::vec3(0.f, 1.f, 0.f)); glm::mat4 View = ViewRotateY; glm::mat4 Model = glm::mat4(1.0f); glm::mat4 MVP = Projection * View * Model; *UniformPointer = MVP; } glFlushMappedBufferRange(GL_UNIFORM_BUFFER, 0, sizeof(glm::mat4)); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); glViewportIndexedf(0, 0, 0, GLfloat(Window.Size.x), GLfloat(Window.Size.y)); glBindFramebuffer(GL_FRAMEBUFFER, FramebufferName); float Depth(1.0f); glm::u8vec4 ColorClear(255, 127, 0, 255); glm::u8vec4 ColorTex(0, 127, 255, 255); glClearBufferfv(GL_DEPTH , 0, &Depth); glClearTexImage(TextureName[texture::COLORBUFFER], 0, GL_RGBA, GL_UNSIGNED_BYTE, &ColorClear); glClearTexSubImage(TextureName[texture::COLORBUFFER], 0, 64, 64, 0, 64, 64, 1, GL_RGBA, GL_UNSIGNED_BYTE, &ColorTex); glClearTexSubImage(TextureName[texture::COLORBUFFER], 0, 256, 0, 0, 64, 64, 1, GL_RGBA, GL_UNSIGNED_BYTE, &ColorTex); glClearTexSubImage(TextureName[texture::COLORBUFFER], 0, 128, 384, 0, 64, 64, 1, GL_RGBA, GL_UNSIGNED_BYTE, &ColorTex); glClearTexSubImage(TextureName[texture::COLORBUFFER], 0, 512, 256, 0, 64, 64, 1, GL_RGBA, GL_UNSIGNED_BYTE, &ColorTex); // Bind rendering objects glBindProgramPipeline(PipelineName[pipeline::TEXTURE]); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, TextureName[texture::DIFFUSE]); glBindVertexArray(VertexArrayName[pipeline::TEXTURE]); glBindVertexBuffer(glf::semantic::buffer::STATIC, BufferName[buffer::VERTEX], 0, GLsizei(sizeof(glf::vertex_v2fv2f))); glBindBufferBase(GL_UNIFORM_BUFFER, glf::semantic::uniform::TRANSFORM0, BufferName[buffer::TRANSFORM]); glDrawElementsInstancedBaseVertexBaseInstance( GL_TRIANGLES, ElementCount, GL_UNSIGNED_SHORT, 0, 2, 0, 0); glDisable(GL_DEPTH_TEST); glBindFramebuffer(GL_FRAMEBUFFER, 0); glBindProgramPipeline(PipelineName[pipeline::SPLASH]); glActiveTexture(GL_TEXTURE0); glBindVertexArray(VertexArrayName[pipeline::SPLASH]); glBindTexture(GL_TEXTURE_2D, TextureName[texture::COLORBUFFER]); glDrawArraysInstanced(GL_TRIANGLES, 0, 3, 1); glf::swapBuffers(); }
void Texture::clearSubImage(const GLint level, const GLint xOffset, const GLint yOffset, const GLint zOffset, const GLsizei width, const GLsizei height, const GLsizei depth, const GLenum format, const GLenum type, const void * data) { glClearTexSubImage(id(), level, xOffset, yOffset, zOffset, width, height, depth, format, type, data); }
void GSTextureOGL::Clear(const void* data, const GSVector4i& area) { glClearTexSubImage(m_texture_id, GL_TEX_LEVEL_0, area.x, area.y, 0, area.width(), area.height(), 1, m_int_format, m_int_type, data); }
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GL44_nglClearTexSubImage(JNIEnv *env, jclass clazz, jint texture, jint level, jint xoffset, jint yoffset, jint zoffset, jint width, jint height, jint depth, jint format, jint type, jlong data, jlong function_pointer) { const GLvoid *data_address = (const GLvoid *)(intptr_t)data; glClearTexSubImagePROC glClearTexSubImage = (glClearTexSubImagePROC)((intptr_t)function_pointer); glClearTexSubImage(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, data_address); }
void Texture::clear(SurfaceFormat fmt, const void* data) { ImageFormat gl_fmt = toImageFormat(fmt); glClearTexSubImage(_glId, 0, 0, 0, 0, width(), height(), depth(), gl_fmt.Format, gl_fmt.Type, data); }