小编fil*_*ehd的帖子

OpenGL上的多线程渲染

我有一个多线程应用程序,我正在尝试使用不同的线程进行渲染.首先,我尝试在所有线程之间使用相同的渲染上下文,但我得到了其他线程的NULL当前上下文.我在互联网上看到,一个上下文一次只能在一个线程上.

所以我决定做一些与众不同的事情.我创建了一个窗口,我从中获取了HDC并创建了第一个RC.在那之后,我在线程之间共享这个HDC,并且在我创建的每个新线程中,我从同一个HDC获得一个新的RC,并使其成为该线程的最新版本.每次我这样做,返回的RC总是不同的(通常是前一个值+ 1).我做了一个断言来检查是否wglGetCurrentContext()返回一个RC,它看起来像是返回刚刚创建的那个.但是在进行渲染之后,我得不到渲染,如果我调用GetLastError()我得到错误6(无效句柄??)

那么,这是否意味着,尽管每次新调用wglCreateContext()都会给我一个新值,但这意味着所有这些不同的值都与OpenGL调用的"连接通道"相同?

这是否意味着我将永远不得不在线程上使先前的渲染上下文无效,并在新线程上激活它?我真的必须一直进行同步,还是有其他方法来解决这个问题?

c++ opengl multithreading rendering

16
推荐指数
3
解决办法
4万
查看次数

如何知道Google Maps v2 for Android上点击了哪个Marker?

对于Android,我正在使用Google地图制作应用程序.我的屏幕上有很多标记,当我们点击它时,我正在为每个标记准备可定制的气球.这意味着,根据点击的标记,我有不同的信息.

我用setInfoWindowAdapter设置了标记视图的内容,然后重写方法getInfoContents.

问题是:此方法是信息窗口内容的一般实现,但每个标记应显示自己的信息.所以,据我所知,我必须以某种方式检测getInfoContents(标记标记)已经点击了哪些标记,以便从我的数据结构加载必要的信息以呈现在信息窗口上.问题是:如何识别点击的标记'标记'代表什么实体?我的意思是,只有getInfoContents上的对象标记被触发以显示信息窗口,我如何检测哪个是要显示的正确信息?我虽然通过使用marker.getTitle()来比较字符串Title,但这迫使我在信息窗口上显示一个我不想要的标题.还有一个marker.getId(),但这样的ID是由API生成的,我无法控制它

有任何想法吗?

java android google-maps google-maps-markers

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

OpenGL - 渲染成纹理

我希望能够在OpenGL上将某些内容渲染到纹理中,这样我就可以在需要时进一步使用它,而无需再渲染所有内容.这个网站在这里给我的指引去做,而不使用framebuffer.由于兼容性问题,我不想使用FrameBuffer对象,因为这台旧机器不支持它.我做了一些代码,它创建我的纹理,渲染我的场景,然后创建一个Quad来渲染纹理.唯一的问题是纹理被渲染成"Alpha Mask",这意味着它看起来只考虑了Alpha值,保持我的矩形总是使用相同的颜色,只是改变像素的透明度.这是我到目前为止所做的一些代码:

void CreateTexture ()
{
    xSize = 512;
    ySize = 512; //size of texture
//new array
    char* colorBits = new char[ xSize * ySize * 3 ];
//texture creation..
    glGenTextures(1,&texture);
    glBindTexture(GL_TEXTURE_2D,texture);
    glTexImage2D(GL_TEXTURE_2D,0 ,3 , xSize,
                 ySize, 0 , GL_RGB,
                 GL_UNSIGNED_BYTE, colorBits);
//you can set other texture parameters if you want
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR);
//clean up
    delete[] colorBits;
}
Run Code Online (Sandbox Code Playgroud)

然后:

int viewport[4];
    glGetIntegerv(GL_VIEWPORT,(int*)viewport);
    glViewport(0,0,xSize,ySize);


    DrawScene(hDC);

    //save data to texture using glCopyTexImage2D
    glBindTexture(GL_TEXTURE_2D,texture);

    glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
                     0,0, xSize, …
Run Code Online (Sandbox Code Playgroud)

c++ opengl buffer textures

5
推荐指数
1
解决办法
3841
查看次数

您选择的cpu不支持x86-64指令集

我知道这个问题已经有一些答案,但我似乎无法理解为什么我一直收到这个错误.

所以这里是解释:我有64位机器,我已经安装了Windows 7 x64.我正在Windows上的GCC(CodeBlocks)下编译我的代码而没有任何问题.然后我决定我的应用程序必须是可移植的,我决定在Linux下的GCC下编译它.在我的其他32位机器中,代码编译没有任何问题.但是,在我的64位机器上,我决定安装Ubuntu作为Wubi.当然我也安装了Wubi x64版本.

我在Wubi下成功安装了Ubuntu,我安装了所有必要的东西,但是当我尝试编译我的项目时,我在第一行输入错误'你选择的cpu不支持x86-64指令集'.好吧,这对我来说听起来完全没有意义,考虑到我已经在64位机器上安装了Windows 7 x64上的Wubi x64.那么为什么我得到一个错误,说我的CPU不支持x86-64指令集?

可能只是因为我已经安装了WUBI而不是以正常方式在root上安装Ubuntu吗?我真的无法得到这个东西.

非常感谢你

编辑:好的,在Codeblocks的某个地方,我找到了检查"Pentium M"架构的选项.我已经取消选中它,现在我得到了几个错误:

错误:从void*转换为int会失去精度.

出于这个原因,这应该只发生在Linux而不是Windows上?

c++ ubuntu 64-bit gcc wubi

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