Beispiel #1
0
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);
}
Beispiel #2
0
//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);
}
Beispiel #3
0
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;
}
Beispiel #4
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;
}