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();
}
Exemple #2
0
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;
}