Update API + example
This commit is contained in:
@@ -157,76 +157,28 @@ int main(int argc, char** argv)
|
||||
gl_ctx gl;
|
||||
init_gl(&gl, hmd_w, hmd_h);
|
||||
|
||||
const char* vertex;
|
||||
ohmd_gets(OHMD_GLSL_DISTORTION_VERT_SRC, &vertex);
|
||||
const char* fragment;
|
||||
ohmd_gets(OHMD_GLSL_DISTORTION_FRAG_SRC, &fragment);
|
||||
|
||||
GLuint shader = compile_shader(vertex, fragment);
|
||||
glUseProgram(shader);
|
||||
glUniform1i(glGetUniformLocation(shader, "warpTexture"), 0);
|
||||
glUniform2fv(glGetUniformLocation(shader, "ViewportScale"), 1, viewport_scale);
|
||||
glUniform3fv(glGetUniformLocation(shader, "aberr"), 1, aberr_scale);
|
||||
glUseProgram(0);
|
||||
|
||||
GLuint list = gen_cubes();
|
||||
|
||||
lvrcInitRenderingEGL(compositor, gl.egl_display, gl.egl_context, gl.egl_surface);
|
||||
|
||||
int eye_w = hmd_w/2*OVERSAMPLE_SCALE;
|
||||
int eye_h = hmd_h*OVERSAMPLE_SCALE;
|
||||
|
||||
EGLint imageAttribs[] = {
|
||||
EGL_WIDTH, eye_w,
|
||||
EGL_HEIGHT, eye_h,
|
||||
EGL_DRM_BUFFER_FORMAT_MESA, EGL_DRM_BUFFER_FORMAT_ARGB32_MESA,
|
||||
EGL_DRM_BUFFER_USE_MESA, EGL_DRM_BUFFER_USE_SHARE_MESA,
|
||||
EGL_NONE
|
||||
};
|
||||
GLuint textures [2];
|
||||
|
||||
PFNEGLCREATEDRMIMAGEMESAPROC eglCreateDRMImage = (PFNEGLCREATEDRMIMAGEMESAPROC) eglGetProcAddress("eglCreateDRMImageMESA");
|
||||
bool bSwapChainInit = lvrcInitSwapChain(compositor, eye_w, eye_h, textures);
|
||||
|
||||
EGLImage left_image = eglCreateDRMImage(gl.egl_display, imageAttribs);
|
||||
EGLImage right_image = eglCreateDRMImage(gl.egl_display, imageAttribs);
|
||||
|
||||
GLuint left_color_tex = 0, left_depth_tex = 0, left_fbo = 0;
|
||||
create_fbo(eye_w, eye_h, &left_fbo, &left_color_tex, &left_depth_tex, left_image);
|
||||
|
||||
GLuint right_color_tex = 0, right_depth_tex = 0, right_fbo = 0;
|
||||
create_fbo(eye_w, eye_h, &right_fbo, &right_color_tex, &right_depth_tex, right_image);
|
||||
|
||||
PFNEGLEXPORTDMABUFIMAGEMESAPROC eglExportDMABUFImage = (PFNEGLEXPORTDMABUFIMAGEMESAPROC) eglGetProcAddress("eglExportDMABUFImageMESA");
|
||||
PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC eglExportDMABUFImageQuery = (PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC) eglGetProcAddress("eglExportDMABUFImageQueryMESA");
|
||||
|
||||
#if 1
|
||||
//EGLImage left_image = eglCreateImage(gl.egl_display, gl.egl_context, EGL_GL_TEXTURE_2D, (EGLClientBuffer)(left_color_tex), NULL);
|
||||
|
||||
dma_texture_params left_texture_params;
|
||||
left_texture_params.width = eye_w;
|
||||
left_texture_params.height = eye_h;
|
||||
eglExportDMABUFImageQuery(gl.egl_display, left_image, &left_texture_params.fourcc, &left_texture_params.numplanes, &left_texture_params.modifiers);
|
||||
eglExportDMABUFImage(gl.egl_display, left_image, &left_texture_params.fd, &left_texture_params.stride, &left_texture_params.offset);
|
||||
#endif // 0
|
||||
|
||||
#if 1
|
||||
//EGLImage right_image = eglCreateImage(gl.egl_display, gl.egl_context, EGL_GL_TEXTURE_2D, (EGLClientBuffer)(right_color_tex), NULL);
|
||||
|
||||
dma_texture_params right_texture_params;
|
||||
right_texture_params.width = eye_w;
|
||||
right_texture_params.height = eye_h;
|
||||
eglExportDMABUFImageQuery(gl.egl_display, right_image, &right_texture_params.fourcc, &right_texture_params.numplanes, &right_texture_params.modifiers);
|
||||
eglExportDMABUFImage(gl.egl_display, right_image, &right_texture_params.fd, &right_texture_params.stride, &right_texture_params.offset);
|
||||
#endif // 0
|
||||
|
||||
extern void init_vr_context(struct lvrcInstance * compositor, dma_texture_params * left_texture_params, dma_texture_params * right_texture_params);
|
||||
init_vr_context(compositor, &left_texture_params, &right_texture_params);
|
||||
|
||||
bool bCompositorInit = lvrcInitFrameResources(compositor);
|
||||
|
||||
if (!bCompositorInit)
|
||||
if (!bSwapChainInit)
|
||||
{
|
||||
return(-1);
|
||||
return -1;
|
||||
}
|
||||
|
||||
GLuint left_color_tex = textures[0], left_depth_tex = 0, left_fbo = 0;
|
||||
create_fbo(eye_w, eye_h, &left_fbo, left_color_tex, &left_depth_tex);
|
||||
|
||||
GLuint right_color_tex = textures[1], right_depth_tex = 0, right_fbo = 0;
|
||||
create_fbo(eye_w, eye_h, &right_fbo, right_color_tex, &right_depth_tex);
|
||||
|
||||
bool done = false;
|
||||
bool crosshair_overlay = false;
|
||||
while(!done){
|
||||
@@ -290,11 +242,7 @@ int main(int argc, char** argv)
|
||||
glDisable(GL_BLEND);
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
|
||||
|
||||
// Setup ortho state.
|
||||
glUseProgram(shader);
|
||||
glUniform1f(glGetUniformLocation(shader, "WarpScale"), warp_scale*warp_adj);
|
||||
glUniform4fv(glGetUniformLocation(shader, "HmdWarpParam"), 1, distortion_coeffs);
|
||||
glViewport(0, 0, hmd_w, hmd_h);
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glColor4d(1, 1, 1, 1);
|
||||
@@ -306,7 +254,6 @@ int main(int argc, char** argv)
|
||||
glLoadIdentity();
|
||||
|
||||
// Draw left eye
|
||||
glUniform2fv(glGetUniformLocation(shader, "LensCenter"), 1, left_lens_center);
|
||||
glBindTexture(GL_TEXTURE_2D, left_color_tex);
|
||||
glBegin(GL_QUADS);
|
||||
glTexCoord2d( 0, 0);
|
||||
@@ -320,7 +267,6 @@ int main(int argc, char** argv)
|
||||
glEnd();
|
||||
|
||||
// Draw right eye
|
||||
glUniform2fv(glGetUniformLocation(shader, "LensCenter"), 1, right_lens_center);
|
||||
glBindTexture(GL_TEXTURE_2D, right_color_tex);
|
||||
glBegin(GL_QUADS);
|
||||
glTexCoord2d( 0, 0);
|
||||
@@ -338,19 +284,14 @@ int main(int argc, char** argv)
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
glUseProgram(0);
|
||||
|
||||
glFinish();
|
||||
|
||||
// Da swap-dawup!
|
||||
eglSwapBuffers(gl.egl_display, gl.egl_surface);
|
||||
|
||||
|
||||
extern void vr_context_submit_eyes(struct lvrcInstance * compositor);
|
||||
|
||||
vr_context_submit_eyes(compositor);
|
||||
|
||||
lvrcEndFrame(compositor);
|
||||
}
|
||||
|
||||
lvrcReleaseFrameResources(compositor);
|
||||
|
||||
lvrcDestroyInstance(compositor);
|
||||
|
||||
ohmd_ctx_destroy(ctx);
|
||||
|
||||
Reference in New Issue
Block a user