static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) // Check For Windows Messages { case WM_ACTIVATE: // Watch For Window Activate Message if(!HIWORD(wParam)) // Check Minimization State active = 1; // Program Is Active else active = 0; // Program Is No Longer Active return 0; // Return To The Message Loop case WM_SYSCOMMAND: // Intercept System Commands switch(wParam) // Check System Calls { case SC_SCREENSAVE: // Screensaver Trying To Start? case SC_MONITORPOWER: // Monitor Trying To Enter Powersave? return 0; // Prevent From Happening } break; // Exit case WM_CLOSE: // Did We Receive A Close Message? PostQuitMessage(0); // Send A Quit Message return 0; // Jump Back case WM_KEYDOWN: // Is A Key Being Held Down? ogl::keys[wParam] = 1; // If So, Mark It As TRUE return 0; // Jump Back case WM_KEYUP: // Has A Key Been Released? ogl::keys[wParam] = 0; // If So, Mark It As FALSE return 0; // Jump Back case WM_SIZE: // Resize The OpenGL Window ogl_resize(LOWORD(lParam),HIWORD(lParam)); // LoWord=Width, HiWord=Height return 0; // Jump Back } // Pass All Unhandled Messages To DefWindowProc return DefWindowProc(hWnd,uMsg,wParam,lParam); }
//panjie add for to render offline buffer void GLES20RenderEngine::beginGroup(const mat4& colorTransform, bool isGLES) { //GLuint tname, name; if (isGLES) { isToOfB = true; } else { isToOfB = false; return; //startFlag = true; } ALOGE("panjie beginGroup startFlag is:%d ",startFlag); if (startFlag) { startFlag = false; //panjie init opengl env ogl_init(); ogl_resize(/*mVpHeight,*//*2880*/mVpWidth, /*1704*/mVpHeight); ogl_create_background_default_texture(/*2880*/mVpWidth , /*1704*/mVpHeight/*, mVpWidth*/); //panjie end GLuint tname, name; // create the texture glGenTextures(1, &tname); glBindTexture(GL_TEXTURE_2D, tname); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, mVpWidth, mVpHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); // create a Framebuffer Object to render into glGenFramebuffers(1, &name); ALOGE("panjie name is : %d tname is : %d ",name,tname); glBindFramebuffer(GL_FRAMEBUFFER, name); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tname, 0); //} //Group group; group.texture = tname; group.fbo = name; group.width = mVpWidth; group.height = mVpHeight; group.colorTransform = colorTransform; if(GL_FALSE == glIsFramebuffer(mFboName)){ ALOGE("GL_FALSE == glIsFramebuffer mFboName = %d ", mFboName); glGenTextures(1, &mTexName); glBindTexture(GL_TEXTURE_2D, mTexName); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, mVpWidth, mVpHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); //original fbo, delete it then we get error glGenFramebuffers(1, &mFboName); } } Group mGroup; mGroup.texture = mTexName; mGroup.fbo = mFboName; mGroup.width = mVpWidth; mGroup.height = mVpHeight; //group.colorTransform = colorTransform; mGroupStack.push(mGroup); }
int cface_main(int argc, char* argv[]) // Window Show State { if(!ogl::create("OGL framework", 640, 480, 32)) return 0; ogl_resize(640, 480); ogl_init(); // Quit If Window Was Not Created while(true) { if(active) ogl_draw_scene(); if(!ogl::input()) break; } ogl::destroy(); // Kill The Window return 0; }
/* This callback catches all events for the viewport */ int viewport_cb( GtkWidget *gl_area_w, GdkEvent *event ) { GdkEventButton *ev_button; GdkEventMotion *ev_motion; GNode *node; double dx, dy; unsigned int face_id; int x, y; boolean btn1, btn2, btn3; boolean ctrl_key; /* Handle low-level GL area widget events */ switch (event->type) { case GDK_EXPOSE: ogl_refresh( ); return FALSE; case GDK_CONFIGURE: ogl_resize( ); return FALSE; default: /* Event is probably coming from the mouse */ break; } if (event->type == GDK_BUTTON_PRESS) { /* Exit the About presentation if it is up */ if (about( ABOUT_END )) { indicated_node = NULL; return FALSE; } } /* If we're in splash screen mode, proceed no further */ if (globals.fsv_mode == FSV_SPLASH) return FALSE; /* Mouse-related events */ switch (event->type) { case GDK_BUTTON_PRESS: ev_button = (GdkEventButton *)event; btn1 = ev_button->button == 1; btn2 = ev_button->button == 2; btn3 = ev_button->button == 3; ctrl_key = ev_button->state & GDK_CONTROL_MASK; x = (int)ev_button->x; y = (int)ev_button->y; if (camera_moving( )) { /* Yipe! Impatient user */ camera_pan_finish( ); indicated_node = NULL; } else if (!ctrl_key) { if (btn2) indicated_node = NULL; else indicated_node = node_at_location( x, y, &face_id ); if (indicated_node == NULL) { geometry_highlight_node( NULL, FALSE ); window_statusbar( SB_RIGHT, "" ); } else { if (geometry_should_highlight( indicated_node, face_id ) || btn1) geometry_highlight_node( indicated_node, btn1 ); else geometry_highlight_node( NULL, FALSE ); window_statusbar( SB_RIGHT, node_absname( indicated_node ) ); if (btn3) { /* Bring up context-sensitive menu */ context_menu( indicated_node, ev_button ); filelist_show_entry( indicated_node ); } } } prev_x = x; prev_y = y; break; case GDK_2BUTTON_PRESS: /* Ignore second click of a double-click */ break; case GDK_BUTTON_RELEASE: ev_button = (GdkEventButton *)event; btn1 = ev_button->state & GDK_BUTTON1_MASK; ctrl_key = ev_button->state & GDK_CONTROL_MASK; if (btn1 && !ctrl_key && !camera_moving( ) && (indicated_node != NULL)) camera_look_at( indicated_node ); gui_cursor( gl_area_w, -1 ); break; case GDK_MOTION_NOTIFY: ev_motion = (GdkEventMotion *)event; btn1 = ev_motion->state & GDK_BUTTON1_MASK; btn2 = ev_motion->state & GDK_BUTTON2_MASK; btn3 = ev_motion->state & GDK_BUTTON3_MASK; ctrl_key = ev_motion->state & GDK_CONTROL_MASK; x = (int)ev_motion->x; y = (int)ev_motion->y; if (!camera_moving( ) && !gtk_events_pending( )) { if (btn2) { /* Dolly the camera */ gui_cursor( gl_area_w, GDK_DOUBLE_ARROW ); dy = MOUSE_SENSITIVITY * (y - prev_y); camera_dolly( - dy ); indicated_node = NULL; } else if (ctrl_key && btn1) { /* Revolve the camera */ gui_cursor( gl_area_w, GDK_FLEUR ); dx = MOUSE_SENSITIVITY * (x - prev_x); dy = MOUSE_SENSITIVITY * (y - prev_y); camera_revolve( dx, dy ); indicated_node = NULL; } else if (!ctrl_key && (btn1 || btn3)) { /* Pointless dragging */ if (indicated_node != NULL) { node = node_at_location( x, y, &face_id ); if (node != indicated_node) indicated_node = NULL; } } else indicated_node = node_at_location( x, y, &face_id ); /* Update node highlighting */ if (indicated_node == NULL) { geometry_highlight_node( NULL, FALSE ); window_statusbar( SB_RIGHT, "" ); } else { if (geometry_should_highlight( indicated_node, face_id ) || btn1) geometry_highlight_node( indicated_node, btn1 ); else geometry_highlight_node( NULL, FALSE); window_statusbar( SB_RIGHT, node_absname( indicated_node ) ); } prev_x = x; prev_y = y; } break; case GDK_LEAVE_NOTIFY: /* The mouse has left the viewport */ geometry_highlight_node( NULL, FALSE ); window_statusbar( SB_RIGHT, "" ); gui_cursor( gl_area_w, -1 ); indicated_node = NULL; break; default: /* Ignore event */ break; } return FALSE; }