void PointCloudApplication::setup_graphics() { // Define Viewport glViewport(0, 0, context.viewport_width * ui_scale_factor, context.viewport_height * ui_scale_factor); setup_video_texture(); logo_texture = read_png_texture("pointcloud-logo.png"); point_texture = read_png_texture("trackpoint.png"); switch_to_ortho(); }
int main(int argc, char **argv) { if (argc < 2) { printf("Usage: test_media <video_to_play>\n"); return EXIT_FAILURE; } player = android_media_new_player(); if (player == NULL) { printf("Problem creating new media player.\n"); return EXIT_FAILURE; } // Set player event cb for when the video size is known: android_media_set_video_size_cb(player, set_video_size_cb, NULL); android_media_set_media_prepared_cb(player, media_prepared_cb, NULL); printf("Setting data source to: %s.\n", argv[1]); if (android_media_set_data_source(player, argv[1]) != OK) { printf("Failed to set data source: %s\n", argv[1]); return EXIT_FAILURE; } printf("Creating EGL surface.\n"); struct ClientWithSurface cs = client_with_surface(true /* Associate surface with egl. */); if (!cs.surface) { printf("Problem acquiring surface for preview"); return EXIT_FAILURE; } printf("Creating GL texture.\n"); GLuint preview_texture_id; EGLDisplay disp = sf_client_get_egl_display(cs.client); EGLSurface surface = sf_surface_get_egl_surface(cs.surface); sf_surface_make_current(cs.surface); if (setup_video_texture(&cs, &preview_texture_id) != OK) { printf("Problem setting up GL texture for video surface.\n"); return EXIT_FAILURE; } printf("Starting video playback.\n"); android_media_play(player); while (android_media_is_playing(player)) { const GLfloat textureCoordinates[] = { 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f }; android_media_update_surface_texture(player); calculate_position_coordinates(); gProgram = create_program(vertex_shader(), fragment_shader()); gaPositionHandle = glGetAttribLocation(gProgram, "a_position"); gaTexHandle = glGetAttribLocation(gProgram, "a_texCoord"); gsTextureHandle = glGetUniformLocation(gProgram, "s_texture"); gmTexMatrix = glGetUniformLocation(gProgram, "m_texMatrix"); glClear(GL_COLOR_BUFFER_BIT); // Use the program object glUseProgram(gProgram); // Enable attributes glEnableVertexAttribArray(gaPositionHandle); glEnableVertexAttribArray(gaTexHandle); // Load the vertex position glVertexAttribPointer(gaPositionHandle, 2, GL_FLOAT, GL_FALSE, 0, positionCoordinates); // Load the texture coordinate glVertexAttribPointer(gaTexHandle, 2, GL_FLOAT, GL_FALSE, 0, textureCoordinates); GLfloat matrix[16]; android_media_surface_texture_get_transformation_matrix(player, matrix); glUniformMatrix4fv(gmTexMatrix, 1, GL_FALSE, matrix); glActiveTexture(GL_TEXTURE0); // Set the sampler texture unit to 0 glUniform1i(gsTextureHandle, 0); glUniform1i(gmTexMatrix, 0); android_media_update_surface_texture(player); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisableVertexAttribArray(gaPositionHandle); glDisableVertexAttribArray(gaTexHandle); eglSwapBuffers(disp, surface); } android_media_stop(player); return EXIT_SUCCESS; }