小编sgt*_*ale的帖子

吸气剂和二传手.有性能开销吗?

我的C++项目中有一个粒子系统引擎,粒子本身只是没有函数的变量的结构.目前,通过直接访问其变量,从其父类(ParticleSystem)更新每个粒子(粒子).例如

particle.x += particle.vx;
Run Code Online (Sandbox Code Playgroud)

然而,我正在讨论使用这样的getter和setter:

particle.setX( particle.getX()+particle.getVX() );

我的问题是:调用getter和setter是否有任何性能开销而不是直接数据访问?

毕竟,我确实有许多粒子需要更新......

c++ performance getter-setter

35
推荐指数
2
解决办法
8678
查看次数

OpenGL ES2 Alpha测试问题

我在3D中渲染具有alpha纹理的多个对象.所有纹理加载都很好但是当我尝试将它们呈现在彼此前面时,我得到以下结果:

左边是我的. 对,就是我想要的

左边是我的.它应该是正确的.网格只是为了帮助可视化透视.

红色圆圈纹理前面的纹理被剪裁.我四处寻找答案,它告诉我使用:

GLES20.glEnable( GLES20.GL_BLEND );
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA );
Run Code Online (Sandbox Code Playgroud)

但我使用它仍然无法正常工作.我在onSurfaceCreated()函数中正确放置的设置是:

GLES20.glClearColor( 0.75f, 0.85f, 1f, 1.0f );
GLES20.glEnable( GLES20.GL_BLEND );
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA );
GLES20.glEnable( GLES20.GL_DEPTH_TEST );
GLES20.glDepthFunc( GLES20.GL_LEQUAL );
GLES20.glDepthMask( true );
GLES20.glClearDepthf( 1f );
Run Code Online (Sandbox Code Playgroud)

我的片段着色器是:

uniform sampler2D texture;
varying vec2 texCoord;  
void main(){ 
   gl_FragColor = texture2D( texture, texCoord );
} 
Run Code Online (Sandbox Code Playgroud)

我是否必须在Android清单中包含任何内容才能启用Alpha测试?我不想最终必须手动组织我的多边形或使用alpha discard(),因为我需要并希望一些像素是半透明的.

如何让3D alpha测试深度缓冲区工作?

java 3d android depth-buffer opengl-es-2.0

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

Java独立变量vs数组性能

我正在玩Java,并想知道以下在性能方面有多么不同.我知道过早的优化是编程的困境,但我的好奇心仅供将来参考.

public class Type1{
     int[] data = new data[4];
     public int getData( int index ){
          return data[index];
     }
}

public class Type2{
     int data1;
     int data2;
     int data3;
     int data4;
     public int getData1(){
          return data1;
    }
    public int getData2(){
          return data2;
    }
    public int getData3(){
          return data3;
    }
    public int getData4(){
          return data4;
    }
}
Run Code Online (Sandbox Code Playgroud)

可以理解的是,有许多因素可能会有所不同,但必须以某种方式表现出一些明显的表现.显然类Type1在设计方面是一个更有吸引力的解决方案,但它似乎在检索数据时有一个额外的步骤,即进入一个数组以获得一个与Type2相反的int,它直接用于数据.如果它们持有Class对象数组,则差异可能更明显,因为它可能会保证Java使用数组成员的引用.我完全没球了吗?

java arrays optimization

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

C ++擦除向量末尾的一部分而无需重新分配

查看 C++ 向量文档,pop_back() 是一个不会导致向量数据重新分配的函数。但是,这只适用于删除向量的一个成员。我试图找到一种方法来从向量的末尾擦除多个成员。最初我以为我会在一个小的 for 循环中调用 pop_back() 但是我在徘徊是否有更方便的函数可以为我做这件事?

编辑:Cplusplus 向量擦除()参考并不像 juanchopanza 所指出的那样清晰。这就是为什么我最初放弃使用擦除()。毕竟擦除,效果很好。

c++ memory-management vector

6
推荐指数
2
解决办法
1203
查看次数

某些GL函数的好奇"void*"参数

对于OpenGL中的某些函数,必须glVertexAttribPointer()为stride 指定字节偏移量,例如in .起初我会猜到它将是一个像整数一样的正常数值.但经过检查,我意识到它需要被投入void*(更具体地说GLvoid*).我的问题是:它的意图是什么void*?为什么必须将它用于字节偏移?

c++ opengl pointers casting

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

如何释放glBufferData内存

我创建了一个顶点缓冲对象类来管理我的应用程序中的许多顶点.用户调用构造函数来创建glBuffer并调用glBufferData来分配指定的空间量.

有一个名为resize的类函数,允许用户通过再次调用glBufferData来改变VBO的容量.我的问题是,我如何解除分配先前的分配?还是自动完成?

根据opengl文档,glDeleteBuffer只删除缓冲区本身而不提及glBufferData分配的实际内存. 我可以继续在同一个绑定缓冲区上调用glBufferData而没有内存泄漏吗?

c++ opengl ios

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

多重继承,虚函数和C++中的虚拟表

我知道vtable查找虚函数要比直接函数调用慢很多,因为基类必须搜索vtable来获取派生函数.如果有更多的派生层,如果它会更慢,我就会徘徊.基本上,我的问题如下:

基础 - > 衍生的(1层继承)虚拟函数调用的速度比 - > Derived1 - > Derived2的 - > Derived3 - > DerivedEtc(多层)虚拟函数调用?

c++ inheritance vtable

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

Java内存泄漏了类

我想知道下面这段代码是否是内存泄漏,因为谷歌只是出现了奇怪的例子.基本上,如果我有一个班级Tree:

public class Tree{

     private Bird[] birds;

     public Tree(){
          birds = new Bird[100];
     }

}
Run Code Online (Sandbox Code Playgroud)

我持有Tree类似这样的类引用:

Tree myTree = new Tree();
Run Code Online (Sandbox Code Playgroud)

然后不久我将该引用设置为null:

myTree = null;
Run Code Online (Sandbox Code Playgroud)

垃圾收集器是否会将所有100个已分配的鸟类与树类一起处理?或者我需要一个delete()方法?我知道Java没有析构函数,但这个多层类示例仍然让我困惑:

里面Tree.java:

public void deleteBirds{
     birds = null;
}
Run Code Online (Sandbox Code Playgroud)

java memory-leaks multi-layer

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