具有OpenGL纹理偏移的Awesomium

时间:2013-12-29 09:44:54

标签: c++ opengl textures glut awesomium

我正在尝试使用awesomium和opengl(过剩和cpp),但我无法将网页渲染为纹理。纹理在x和y轴上随机移动(每次运行程序时都不同)。图片:Shifted Texture

我认为GL_CLAMP_TO_EDGE会解决这个问题,但事实并非如此。我做错了什么?

The Awesomiumpart:

    web_core = WebCore::Initialize(WebConfig());
    view  = web_core->CreateWebView(WIDTH, HEIGHT);
    WebURL url(WSLit(URL));
    view->LoadURL(url);
    BindMethods(view);
    while (view->IsLoading())
        web_core->Update();
    Sleep(300);
    web_core->Update();
    surface = (BitmapSurface*)view->surface();  

加载纹理的部分:

    glBindTexture(GL_TEXTURE_2D, 13);   
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, WIDTH, HEIGHT, 0,
        GL_BGRA_EXT, GL_UNSIGNED_BYTE, surface);

1 个答案:

答案 0 :(得分:1)

这就是我所做的。我知道你解决了这个问题,但未来可能对某人有所帮助。

int w = surface->width();
int h = surface->height();

unsigned char *buffer = new unsigned char[w * h * 4];
surface->CopyTo(buffer, w * 4, 4, false, false);

glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, buffer);

delete[] buffer;