in native/desktop-linux-sample/src/sample_linux.rs [161:200]
fn create_opengl_program(gl: &OpenGlFuncs) -> Option<GLuint> {
const V_SHADER_STR: &CStr = c"attribute vec4 vPosition;
void main()
{
gl_Position = vPosition;
}
";
const F_SHADER_STR: &CStr = c"precision mediump float;
void main()
{
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
";
// Load the vertex/fragment shaders
let vertex_shader = load_shader(gl, GL_VERTEX_SHADER, V_SHADER_STR.as_ptr()).unwrap();
let fragment_shader = load_shader(gl, GL_FRAGMENT_SHADER, F_SHADER_STR.as_ptr()).unwrap();
// Create the program object
unsafe {
let program = (gl.glCreateProgram)();
if program == 0 {
return None;
}
(gl.glAttachShader)(program, vertex_shader);
(gl.glAttachShader)(program, fragment_shader);
// Bind vPosition to attribute 0
(gl.glBindAttribLocation)(program, V_POSITION, c"vPosition".as_ptr());
(gl.glLinkProgram)(program);
// Check the link status
{
let mut linked: GLint = 0;
(gl.glGetProgramiv)(program, GL_LINK_STATUS, &raw mut linked);
if linked == 0 {
(gl.glDeleteProgram)(program);
return None;
}
}
(gl.glClearColor)(0.0, 1.0, 0.0, 1.0);
Some(program)
}
}