我有一个多线程应用程序,我正在尝试使用不同的线程进行渲染.首先,我尝试在所有线程之间使用相同的渲染上下文,但我得到了其他线程的NULL当前上下文.我在互联网上看到,一个上下文一次只能在一个线程上.
所以我决定做一些与众不同的事情.我创建了一个窗口,我从中获取了HDC并创建了第一个RC.在那之后,我在线程之间共享这个HDC,并且在我创建的每个新线程中,我从同一个HDC获得一个新的RC,并使其成为该线程的最新版本.每次我这样做,返回的RC总是不同的(通常是前一个值+ 1).我做了一个断言来检查是否wglGetCurrentContext()返回一个RC,它看起来像是返回刚刚创建的那个.但是在进行渲染之后,我得不到渲染,如果我调用GetLastError()我得到错误6(无效句柄??)
那么,这是否意味着,尽管每次新调用wglCreateContext()都会给我一个新值,但这意味着所有这些不同的值都与OpenGL调用的"连接通道"相同?
这是否意味着我将永远不得不在线程上使先前的渲染上下文无效,并在新线程上激活它?我真的必须一直进行同步,还是有其他方法来解决这个问题?
对于Android,我正在使用Google地图制作应用程序.我的屏幕上有很多标记,当我们点击它时,我正在为每个标记准备可定制的气球.这意味着,根据点击的标记,我有不同的信息.
我用setInfoWindowAdapter设置了标记视图的内容,然后重写方法getInfoContents.
问题是:此方法是信息窗口内容的一般实现,但每个标记应显示自己的信息.所以,据我所知,我必须以某种方式检测getInfoContents(标记标记)已经点击了哪些标记,以便从我的数据结构加载必要的信息以呈现在信息窗口上.问题是:如何识别点击的标记'标记'代表什么实体?我的意思是,只有getInfoContents上的对象标记被触发以显示信息窗口,我如何检测哪个是要显示的正确信息?我虽然通过使用marker.getTitle()来比较字符串Title,但这迫使我在信息窗口上显示一个我不想要的标题.还有一个marker.getId(),但这样的ID是由API生成的,我无法控制它
有任何想法吗?
我希望能够在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) 我知道这个问题已经有一些答案,但我似乎无法理解为什么我一直收到这个错误.
所以这里是解释:我有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上?