- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
您好,我正在使用 VBO 加载图像纹理,然后用 C++ 绘制它。 VBO id 生成、绑定(bind)和绘制发生在这里
void ViewManager::render(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
if(decompressTileImage->tileTexure == 0)
{
loadTexture(decompressTileImage);
glGenBuffers(1,&decompressTileImage->VBOId);
glBindBuffer(GL_ARRAY_BUFFER,decompressTileImage->VBOId);
glBufferData(GL_ARRAY_BUFFER,sizeof(*(this->tileCoordList))+sizeof(*(this->tileTextureCoordList)),0,GL_STATIC_DRAW);
glBufferSubData(GL_ARRAY_BUFFER,0,sizeof(*(this->tileCoordList)),this->tileCoordList);
glBufferSubData(GL_ARRAY_BUFFER,sizeof(*(this->tileCoordList)),sizeof(*(this->tileTextureCoordList)),this->tileTextureCoordList);
}
else
{
glBindBuffer(GL_ARRAY_BUFFER,decompressTileImage->VBOId);
glBindTexture(GL_TEXTURE_2D, decompressTileImage->tileTexure);
}
glColor4f(1.0f, 1.0f, 1.0f, textureAlpha);
if(textureAlpha < 1.0)
{
textureAlpha = textureAlpha + .03;
this->tiledMapView->renderNow();
}
glTexCoordPointer(3, GL_FLOAT, 0, (void*)sizeof(*(this->tileCoordList)));
glVertexPointer(3, GL_FLOAT, 0, 0);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glBindBuffer(GL_ARRAY_BUFFER,0);
glDisable(GL_BLEND);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_TEXTURE_2D);
}
此函数位于名为 MapTile
的类中。 MapTile
为从 Internet 下载的 35 张图像创建了 35 次。然后一个线程为 35 个 MapTile
对象调用此方法 35 次并继续执行。这就是为什么我首先检查该方法是否第一次被调用,以便我可以为每个 MapTile
对象加载数据和生成 VBO id 一次。我用 if(decompressTileImage->tileTexure == 0)
这一行来检查这个。然后每次我只绑定(bind) vbo id 来绘制。无需再次加载数据。
这里的 decompressTileImage
是一个 TextureImageInfo
类。实现是
#include "TextureImageInfo.h"
TextureImageInfo::TextureImageInfo(unsigned char * image,GLuint format,int texWidth,int texHeight,int imageWidth,int imageHeight,float tex_x,float tex_y)
{
// TODO Auto-generated constructor stub
this->format = format;
this->image = image;
this->imageHeight = imageHeight;
this->imageWidth = imageWidth;
this->texHeight = texHeight;
this->texWidth = texWidth;
this->tileTexure = 0;
this->VBOId = 0;
this->time = 0;
}
TextureImageInfo::~TextureImageInfo()
{
if(VBOId!=0)
glDeleteBuffers(1,&VBOId);
}
它可以很好地绘制和执行所有操作,但是当我尝试清理此处给出的 TextureImageInfo
类的析构函数中的内存时崩溃。我不明白为什么。我检查了是否在析构函数中使用 if 条件生成并加载了 VBOId 到内存中。
最佳答案
如评论中所述,OpendGL ES 命令应从创建上下文的同一线程提交。
来自黑莓文档 Parallel processing with OpenGL ES :
It is important to note that each OpenGL ES rendering context targets a single thread of execution.
If you want to render multiple scenes, you can separate each scene into its own thread, making sure each thread has its own context
关于c++ - glDeleteBuffers 在析构函数调用期间崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15545528/
您好,我正在使用 VBO 加载图像纹理,然后用 C++ 绘制它。 VBO id 生成、绑定(bind)和绘制发生在这里 void ViewManager::render(){ glClear(GL_C
目前,我在 Java 端设置了一个在 onDestroy() 期间调用的 native 函数。我在我为其分配内存的任何 native 端指针上调用 free()。如果我还在这个函数中调用 glDele
正如 Qt 用户所知,使用任何 OpenGL 扩展都非常麻烦。我让它工作的方法是像这样扩展 QGLFunctions 类: class Object3D : protected QGLFunctio
基本上,在我的代码中,我挂接了 glDeleteTextures 和 glBufferData 函数。我存储了一个纹理列表和一个缓冲区列表。缓冲区列表包含校验和和指向缓冲区的指针。下面的代码在数据到达
我在我的 iOS/Android 游戏中遇到了一些性能问题,其中有几个 VBO 必须每隔一段时间更新一次。在对我的游戏进行分析后发现,每次 VBO 更新 glDeleteBuffers() 最多需要
我发现了一些我不理解的 del 行为,希望您能给我一些见解。我正在尝试使用 PyOpenGL 和 glfw 实现 OpenGL 的 hello_triangle。关闭 OpenGL 窗口后,我的程序应
是否需要在删除缓冲区对象之前取消绑定(bind)它?如果我在 VAO 中绑定(bind)它并删除它而不解除绑定(bind)(绑定(bind)到 0),会发生什么?引用还会存在吗? public voi
在 OpenGL ES 2 中使用 VBO 时,我遇到了 glDeleteBuffers , glDeleteShader , 和 glDeleteProgram .我在网上环顾四周,但找不到关于何时
我读到 VBO(顶点缓冲区对象)本质上保留一个引用计数,因此如果将 VBO 的名称指定给 glDeleteBuffers(),如果一个活的VAO(顶点数组对象)仍然引用它。这种行为类似于“智能指针”,
我是一名优秀的程序员,十分优秀!