我在2GPU.com上学习OpenGL的教程,我被着色器部分卡住了。我在论坛上读过关于这个错误的文章,但我只找到了当人们使用VEC3作为VEC4时出现错误的例子,但我不认为我犯了那个错误,至少不是我设法看到的:
#version 430
void main(void) {
vec4 vertices[3];
vertices[0] = vec4( 0.25, -0.25, 0.5, 1.0);
vertices[1] = vec4(-0.25, -0.25, 0.5, 1.0);
vertices[2] = vec4( 0.25, 0.25, 0.5, 1.0);
gl_Position = vertices[gl_VertexID];
}
#version 430
out vec3 color;
void main(void) {
color = vec4(0.0, 1.0, 0.0, 1.0);
}
Vertex shader failed to compile with the following errors:
ERROR: 0:6: error(#160) Cannot convert from: "const highp 4-component vector of vec4" to: "default out highp 3-component vector of vec3"
ERROR: error(#273) 1 compilation errors. No code generated
Could not compile shader!
我尝试像这样转换顶点数据:
gl_Position = vec4(vertices[gl_VertexID]);
glPosition = vec3(vertices[glVertexID].xyz); (Incase gl_Position was actually a vec3)
但没有成功。
任何帮助都很感激!
public class ShaderLoader {
public static int createShader(String vertexShaderSource, String fragmentShaderSource) {
int vertex_shader = loadShader(vertexShaderSource, GL20.GL_VERTEX_SHADER);
int fragment_shader = loadShader(fragmentShaderSource, GL20.GL_FRAGMENT_SHADER);
int link_result = 0;
int programID = GL20.glCreateProgram();
GL20.glAttachShader(programID, vertex_shader);
GL20.glAttachShader(programID, fragment_shader);
GL20.glLinkProgram(programID);
GL20.glValidateProgram(programID);
GL20.glGetProgrami(programID, link_result);
if(link_result == GL11.GL_FALSE) {
System.out.println("Could not link program!");
System.exit(0);
}
return programID;
}
public static int loadShader(String filename, int type) {
StringBuilder builder = new StringBuilder();
try {
BufferedReader reader = new BufferedReader(new FileReader("src/shaders/" + filename));
String line;
while((line = reader.readLine()) != null) {
builder.append(line).append("\n");
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
int shaderID = GL20.glCreateShader(type);
GL20.glShaderSource(shaderID, builder);
GL20.glCompileShader(shaderID);
if(GL20.glGetShaderi(shaderID, GL20.GL_COMPILE_STATUS) == GL11.GL_FALSE) {
System.out.println(GL20.glGetShaderInfoLog(shaderID, 500));
System.out.println("Could not compile shader!");
System.exit(0);
}
return shaderID;
}
int shaderProgram = ShaderLoader.createShader("vertexShader.txt", "fragmentShader.txt");
if(type == GL20.GL_VERTEX_SHADER) {
System.out.println("Vertex: \n" + builder);
} else if(type == GL20.GL_FRAGMENT_SHADER) {
System.out.println("Fragment: \n" + builder);
}
Vertex:
#version 430
void main(void) {
vec4 vertices[3];
vertices[0] = vec4( 0.25, -0.25, 0.5, 1.0);
vertices[1] = vec4(-0.25, -0.25, 0.5, 1.0);
vertices[2] = vec4( 0.25, 0.25, 0.5, 1.0);
gl_Position = vertices[gl_VertexID];
}
Fragment:
#version 430
out vec4 color;
void main(void) {
color = vec4(0.0, 1.0, 0.0, 1.0);
}
您错误地使用了getprogrami()
函数。第二个参数是告诉函数要返回哪个内部标志的值,在本例中是gl20.link_status
。然后将此函数的返回值赋给link_result
变量。所以台词:
GL20.glGetProgrami(programID, link_result);
应改为:
link_result = GL20.glGetProgrami(programID, GL20.LINK_STATUS);
现在我们熟悉了组件基础知识,可以做一些更有趣的事情。
Examples Using the `withRouter` utility 如果你想应用里每个组件都处理路由对象,你可以使用withRouter高阶组件。下面是如何使用它: import { withRouter } from 'next/router' const ActiveLink = ({ children, router, href }) => { const style =
虽然在组件内部可以使用 this.context.router 来实现导航,但许多应用想要在组件外部使用导航。使用Router组件上被赋予的history可以在组件外部实现导航。 // your main file that renders a Router import { Router, browserHistory } from 'react-router' import routes fr
在React中,高阶组件是重用组件逻辑的一项高级技术。高阶组件并不是React API的一部分。高阶组件源自于React生态。 具体来说,高阶组件是一个函数,能够接受一个组件并返回一个新的组件。 const EnhancedComponent = higherOrderComponent(WrappedComponent); 组件是将props转化成UI,然而高阶组件将一个组价转化成另外一个组件
我试图将我的类组件转换为功能组件,但我的过滤器不再工作了。 主要的错误是当我想转换listProducts因为我不知道如何定义与useState为这种情况下的preState 如何能为情况更新状态? 这是我的密码 类组件 功能成分