Beispiel #1
0
int moth_gui::read_book(moth_book *book)
{
	SDL_Event event;
	this->book = book;
	create_textures();
	index.name = "START";
	book->build_index(index);
	while(running) {
		while(SDL_PollEvent(&event)) {
			switch( event.type ) {
			case SDL_KEYDOWN:
				handle_key_down(&event.key.keysym);
				break;
			case SDL_KEYUP:
				handle_key_up(&event.key.keysym);
				break;
			case SDL_MOUSEMOTION:
				handle_mouse_motion(&event.motion);
				break;
			case SDL_MOUSEBUTTONDOWN:
			case SDL_MOUSEBUTTONUP:
				handle_mouse_button(&event.button);
				break;
			case SDL_VIDEORESIZE:
				handle_resize(&event.resize);
				break;
			case SDL_QUIT:
				running = 0;
				break;
			}
		}
		show_pages();
	}
	return SUCCESS;
}
Beispiel #2
0
void main()
{	
	create_textures();
	while (true)
	{
		update();
		WAIT(0);
	}
}
enum piglit_result
piglit_display(void)
{
	GLuint r8_tex, gr88_tex;
	float *ref_rgba_image;

	GLuint va; /* vertex array */
	GLuint vb; /* vertex buffer */
	GLuint prog;

	static const float vb_data[] = {
		-1, -1,
		 1, -1,
		 1,  1,
		-1,  1,
	};

	if (piglit_width != WINDOW_WIDTH ||
	    piglit_height != WINDOW_HEIGHT) {
		piglit_loge("window is not %dx%d",
			    WINDOW_WIDTH, WINDOW_HEIGHT);
		return PIGLIT_FAIL;
	}

	create_textures(&r8_tex, &gr88_tex, &ref_rgba_image);

	prog = piglit_build_simple_program(
		"#version 300 es\n"
		"\n"
		"in vec2 a_position;\n"
		"out vec2 v_texcoord;\n"
		"\n"
		"void main()\n"
		"{\n"
		"	gl_Position = vec4(a_position, 0, 1);\n"
		"\n"
		"	v_texcoord = a_position;\n"
		"	v_texcoord += vec2(1, 1);\n"
		"	v_texcoord /= vec2(2, 2);\n"
		"}\n",

		"#version 300 es\n"
		"\n"
		"precision highp float;\n"
		"uniform sampler2D u_r8_tex;\n"
		"uniform sampler2D u_gr88_tex;\n"
		"in vec2 v_texcoord;\n"
		"out vec4 f_color;\n"
		"\n"
		"void main()\n"
		"{\n"
		"	float y = texture(u_r8_tex, v_texcoord).r;\n"
		"	vec2 uv = texture(u_gr88_tex, v_texcoord).rg;\n"
		"\n"
		"	/* A very fake NV12->RGB conversion */\n"
		"	f_color = vec4(y, uv.r, uv.g, 1);\n"
		"}\n");

	glUseProgram(prog);

	glUniform1i(glGetUniformLocation(prog, "u_r8_tex"), 0);
	glUniform1i(glGetUniformLocation(prog, "u_gr88_tex"), 1);

	if (!piglit_check_gl_error(GL_NO_ERROR))
		piglit_report_result(PIGLIT_FAIL);

	glGenBuffers(1, &vb);
	glBindBuffer(GL_ARRAY_BUFFER, vb);
	glBufferData(GL_ARRAY_BUFFER, sizeof(vb_data), vb_data,
		     GL_STATIC_DRAW);

	glGenVertexArrays(1, &va);
	glBindVertexArray(va);

	glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, (void *) 0);
	glEnableVertexAttribArray(0);

	glViewport(0, 0, piglit_width, piglit_height);
	glClearColor(0.2, 0.2, 0.2, 0.2);
	glClear(GL_COLOR_BUFFER_BIT);
	glDrawArrays(GL_TRIANGLE_FAN, /*first*/ 0, /*count*/ 4);

	if (!piglit_check_gl_error(GL_NO_ERROR))
		piglit_report_result(PIGLIT_FAIL);

	/* Increase the tolerance because the conversion path
	 *     ubyte --(texturing)--> float --(glReadPixels)--> ubyte
	 * is lossy.
	 */
	piglit_tolerance[0] = 0.05;
	piglit_tolerance[1] = 0.05;
	piglit_tolerance[2] = 0.05;
	if (!piglit_probe_image_rgba(0, 0, piglit_width, piglit_height,
				     ref_rgba_image)) {
		return PIGLIT_FAIL;
	}

	return PIGLIT_PASS;
}
Beispiel #4
0
bool XvMCTextures::Init(Display *disp, Window XJ_curwin,
                        int XJ_screen_num,
                        const QSize &video_dim,
                        const QSize &window_size)
{
    VERBOSE(VB_IMPORTANT, LOC + "Init");

    if (!disp)
    {
        VERBOSE(VB_IMPORTANT, LOC_ERR + "Init() no display!");
        return false;
    }

    XJ_disp = disp;

    if (!init_opengl())
    {
        VERBOSE(VB_PLAYBACK, LOC_ERR + "Failed to initialize OpenGL support.");

        return false;
    }

    uint major = 0, minor = 0;
    if (!get_glx_version(XJ_disp, major, minor))
    {
        VERBOSE(VB_PLAYBACK, LOC_ERR + "GLX extension not present.");

        return false;
    }

    if ((1 == major) && (minor < 3))
    {
        VERBOSE(VB_PLAYBACK, LOC_ERR + QString(
                    "Need GLX 1.3 or better, have %1.%2")
                .arg(major).arg(minor));

        return false;
    }

    if (!glx_fbconfig)
    {
        glx_fbconfig = get_fbuffer_cfg(
            XJ_disp, XJ_screen_num, get_attr_cfg(kRenderRGBA));
    }

    if (glx_fbconfig)
        glx_pbuffer = get_pbuffer(XJ_disp, glx_fbconfig, video_dim);

    if (!glx_context)
        X11S(glx_context = glXCreateNewContext(XJ_disp, glx_fbconfig,
                                               GLX_RGBA_TYPE, NULL, 1));

    XVisualInfo *vis_info;
    vis_info = glXGetVisualFromFBConfig(XJ_disp, glx_fbconfig);
    gl_window = get_gl_window(XJ_disp, XJ_curwin, vis_info,
                              window_size, true);

    glx_window = get_glx_window(XJ_disp, glx_fbconfig, gl_window, glx_context,
                                glx_pbuffer, window_size);

    glXMakeContextCurrent(XJ_disp, glx_window, glx_pbuffer, glx_context);
    glCheck();
    glXMakeContextCurrent(XJ_disp, None, None, NULL);

    gl_vid_textures = create_textures(
        XJ_disp, glx_window, glx_context, glx_pbuffer, video_dim, 1);
    gl_vid_tex_size.resize(gl_vid_textures.size());

    gl_osd_textures = create_textures(
        XJ_disp, glx_window, glx_context, glx_pbuffer, video_dim, 1);
    gl_osd_tex_size.resize(gl_vid_textures.size());

    XSync(XJ_disp, 0);

    gl_display_size = window_size;
    gl_video_size   = video_dim;

    glXMakeContextCurrent(XJ_disp, glx_window, glx_pbuffer, glx_context);
    glCheck();
    glXMakeContextCurrent(XJ_disp, None, None, NULL);

    VERBOSE(VB_IMPORTANT, LOC +
            QString("InitXvMCGL: video_size: %1x%2  vis_size: %3x%4")
            .arg(gl_video_size.width()).arg(gl_video_size.height())
            .arg(gl_display_size.width()).arg(gl_display_size.height()));

    VERBOSE(VB_IMPORTANT, LOC <<endl
            <<"glx_fbconfig: "<<glx_fbconfig<<endl
            <<"gl_window:    "<<gl_window<<endl
            <<"glx_window:   "<<glx_window<<endl
            <<"gl_vid_tex:   "<<gl_vid_textures[0]<<endl
            <<"gl_osd_tex:   "<<gl_osd_textures[0]<<endl);

    return true;
}
void CL_Sprite_Impl::init(CL_GraphicContext &gc, const CL_StringRef &resource_id, CL_ResourceManager *resources, const CL_ImageImportDescription &import_desc)
{
//	bool pack_texture = resource.get_element().get_attribute("pack_texture", "yes") == "yes";
	CL_Resource resource = resources->get_resource(resource_id);

	// Create sprite from sprite description
	CL_SpriteDescription desc(gc, resource_id, resources, import_desc );
	create_textures(gc, desc);

	// Load base angle
	float work_angle = CL_StringHelp::text_to_float(resource.get_element().get_attribute("base_angle", "0"));
	base_angle= CL_Angle(work_angle, cl_degrees);

	// Load id
	id = CL_StringHelp::text_to_int(resource.get_element().get_attribute("id", "0"));

	// Load play options	
	CL_DomNode cur_node = resource.get_element().get_first_child();
	while (!cur_node.is_null())
	{
		if (!cur_node.is_element())
			continue;

		CL_DomElement cur_element = cur_node.to_element();

		CL_String tag_name = cur_element.get_tag_name();

		// <color red="float" green="float" blue="float" alpha="float" />
		if (tag_name == "color")
		{
			color.r = (float)CL_StringHelp::text_to_float(cur_element.get_attribute("red", "1.0"));
			color.g = (float)CL_StringHelp::text_to_float(cur_element.get_attribute("green", "1.0"));
			color.b = (float)CL_StringHelp::text_to_float(cur_element.get_attribute("blue", "1.0"));
			color.a = (float)CL_StringHelp::text_to_float(cur_element.get_attribute("alpha", "1.0"));
		}
		// <animation speed="integer" loop="[yes,no]" pingpong="[yes,no]" direction="[backward,forward]" on_finish="[blank,last_frame,first_frame]"/>
		else if (tag_name == "animation")
		{
			int delay_ms = CL_StringHelp::text_to_int(cur_element.get_attribute("speed", "60"));

			int frame_count = frames.size();
			for(int i=0; i<frame_count; ++i)
				get_frame(i)->delay_ms = delay_ms;

			play_loop = ((cur_element.get_attribute("loop", "yes")) == "yes");
			play_pingpong = ((cur_element.get_attribute("pingpong", "no")) == "yes");
			play_backward = ((cur_element.get_attribute("direction", "forward")) == "backward");

			CL_String on_finish = cur_element.get_attribute("on_finish", "blank");
			if (on_finish == "first_frame")
				show_on_finish = CL_Sprite::show_first_frame;
			else if(on_finish == "last_frame")
				show_on_finish = CL_Sprite::show_last_frame;
			else
				show_on_finish = CL_Sprite::show_blank;
		}
		// <scale x="float" y="float />
		else if (tag_name == "scale")
		{
			scale_x = CL_StringHelp::text_to_float(cur_element.get_attribute("x", "1.0"));
			scale_y = CL_StringHelp::text_to_float(cur_element.get_attribute("y", "1.0"));
		}
		// <translation origin="string" x="integer" y="integer" />
		else if (tag_name == "translation")
		{
			CL_String hotspot = cur_element.get_attribute("origin", "top_left");
			CL_Origin origin;

			if(hotspot == "center")
				origin = origin_center;
			else if(hotspot == "top_center")
				origin = origin_top_center;
			else if(hotspot == "top_right")
				origin = origin_top_right;
			else if(hotspot == "center_left")
				origin = origin_center_left;
			else if(hotspot == "center_right")
				origin = origin_center_right;
			else if(hotspot == "bottom_left")
				origin = origin_bottom_left;
			else if(hotspot == "bottom_center")
				origin = origin_bottom_center;
			else if(hotspot == "bottom_right")
				origin = origin_bottom_right;
			else
				origin = origin_top_left;

			int xoffset = CL_StringHelp::text_to_int(cur_element.get_attribute("x", "0"));
			int yoffset = CL_StringHelp::text_to_int(cur_element.get_attribute("y", "0"));

			translation_origin = origin;
			translation_hotspot.x = xoffset;
			translation_hotspot.y = yoffset;
		}
		// <rotation origin="string" x="integer" y="integer" />
		else if (tag_name == "rotation")
		{
			CL_String hotspot = cur_element.get_attribute("origin", "center");
			CL_Origin origin;

			if(hotspot == "top_left")
				origin = origin_top_left;
			else if(hotspot == "top_center")
				origin = origin_top_center;
			else if(hotspot == "top_right")
				origin = origin_top_right;
			else if(hotspot == "center_left")
				origin = origin_center_left;
			else if(hotspot == "center_right")
				origin = origin_center_right;
			else if(hotspot == "bottom_left")
				origin = origin_bottom_left;
			else if(hotspot == "bottom_center")
				origin = origin_bottom_center;
			else if(hotspot == "bottom_right")
				origin = origin_bottom_right;
			else
				origin = origin_center;

			int xoffset = CL_StringHelp::text_to_int(cur_element.get_attribute("x", "0"));
			int yoffset = CL_StringHelp::text_to_int(cur_element.get_attribute("y", "0"));

			rotation_origin = origin;
			rotation_hotspot.x = xoffset;
			rotation_hotspot.y = yoffset;
		}
		// <frame nr="integer" speed="integer" x="integer" y="integer" />
		else if (tag_name == "frame")
		{
			int nr = CL_StringHelp::text_to_int(cur_element.get_attribute("nr", "0"));

			int yoffset = CL_StringHelp::text_to_int(cur_element.get_attribute("y", "0"));
			int xoffset = CL_StringHelp::text_to_int(cur_element.get_attribute("x", "0"));

			SpriteFrame *sptr = get_frame(nr);
			if (sptr == NULL)
			{
				throw CL_Exception("Invalid sprite frame index specified");
			}

			if (cur_element.has_attribute("speed")) 
			{
				sptr->delay_ms = CL_StringHelp::text_to_int(cur_element.get_attribute("speed", "60"));
			}

			sptr->offset = CL_Point(xoffset, yoffset);
		}

		cur_node = cur_node.get_next_sibling();
	}
}