首先,我使用LWJGL 3和OpenGL 3.2
我试图将“索引”与函数GL11一起使用。元素,但窗口中没有渲染任何内容。
缓冲区生成代码(不真正使用索引,但我认为它仍然可以工作):
public void updateBuffers(Game game, int positionsAttrib, int texCoordsAttrib) { // positionsAttrib and texCoordsAttrib are pointer to shader program attribs
FloatBuffer positionsBuffer = null;
FloatBuffer texCoordsBuffer = null;
IntBuffer indicesBuffer = null;
try {
this.vertexCount = this.tiles.size() * 4;
positionsBuffer = MemoryUtil.memAllocFloat( this.tiles.size() * 3 * 4 );
texCoordsBuffer = MemoryUtil.memAllocFloat( this.tiles.size() * 2 * 4 );
indicesBuffer = MemoryUtil.memAllocInt( this.vertexCount );
int i = 0;
for ( Entry<TilePosition, Tile> tilesEntry : this.tiles.entrySet() ) {
TilePosition tilePosition = tilesEntry.getKey();
Tile tile = tilesEntry.getValue();
String tileTextureIdentifier = tile.getTextureIdentifier();
TextureDefinition tileTextureDefinition = game.getTexturesManager().getTextureDefinition("tiles");
Rectangle tileTextureRectangle = tileTextureDefinition.getTilePosition( tileTextureIdentifier );
if ( tileTextureRectangle == null ) continue;
positionsBuffer.put( tilePosition.getX() ).put( tilePosition.getY() + 1 ).put( 0 );
positionsBuffer.put( tilePosition.getX() + 1 ).put( tilePosition.getY() + 1 ).put( 0 );
positionsBuffer.put( tilePosition.getX() + 1 ).put( tilePosition.getY() ).put( 0 );
positionsBuffer.put( tilePosition.getX() ).put( tilePosition.getY() ).put( 0 );
texCoordsBuffer.put( tileTextureRectangle.x ).put( tileTextureRectangle.y );
texCoordsBuffer.put( tileTextureRectangle.x + tileTextureRectangle.width ).put( tileTextureRectangle.y );
texCoordsBuffer.put( tileTextureRectangle.x + tileTextureRectangle.width ).put( tileTextureRectangle.y + tileTextureRectangle.height );
texCoordsBuffer.put( tileTextureRectangle.x ).put( tileTextureRectangle.y + tileTextureRectangle.height );
indicesBuffer.put( i ).put( i + 1 ).put( i + 2 ).put( i + 3 );
i += 4;
}
positionsBuffer.flip();
texCoordsBuffer.flip();
indicesBuffer.flip();
this.vao.bind(); // vbo and vao are class VertexBufferObject and VertexArrayObject which save internal id of buffers and most usefull functions
this.positionsVbo.bind( GL15.GL_ARRAY_BUFFER );
VertexBufferObject.uploadData( GL15.GL_ARRAY_BUFFER, positionsBuffer, GL15.GL_STATIC_DRAW );
ShaderProgram.pointVertexAttribute( positionsAttrib, 3, 0, 0 );
this.texCoordsVbo.bind( GL15.GL_ARRAY_BUFFER );
VertexBufferObject.uploadData( GL15.GL_ARRAY_BUFFER, texCoordsBuffer, GL15.GL_STATIC_DRAW );
ShaderProgram.pointVertexAttribute( texCoordsAttrib, 2, 0, 0 );
this.indicesVbo.bind( GL15.GL_ELEMENT_ARRAY_BUFFER );
VertexBufferObject.uploadData( GL15.GL_ELEMENT_ARRAY_BUFFER, indicesBuffer, GL15.GL_STATIC_DRAW );
VertexArrayObject.unbind();
} finally {
if ( positionsBuffer != null ) MemoryUtil.memFree( positionsBuffer );
if ( texCoordsBuffer != null ) MemoryUtil.memFree( texCoordsBuffer );
if ( indicesBuffer != null ) MemoryUtil.memFree( indicesBuffer );
}
}
使用的着色器程序:
// scene.vs :
#version 330 // edit : I have to change this line because of OpenGL used version
layout (location=0) in vec3 position;
layout (location=1) in vec2 texCoord;
out vec2 outTexCoord;
uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;
void main() {
mat4 mvp = projection * view * model;
gl_Position = mvp * vec4( position, 1.0 );
outTexCoord = texCoord;
}
// scene.fs :
#version 330
in vec2 outTexCoord;
out vec4 fragColor;
uniform sampler2D textureSampler;
void main() {
vec3 vertexColor = vec3( 1.0, 1.0, 1.0 );
vec4 textureColor = texture( textureSampler, outTexCoord );
fragColor = vec4( vertexColor, 1.0 ) * textureColor;
}
以及渲染功能:
private void beginRender(Game game, int positionsAttrib, int texCoordsAttrib) {
Texture texture = game.getTexturesManager().getTextureDefinition("tiles").getTexture();
GL13.glActiveTexture( GL13.GL_TEXTURE0 );
texture.bind();
this.vao.bind();
ShaderProgram.enableVertexAttribute( positionsAttrib );
ShaderProgram.enableVertexAttribute( texCoordsAttrib );
}
private void endRender(Game game, int positionsAttrib, int texCoordsAttrib) {
ShaderProgram.disableVertexAttribute( positionsAttrib );
ShaderProgram.disableVertexAttribute( texCoordsAttrib );
VertexArrayObject.unbind();
Texture.unbind();
}
// render is called by render loop between clear and swapbuffer GL functions
public void render(Game game, int positionsAttrib, int texCoordsAttrib) {
this.beginRender( game, positionsAttrib, texCoordsAttrib );
GL11.glDrawElements( GL11.GL_QUADS, this.vertexCount, GL11.GL_UNSIGNED_INT, 0 );
this.endRender( game, positionsAttrib, texCoordsAttrib );
}
我不确定它是否很清楚,尤其是我的近似英语...
您没有详细说明它,但看起来您正在使用核心配置文件(正如您应该的那样)。但是,如果是这样,GL_QUADS
将不可用,并且您的绘制调用将导致GL_INVALID_ENUM
错误。
顺便说一句:既然你说你使用OpenGL 4.5,我强烈建议你在开发过程中使用OpenGL的调试输出功能,这将使发现和解释任何GL错误更加容易,而且可能还会提供有用的性能提示。
我试图用类型输入将proptype转换为一个特定的组件类,但这给了我一个警告。 警告:失败的道具类型:提供给MyComponent的道具无效。 MyComponent.js 我的输入组件被剥离了。 子系统上的控制台日志为:
所以我想使用Flux来运行每个Mono任务,并等待每个任务2秒钟。这是我试过的 结果如下 正如您在时间戳delayElement上看到的,即使它在同一个线程上运行(测试工作人员),它似乎也不起作用。我在这里做错了什么? 编辑:我真的不明白它是如何工作的,但是我没有在平面图中添加delayElement,而是在它上面添加delayElements,它工作正常。 结果
当我试图将LWJGL程序的矩阵模式设置为GL_投影时,我遇到了一个错误。 错误是: 异常线程"main"java.lang.IllegalStateException:函数不支持org.lwjgl.BufferChecks.checkFunctionAddress(BufferChecks.java:58)在org.lwjgl.opengl.GL11.glMatrixMode(GL11.java:
我试图列出ftp服务器中特定目录下的所有文件。 虽然目录是一个有效的,但代码卡住,而调用listFiles,可能是什么原因。?进一步我想提到的是,一个单独的netbean项目访问相同的FTP服务器工作正常与相同的代码,但maven项目有问题。请帮助。
我正在尝试设置一个联系人表单,但我正在努力使它与配置项中的SMTP配置一起工作。不过,我已经成功地尝试了基本的'mail'配置。 简而言之,我用以下简单的代码进行测试: 我刚刚询问了我的主机提供商,所有的SMTP配置都是正确的。他们还检查了我的电子邮件帐户是否正常。 事实上,如果我选择: 协议=>“邮件” 消息顺利传递。php mail()函数也使用托管提供程序SMTP,但它只是将它交给服务器,并
我正在尝试让Gradle Artifactory插件来解析工件。 我的build.gradle文件在下面,被替换为正确的主机名 然而,当运行此命令时,它无法解析工件。依赖行是从artiFactory生成的。 我打算使用“旧”发布机制。我的Gradle版本是2.0。 我尝试了一个带有maven2默认值和gradle布局的artifactory存储库。 堆栈跟踪可在以下位置找到:http://text