天道酬勤,学无止境

glteximage2d

How to properly use GL_HALF_FLOAT_OES for textures?

I'm using OpenGL ES 2.0 on an iPad 2 / 3. I'd like to use GL_FLOAT when creating textures: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texWidth, texHeight, 0, GL_RGBA, GL_FLOAT, rawData); but the problem is that GL_LINEAR is not supported as a GL_TEXTURE_MAG_FILTER when GL_FLOAT is used if you don't have GL_OES_texture_float_linear showing up in your list of supported extensions. (None of the iPads do.) But I do have GL_OES_texture_half_float_linear in my list of extensions. So using a half-float texture ought to work with linear interpolation. Problem is, switching my texture creation to

2022-02-10 23:06:00    分类:问答    opengl-es-2.0   textures   linear-interpolation   glteximage2d

OpenGL glGetTexImage2d type parameter?

reading the docs i see that the glGetTexImage2d() function has a 'type' parameter. The docs say that the type parameter "specifies the data type of the pixel data" and gives some examples of types such as GL_INT, GL_BYTE, etc. but what does it mean precisely when the image format is GL_RGBA and GL_INT ? is it an int for each channel? or an int for the whole color? and if it's an int for th whole color, then isn't that really the same as GL_BYTE ? since there's 4 bytes in an int which makes each channel a byte each

2022-01-21 21:11:29    分类:问答    opengl   graphics   glteximage2d

在着色器程序之间传递数据(pass data between shader programs)

