小编Fra*_*sco的帖子

C++ CRTP虚函数实例化点

我试图了解标准的简单CRTP模式是否有效.

下面的代码编译并按预期工作(在clang上).

但是我对相关标准章节/段落的理解是,虚函数CRTP <Derived,Base> :: DoSomething()的实例化应该在代码的点(B)处,其中Derived的完整声明不是可用.因此内部typedef类型也不应该可用.

任何人都可以指出验证此代码的相关标准章节吗?

换句话说,在这种情况下,虚拟函数被实例化ATFER点C?非常感谢您的任何见解.

弗朗切斯科

//-------------------------
// START CODE

#include <iostream>

struct Type1 {};
struct Type2 {};

struct Base
{
  virtual ~Base() {}
  virtual void DoSomething() = 0;
};

template< typename T, typename U >
struct CRTP : U
{
  virtual void DoSomething() { DoSomething( typename T::Type() ); }

 void DoSomething( Type1 ) { std::cout << "1\n"; }
 void DoSomething( Type2 ) { std::cout << "2\n"; }
};

// (A) point of inst. of CRTP< Derived, …
Run Code Online (Sandbox Code Playgroud)

c++ templates crtp

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

GL_LINES的glDrawElements强制gleRunVertexSubmitARM?(或者:为什么在iOS上绘制线框很慢?)

在为我正在研究的iPhone/iPad小项目做一些测试时,我观察到使用gl_LrawElements和GL_LINES绘制线框时会有很大的CPU性能损失.

这是场景:

  • 具有640个顶点的模型(4个浮点数用于位置,3个浮点数用于法线,没有对齐问题...全部在4个字节边界上)
  • 3840指数(无符号空头)
  • 顶点和索引都使用VBO(无VAO)
  • 使用带GL_TRIANGLES的glDrawElements绘制的上述模型工作正常

然后:

  • 具有640个顶点的相同模型
  • 2560指数
  • 维也纳国际组织,没有VAO
  • 使用gl_LrawElements绘制GL_LINES触发连续调用gleRunVertexSubmitARM,CPU使用天空火箭......

在这两种情况下,模型看起来都像预期的那样,周围没有任何错误......

似乎问题是设备依赖的.我在iPhone 3GS和iPhone 4上体验它,而不是iPad 2和模拟器.在iPad 2帧时间CPU = 1ms并且没有调用gleRunVertexSubmitARM,在iPhone 4帧时间CPU = 12ms并且连续调用gleRunVertexSubmitARM.

任何人都可以解释这种行为或指出我可能犯的错误吗?

任何见解都受到高度赞赏.提前致谢,

弗朗切斯科

performance wireframe ios opengl-es-2.0

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

标签 统计

c++ ×1

crtp ×1

ios ×1

opengl-es-2.0 ×1

performance ×1

templates ×1

wireframe ×1