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; }
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; }
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(); } }