问题 好的,我将尽可能保持简单。 我想在着色器程序之间传递数据。 我目前正在使用 readPixels 来做到这一点,但我觉得它可能会减慢操作速度,我正在探索更快的选择。 我的程序做什么: program1 将我的渲染渲染到画布上。 program2 在它的着色器中做了一些很棒的操作,我想传递给 program1。 我的问题: 是否可以使用 program2 中的 vbo 并将其传递给 program1 进行渲染? 从我在下面给出的链接中听起来,您不能跨上下文共享数据,这意味着来自一个缓冲区的数据不能用于另一个缓冲区。 但也许我错过了一些东西。 我相信本文中提到的方法可以通过渲染到画布然后使用 texImage2D 更新程序 1(将帧缓冲区数据从一个 WebGLRenderingContext 复制到另一个?)来完成我正在寻找的方法。 我对么? 如果是这样,这会比使用 readPixels 更快吗? (我问是因为如果使用 texImage2D 大致相同,我不会打扰)。 提前感谢任何回答的人。 回答1 将数据从一个着色器传递到下一个着色器的正常方法是渲染到纹理(通过将该纹理附加到帧缓冲区)。 然后将该纹理传递给第二个着色器。 function main() { const gl = document.querySelector('canvas').getContext('webgl2

2021-10-27 00:18:43    分类:技术分享    webgl2   glreadpixels   glteximage2d

使用 android NDK 可能实现最快的 2D 帧速率,我的尝试包括在内,有更好的选择吗?(Fastest 2D frame rate possible with android NDK, my try included, better options available?)

问题 使用 android NDK 实现最快的 2D 帧速率,我的尝试包括在内,有更好的选择吗? 我使用 NDK 和 OpenGL ES 2.0 将帧显示为 GL_TRIANGLE_STRIP 上的纹理。 这是在 HTC Desire 上完成的,硬件与 Nexus One 相同。 我尝试加载多个 GL_RGBA 纹理并在纹理之间切换,因为单个纹理的正常填充率低得令人失望: 1 个纹理:4.78 fps 2 个纹理:19.68 fps 3 种纹理:20.18 fps 4 种纹理:28.52 fps 5 种纹理:29.01 fps 6 个纹理:30.32 fps 我认为即使是 30.32 fps RGBA 仍然太慢。 那么这是实现最快 2D 帧速率(具有相同质量)的方法吗? 有什么建议可以加快速度吗? 这是相关代码,它基于 hello-gl2 NDK 示例: === GL2JNIView.java : init(false, 0, 0); ConfigChooser(5, 6, 5, 0, depth, stencil); === gl_code.cpp : #include <GLES2/gl2.h> #include <GLES2/gl2ext.h> #include <android/log.h> #include <stdlib.h> #include <time.h>

2021-09-18 19:36:00    分类:技术分享    android   video   opengl-es   frame-rate   glteximage2d

pass data between shader programs

Ok I'm going to keep this as simple as possible. I want to pass data between shader programs. I'm using readPixels currently to do that but I feel it may be slowing operations down and I'm exploring faster options. what my program does: program1 does my rendering to the canvas. program2 does some wonderful operations in it's shaders that I want to pass to program1. MY QUESTIONS: is it possible to use the vbo from program2 and pass that to program1 for rendering? From what it sounds like in the link I give below, you can't share data across contexts, meaning the data from one buffer can't be

2021-09-09 04:28:57    分类:问答    webgl2   glreadpixels   glteximage2d

glTexImage2D 与 gluBuild2DMipmaps(glTexImage2D vs. gluBuild2DMipmaps)

问题 非常基本的 OpenGL 纹理创建代码: int width, height; BYTE * data; FILE * file; // open texture data file = fopen( filename, "rb" ); if ( file == NULL ) return 0; // allocate buffer width = 256; height = 256; data =(BYTE*) malloc( width * height * 3 ); // read texture data fread( data, width * height * 3, 1, file ); fclose( file ); glGenTextures( 1, &texture ); glBindTexture( GL_TEXTURE_2D, texture ); //gluBuild2DMipmaps( GL_TEXTURE_2D, 3, width, height, GL_RGB, GL_UNSIGNED_BYTE, data ); glTexImage2D( GL_TEXTURE_2D,0, GL_RGB, width, height,0, GL_RGB, GL_UNSIGNED_BYTE, data ); free( data ); return texture

2021-08-14 06:09:57    分类:技术分享    opengl   glu   mipmaps   texturing   glteximage2d

glTexImage2D 在使用 OpenGL 3 及更高版本的 GLUT/FreeType 示例中失败(glTexImage2D failing in GLUT/FreeType example with OpenGL 3 and above)

问题 我正在使用此处找到的示例:http://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Tutorial_Text_Rendering_01 问题是,当我指定版本高于 3 的 OpenGL 上下文时,即: glutInitContextVersion (3, 2); 调用 glTexImage2D 会导致 GL_INVALID_ENUM(由 GLIntercept 报告)错误,并且示例的输出为空白。 据我从 OpenGL 3.3 参考中得知,只有当类型不是有效的类型常量或目标是无效的目标时,才会发生这种情况。 这是违规行: glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, g->bitmap.width, g->bitmap.rows, 0, GL_ALPHA, GL_UNSIGNED_BYTE, g->bitmap.buffer); 此外,我尝试修改示例以调整位图的大小,因此它的尺寸是最接近的 2 次幂,如 NeHe 教程(http://nehe.gamedev.net/tutorial/freetype_fonts_in_opengl/24001/),但是我仍然得到同样的错误。 我也尝试过使用 GLFW 来实现这个例子并且遇到了同样的问题。 我在示例中使用了不同的着色器加载代码

2021-07-09 23:30:55    分类:技术分享    c++   opengl   freetype   glteximage2d

glTexImage2D failing in GLUT/FreeType example with OpenGL 3 and above

I'm using the example found here: http://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Tutorial_Text_Rendering_01 The issue is that when I specify an OpenGL context with a version above 3, ie: glutInitContextVersion (3, 2); Calling glTexImage2D results in a GL_INVALID_ENUM (as reported by GLIntercept) error and the output of the example is blank. As far as I can tell from the OpenGL 3.3 reference, this should only be happening if type is not a valid type constant or target is an invalid target. Here is the offending line: glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, g->bitmap.width, g-

2021-06-27 08:55:17    分类:问答    c++   opengl   freetype   glteximage2d