Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android opengl GLUtil.texImage2d_Android_Opengl Es - Fatal编程技术网

android opengl GLUtil.texImage2d

android opengl GLUtil.texImage2d,android,opengl-es,Android,Opengl Es,我有一个bmp大小=512*512,现在我想用它来渲染曲面 由于曲面不是平面,我将曲面切割成一小块矩形(num=rowMax*colMax),代码如下: draw(GL10 gl) { int[] textures = new int[]; gl.glBindTexture(...); gl.glTxtParameterf(...); for(int row =0; row< maxRow; row++) { for(int col=0; col<maxC

我有一个bmp大小=512*512,现在我想用它来渲染曲面 由于曲面不是平面,我将曲面切割成一小块矩形(num=rowMax*colMax),代码如下:

draw(GL10 gl)
{  
  int[] textures = new int[];
  gl.glBindTexture(...);
  gl.glTxtParameterf(...);

 for(int row =0; row< maxRow; row++)
 {
   for(int col=0; col<maxCol; col++
  { 
     GLUtil.texImage2D(GL10.GL_TEXTURE_2D , bitmap,0 );// bitmap is the 512*512 bmp
    //generate 4 point coordinate
    ...

    //generate texture uv coordinate 
    ...
    //draw it
   gl.glDrawArray(...);    
    }  
  }
绘图(GL10 gl)
{  
int[]纹理=新的int[];
gl.glBindTexture(…);
gl.glTxtParameterf(…);
对于(int row=0;row对于(int col=0;col可能我不了解您的程序的工作方式,但据我所知,您需要绘制的纹理有很多种

如果要将texImage2D从循环中取出,则只加载一个纹理,而不是num纹理,因此显然这不起作用

关于OpenGL,需要了解的另一件事是,您不需要在每次绘制时调用GLUtil.texImage2D,而只需要在每次纹理更改时调用

调用texImage2D后,位图的当前状态将保存到GL上下文的纹理内存中,保存在之前调用的
glBindTexture(GL10.GL\u texture\u 2D,/*此处的纹理名称*/)下的纹理名称下
with,因此下次需要绘制纹理时,只需使用纹理的名称调用glBindTexture即可,无需进行昂贵的操作

您应该做的是使每个纹理的名称(表示纹理的唯一整数)是它的位置(=(row*maxCol)+col)+1(这样您就不会有名为0的纹理(保留纹理名称)

此外,还应该创建一个称为mDirty的大小为num的布尔数组,以便在与单元位置对应的纹理发生更改并需要重新加载时,每个单元都是真的


这样,您就可以在循环中只检查
mdrty[(row*maxCol)+col]==true
,如果为true,则调用texImage2D,并设置mdrty[(row*maxCol)+col]为false表示纹理已在gl内存中更新。

中没有
texImage2D'3
。实际上,每次我使用其中的一部分时,只有一个纹理,例如使用左上部分64*64像素。每次GLUtils.glTexImage2D将相同的位图加载到纹理时,这“代价高昂”。是否有办法仅加载一个y一次?哦,在这种情况下,将glTex移出循环,并在其前面放置一个glBindTexture(GL10.GL_TEXTURE_2D,/*此处纹理名称*/)命令。