Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在OpenGL中创建并将纹理应用于线_Opengl_Jogl - Fatal编程技术网

无法在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包裹
      • 没有线索