无法在OpenGL中创建并将纹理应用于线
我的目标是使用着色器创建虚线。我已经定义了一维纹理,我认为应该应用它,但我所有的线条最终都是黑色的。我希望我错过了一些简单的东西 我的线顶点着色器:无法在OpenGL中创建并将纹理应用于线,opengl,jogl,Opengl,Jogl,我的目标是使用着色器创建虚线。我已经定义了一维纹理,我认为应该应用它,但我所有的线条最终都是黑色的。我希望我错过了一些简单的东西 我的线顶点着色器: #version 330 core layout (location = 0) in vec2 iPosition; uniform mat4 transform; void main() { gl_Position = transform * vec4(iPosition, 0.0, 1.0); } 我的几何体着色器: #vers
#version 330 core
layout (location = 0) in vec2 iPosition;
uniform mat4 transform;
void main() {
gl_Position = transform * vec4(iPosition, 0.0, 1.0);
}
我的几何体着色器:
#version 330 core
layout(lines) in;
layout(line_strip, max_vertices=2) out;
out float texCoord;
void main()
{
gl_Position = gl_in[0].gl_Position;
texCoord = 0.0f;
EmitVertex();
gl_Position = gl_in[1].gl_Position;
texCoord = 1.0f;
EmitVertex();
}
我的片段着色器:
#version 330 core
uniform sampler1D pattern;
layout (location = 0) out vec4 fragColor;
in float texCoord;
void main() {
fragColor = texture(pattern, texCoord);
}
我的代码:
int[] textures = new int[1];
gl4.glGenTextures(1, textures, 0);
int textureId = textures[0];
gl4.glActiveTexture(GL4.GL_TEXTURE0);
gl4.glBindTexture(GL4.GL_TEXTURE_1D, textureId);
ByteBuffer pixels = Buffers.newDirectByteBuffer(64 * 4 * 4);
float full = Float.MAX_VALUE;
float empty = 0f;
//opaque red.
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
//transparent green.
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
//opaque red
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
//transparent green.
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.putFloat(full);
pixels.putFloat(empty);
pixels.putFloat(empty);
pixels.flip();
gl4.glTexParameteri(GL4.GL_TEXTURE_1D, GL4.GL_TEXTURE_WRAP_S, GL4.GL_REPEAT);
gl4.glTexParameteri(GL4.GL_TEXTURE_1D, GL4.GL_TEXTURE_WRAP_T, GL4.GL_REPEAT);
gl4.glTexParameteri(GL4.GL_TEXTURE_1D, GL4.GL_TEXTURE_MIN_FILTER, GL4.GL_NEAREST);
gl4.glTexParameteri(GL4.GL_TEXTURE_1D, GL4.GL_TEXTURE_MAG_FILTER, GL4.GL_NEAREST);
gl4.glTexImage1D(GL4.GL_TEXTURE_1D, 0, 4, 32, 0, GL.GL_RGBA, GL.GL_FLOAT, pixels);
for (MapLayerData mapLayerData : mapLayerDataList) {
List<Line> lines = mapLayerData.getLines();
for (int x = 0; x < lines.size(); x++){
Line line = lines.get(x);
ArrayList<Point2D.Float> points = line.getPoints();
for (Point2D.Float point : points) {
vertBuffer.putFloat((float) point.x);
vertBuffer.putFloat((float) point.y);
}
vertBuffer.flip();
int[] bufferPointers = new int[1];
gl4.glGenBuffers(1, bufferPointers, 0);
gl4.glBindBuffer(GL.GL_ARRAY_BUFFER, bufferPointers[0]);
gl4.glBufferData(GL.GL_ARRAY_BUFFER, (points.size() * 8), vertBuffer, GL.GL_DYNAMIC_DRAW);
gl4.glVertexAttribPointer(0, 2, GL.GL_FLOAT, false, 8, 0);
gl4.glEnableVertexAttribArray(0);
gl4.glUniformMatrix4fv(lineTransformPointer, 1, false, transform.getMatrix(), 0);
gl4.glUniform1i(patternPointer, 0);
gl4.glDrawArrays(GL.GL_LINE_STRIP, 0, points.size());
gl4.glBindBuffer(GL.GL_ARRAY_BUFFER, 0);
gl4.glDeleteBuffers(bufferPointers.length, bufferPointers, 0);
vertBuffer.clear();
}
}
gl4.glDeleteTextures(1, textures,0);
int[]纹理=新的int[1];
gl4.glGenTextures(1,纹理,0);
int textureId=纹理[0];
gl4.glActiveTexture(gl4.GL_TEXTURE0);
gl4.glBindTexture(gl4.GL_TEXTURE_1D,textureId);
ByteBuffer像素=缓冲区。newDirectByteBuffer(64*4*4);
浮点满=浮点最大值;
浮动空=0f;
//不透明的红色。
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
//透明的绿色。
像素。putFloat(空);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
//不透明红
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
//透明的绿色。
像素。putFloat(空);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
像素。putFloat(空);
像素。浮点(满);
像素。putFloat(空);
像素。putFloat(空);
pixels.flip();
gl4.glTexParameteri(gl4.GL_纹理_1D,gl4.GL_纹理_包裹,gl4.GL_重复);
gl4.glTexParameteri(gl4.GL_纹理_1D,gl4.GL_纹理_包裹_T,gl4.GL_重复);
gl4.glTexParameteri(gl4.GL\u纹理\u 1D,gl4.GL\u纹理\u最小\u过滤器,gl4.GL\u最近);
gl4.glTexParameteri(gl4.GL_纹理_1D,gl4.GL_纹理_MAG_过滤器,gl4.GL_最近);
gl4.glTexImage1D(gl4.GL_纹理_1D,0,4,32,0,GL.GL_RGBA,GL.GL_浮点,像素);
用于(MapLayerData MapLayerData:mapLayerDataList){
List lines=mapLayerData.getLines();
对于(int x=0;x
不是核心上下文中4
的有效glTexImage1D()
internalFormat
- 没有证据表明你有VAO限制。这些都是核心环境所必需的
- 没有理由在1D纹理上进行
GL\u纹理\u包裹
- 不知道什么是
patternPointer
不是核心上下文中4
的有效glTexImage1D()
internalFormat
- 没有证据表明你有VAO限制。这些都是核心环境所必需的
- 没有理由在1D纹理上进行
GL\u纹理\u包裹
- 没有线索