小编Meg*_*300的帖子

我正在尝试使用 glTexSubImage2D 更新纹理

我最近开始学习 OpenGL,我一直在处理纹理。我使用更新了我的纹理,glTexImage2D但我了解到使用它更好glTexSubImage2D,所以我尝试更改我的代码但我不起作用。

工作代码

void GLWidget::updateTextures(){

    QImage t = img.mirrored();

    glBindTexture(GL_TEXTURE_2D, tex);

        glTexImage2D(GL_TEXTURE_2D, 0, 3, t.width(), t.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, t.bits());

    glBindTexture( GL_TEXTURE_2D, 0);
}
Run Code Online (Sandbox Code Playgroud)

不工作的代码

void GLWidget::updateTextures(){

    QImage t = img.mirrored();

    glBindTexture(GL_TEXTURE_2D, tex);

        glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, t.width(), t.height(), GL_RGBA, GL_UNSIGNED_BYTE, t.bits());

    glBindTexture( GL_TEXTURE_2D, 0);
}
Run Code Online (Sandbox Code Playgroud)

我只有黑屏。

谢谢。

编辑 :

这是我的纹理的初始化:

void GLWidget::initializeGL(){

...

    LoadGLTextures();

...

}

void GLWidget::LoadGLTextures(){


    QImage t = img.mirrored();

    glGenTextures(1, &tex);

    glBindTexture(GL_TEXTURE_2D, tex);

        glTexImage2D(GL_TEXTURE_2D, 0, 3, t.width(), t.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, t.bits()); …
Run Code Online (Sandbox Code Playgroud)

c++ opengl

4
推荐指数
1
解决办法
6293
查看次数

Qt发射需要30ms,这可能吗?

我正在努力提高项目的性能,所以我想弄清楚哪个操作需要时间.

我注意到我的emit功能需要30ms,是否可以发送数据?

这是代码:

void MainWindow::play(){

unsigned char* img;     //Size is 1280*720*2

img = camera1->captureLastFrame();

timer.start(); 

emit video(img); 

qDebug()<<QString::number(timer.nsecsElapsed()/1000000) + " ms";

}
Run Code Online (Sandbox Code Playgroud)

qDebug显示器30毫秒.我做错了什么,或者这个操作真的需要时间吗?

编辑:

信号和插槽声明/连接.

signals: 

     void video(unsigned char* copy);

private slots: 

     void play();

connect(this, SIGNAL(video(unsigned char*)), ui->widget, SLOT(videodisplay(unsigned char*)));
Run Code Online (Sandbox Code Playgroud)

c++ performance qt

3
推荐指数
1
解决办法
239
查看次数

当我的阵列达到一定大小时,Qt无法工作

出于测试目的,我在Qt中尝试不同大小的数组.

这是代码:

#include <QCoreApplication>
#include <iostream>    
using namespace std;

int const sizeArray = 519199;

int main()
{    
    string arr[sizeArray];

    for(int i = 0; i < sizeArray; i++)
    {    
        arr[i] = i;
    }

    arr[499999] = "Test";
    cout << arr[499999] << endl;
}
Run Code Online (Sandbox Code Playgroud)

sizeArray为519999时,程序快速运行并显示"Test".但是当sizeArray519200或更多时,程序运行时间较长(约5秒),然后完成而不显示"测试".

这是OS或Qt的内存限制吗?

c++ arrays qt

0
推荐指数
1
解决办法
118
查看次数

标签 统计

c++ ×3

qt ×2

arrays ×1

opengl ×1

performance ×1