Почему функция текстуры неизвестна? Я использую обработку - PullRequest
1 голос
/ 09 апреля 2020

Я играю с GLSL в обработке, но функция текстуры не работает.

Это ошибка, которую я получил:

RuntimeException: Cannot compile fragment shader:
ERROR: 0:8: 'texture' : no matching overloaded function found (using implicit conversion) 
ERROR: 0:8: 'texture' : function is not known 
ERROR: 0:7: '=' :  cannot convert from 'const highp float' to '4-component vector of highp float'

Это мой код:

PShader shad;
PImage testImg;
void setup() {
  size(800, 600, P2D);
  testImg = loadImage("testImg.jpg");
  shad = loadShader("frag.frag", "vert.vert");
  shad.set("asdfIMG", testImg);
  shad.set("resolution", (float)width, (float)height);
  noLoop();
}
void draw() {
  shader(shad);
  beginShape();
  vertex(-1.0, 1.0);
  vertex(1.0, 1.0);
  vertex(1.0, -1.0);
  vertex(-1.0, -1.0);
  endShape();
}

Вот мой код шейдера фрагмента:

#version 330

uniform sampler2D asdfIMG;
uniform vec2 resolution;
void main()
{
  vec4 texel = texture(asdfIMG, 0.5, 0.5);

  gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0);
}

Это мой код вершинного шейдера:

#version 330 core
attribute vec4 position;
void main() {
  gl_Position = position;
}

1 Ответ

1 голос
/ 09 апреля 2020

Функция texture хорошо известна, но нет перегруженной функции texture, которая могла бы обрабатывать эти 3 аргумента.
Если тип сэмплера равен sampler2D, то второй аргумент должно быть vec2 с текстурой cooridantes:

vec4 texel = texture(asdfIMG, 0.5, 0.5);

vec4 texel = texture(asdfIMG, vec2(0.5, 0.5));

В любом случае, нет смысла делать текстуру с постоянным поиском координаты. Используйте gl_FragCoord, чтобы получить относительные к окну координаты текущего фрагмента и вычислить координаты текстуры. например:

vec2 uv = gl_FragCoord.xy / resolution.xy;
vec4 texel = texture(asdfIMG, uv);
...