小编Paw*_*ski的帖子

libGDX中的慢模型批处理渲染

我有一个问题是在libGDX中是否有一种特殊模式用于分组模型.我创建了一个实现的简单类来ApplicationListener显示我的问题.我正在使用每晚构建的libGDX.

我读了两个使用相同纹理的不同模型.该应用程序分别呈现每种类型的250个模型.这就是呈现代码的部分:

  mModelBatch.begin(camera);
  for(int y=0; y<50; y++)
  {
     for(int x=-5; x<5; x++)
     {
        ModelInstance instance;
        if(x%2 == 0) instance = modelInstance1;
        else instance = modelInstance2;

        instance.transform.setToTranslation(x, 0, -y);
        mModelBatch.render(instance);
     }

  }

  mModelBatch.end(); 
Run Code Online (Sandbox Code Playgroud)

我的手机上有大约12 FPS(Sony Xperia mini pro).

我试图找到一个好的解决方案,所以我写了另一个测试代码:

public void getRenderables(Array<Renderable> renderables, Pool<Renderable> pool)
{
  for(int y=0; y<50; y++)
  {
     for(int x=-5; x<5; x++)
     {
        ModelInstance instance;
        if(x%2 == 0) instance = modelInstance1;
        else instance = modelInstance2;

        instance.transform.setToTranslation(x, y%3, -y);

        Renderable renderable = pool.obtain();
        renderable = instance.getRenderable(renderable);
        renderables.add(renderable);
     }
  }
Run Code Online (Sandbox Code Playgroud)

}

我使用它,如下所示:

mModelBatch.begin(camera); …
Run Code Online (Sandbox Code Playgroud)

performance android rendering opengl-es libgdx

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

如何在 OpenGL 中以正确的方式进行实例化。

我正在尝试以最有效的方式使用 VBO 和实例化机制。我有一个基于体素的世界,我想使用尽可能少的绘制调用来绘制它们。下面的代码用四元组准备 VBO:

void VoxelView::initVBOs() {
/*--------------------- Main OpenGL Program ---------------------*/
/* Vertices of a triangle (counter-clockwise winding) */
float data[6][3] = {
                                            // Left bottom triangle
                                            { -0.5f, 0.5f, 0.0f  },
                                            { -0.5f, -0.5f, 0.0f },
                                            { 0.5f, -0.5f, 0.0f  },
                                            // Right top triangle
                                            { 0.5f, -0.5f, 0.0f  },
                                            { 0.5f, 0.5f, 0.0f   },
                                            { -0.5f, 0.5f, 0.0f  }

                                       };

/*---------------------- Initialise VBO - (Note: do only once, at start of program) ---------------------*/
/* Create a new …
Run Code Online (Sandbox Code Playgroud)

c++ opengl gpu vbo

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

实现编译时机制检查字符串的唯一性

定义我的问题的最简单方法是我试图实现一种机制来检查是否已经使用了相同的字符串(或一对(数字,字符串))。我希望使用 C 预处理器以智能方式实现这种机制。我还希望这种机制在调试模式下(通过检查断言)出现冲突或运行时错误时给我编译错误。我们不希望开发人员在添加消息时出错,因为每条消息都应该是唯一的。我知道它可以通过计算散列或例如crc / md5来完成,但这种机制容易发生冲突,我需要避免。至关重要的是,每条消息只能使用一次。

此机制的示例行为:

addMessage(1, "Message1") //OK 
addMessage(2, "Message2") //OK 
. 
. 
. 
addMessage(N, "MessageN") //OK 
addMessage(2, "Message2") //Compile error, Message2 has already been used 
Run Code Online (Sandbox Code Playgroud)

替代行为(调试代码时):

addMessage(1, "Message1") //OK 
addMessage(2, "Message2") //OK 
. 
. 
. 
addMessage(N, "MessageN") //OK 
addMessage(2, "Message2") //Assertion failed, because Message2 has already been used 
Run Code Online (Sandbox Code Playgroud)

最好的做法是巧妙地使用#define#undef指令。一般来说,预处理器应该以一种聪明的方式使用(我不确定这是否可能)也许可以通过适当的宏组合来实现?任何可以帮助我解决这个问题的 C 预处理器黑客?

//编辑:我需要这些消息在全局范围内是唯一的,而不仅仅是在一个代码块内(如 if 语句的函数)。

//EDIT2:问题的最佳描述是我有 100 个不同的源文件,我想用预处理器检查(或者可能是其他机制,而不是在每次编译开始时用脚本解析源文件,如果一个字符串(或预处理器定义)被多次使用,这将非常耗时,并且会为足够复杂的项目添加另一个阶段)。我仍然不知道该怎么做(我知道这可能根本不可能,但我希望它确实如此)。

c c++ c-preprocessor

4
推荐指数
2
解决办法
907
查看次数

标签 统计

c++ ×2

android ×1

c ×1

c-preprocessor ×1

gpu ×1

libgdx ×1

opengl ×1

opengl-es ×1

performance ×1

rendering ×1

vbo ×1