⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 glutget.cpp

📁 mesa-6.5-minigui源码
💻 CPP
字号:
/*********************************************************** *      Copyright (C) 1997, Be Inc.  Copyright (C) 1999, Jake Hamby. * * This program is freely distributable without licensing fees * and is provided without guarantee or warrantee expressed or * implied. This program is -not- in the public domain. * * *  FILE:	glutGet.cpp * *	DESCRIPTION:	get state information from GL ***********************************************************//*********************************************************** *	Headers ***********************************************************/#include <GL/glut.h>#include <string.h>#include <Autolock.h>#include <Screen.h>#include "glutint.h"#include "glutState.h"/*********************************************************** *	Global variables ***********************************************************/// rough guess, since we don't know how big the monitor really isconst float dots_per_mm = (72/25.4);	// dots per millimeter/*********************************************************** *	FUNCTION:	glutGet (9.1) * *	DESCRIPTION:  retrieve window and GL state ***********************************************************/int glutGet(GLenum state) {	switch(state) {	case GLUT_WINDOW_X:		{BAutolock winlock(gState.currentWindow->Window());	// need to lock the window		if (gState.currentWindow->parent)			return (int)gState.currentWindow->Frame().left;		else			return (int)gState.currentWindow->Window()->Frame().left;		}	case GLUT_WINDOW_Y:		{BAutolock winlock(gState.currentWindow->Window());		if (gState.currentWindow->parent)			return (int)gState.currentWindow->Frame().top;		else			return (int)gState.currentWindow->Window()->Frame().top;		}	case GLUT_WINDOW_WIDTH:		{BAutolock winlock(gState.currentWindow->Window());		return gState.currentWindow->m_width;		}	case GLUT_WINDOW_HEIGHT:		{BAutolock winlock(gState.currentWindow->Window());		return gState.currentWindow->m_height;		}	case GLUT_WINDOW_PARENT:		{BAutolock winlock(gState.currentWindow->Window());		if(gState.currentWindow->parent)			return gState.currentWindow->parent->num + 1;		else			return 0;		}	case GLUT_WINDOW_NUM_CHILDREN:		{BAutolock winlock(gState.currentWindow->Window());		int num = 0;		GlutWindow *children = gState.currentWindow->children;		while (children) {			num++;			children = children->siblings;		}		return num; 		}  case GLUT_WINDOW_BUFFER_SIZE:	// best guesses  case GLUT_WINDOW_DEPTH_SIZE:        return 32;  case GLUT_WINDOW_STENCIL_SIZE:  case GLUT_WINDOW_RED_SIZE:		// always 24-bit color  case GLUT_WINDOW_GREEN_SIZE:  case GLUT_WINDOW_BLUE_SIZE:  case GLUT_WINDOW_ALPHA_SIZE:  case GLUT_WINDOW_ACCUM_RED_SIZE:  case GLUT_WINDOW_ACCUM_GREEN_SIZE:  case GLUT_WINDOW_ACCUM_BLUE_SIZE:  case GLUT_WINDOW_ACCUM_ALPHA_SIZE:        return 8;  case GLUT_WINDOW_DOUBLEBUFFER:	// always double-buffered RGBA  case GLUT_WINDOW_RGBA:        return 1;  case GLUT_WINDOW_COLORMAP_SIZE:	// don't support these  case GLUT_WINDOW_NUM_SAMPLES:  case GLUT_WINDOW_STEREO:        return 0;  	case GLUT_WINDOW_CURSOR: 		return gState.currentWindow->cursor;	// don't need to lock window since it won't change	case GLUT_SCREEN_WIDTH:		return (int)(BScreen().Frame().Width()) + 1;	case GLUT_SCREEN_HEIGHT:		return (int)(BScreen().Frame().Height()) + 1;	case GLUT_SCREEN_WIDTH_MM:		return (int)((BScreen().Frame().Width() + 1) / dots_per_mm);	case GLUT_SCREEN_HEIGHT_MM:		return (int)((BScreen().Frame().Height() + 1) / dots_per_mm);	case GLUT_MENU_NUM_ITEMS:		return gState.currentMenu->num;	case GLUT_DISPLAY_MODE_POSSIBLE:		return __glutConvertDisplayMode(0);	// returns 1 if possible	case GLUT_INIT_DISPLAY_MODE:		return gState.displayMode;	case GLUT_INIT_WINDOW_X:		return gState.initX;	case GLUT_INIT_WINDOW_Y:		return gState.initY;	case GLUT_INIT_WINDOW_WIDTH:		return gState.initWidth;	case GLUT_INIT_WINDOW_HEIGHT:		return gState.initHeight;	case GLUT_ELAPSED_TIME:		bigtime_t elapsed, beginning, now;		__glutInitTime(&beginning);		now = system_time();		elapsed = now - beginning;		return (int) (elapsed / 1000);	// 1000 ticks in a millisecond	default:		__glutWarning("invalid glutGet parameter: %d", state);		return -1;	}}/*********************************************************** *	FUNCTION:	glutLayerGet (9.2) * *	DESCRIPTION:  since we don't support layers, this is easy ***********************************************************/int glutLayerGet(GLenum info) {	switch(info) {	case GLUT_OVERLAY_POSSIBLE:	case GLUT_HAS_OVERLAY:		return 0;	case GLUT_LAYER_IN_USE:		return GLUT_NORMAL;	case GLUT_TRANSPARENT_INDEX:		return -1;	case GLUT_NORMAL_DAMAGED:		return gState.currentWindow->displayEvent;	case GLUT_OVERLAY_DAMAGED:		return -1;	default:		__glutWarning("invalid glutLayerGet param: %d", info);		return -1;	}}/*********************************************************** *	FUNCTION:	glutDeviceGet (9.3) * *	DESCRIPTION:  get info about I/O devices we support *		easy, since BeOS only supports a keyboard and mouse now ***********************************************************/int glutDeviceGet(GLenum info) {	switch(info) {	case GLUT_HAS_KEYBOARD:	case GLUT_HAS_MOUSE:		return 1;	case GLUT_HAS_SPACEBALL:	case GLUT_HAS_DIAL_AND_BUTTON_BOX:	case GLUT_HAS_TABLET:	case GLUT_NUM_SPACEBALL_BUTTONS:	case GLUT_NUM_BUTTON_BOX_BUTTONS:	case GLUT_NUM_DIALS:	case GLUT_NUM_TABLET_BUTTONS:		return 0;		case GLUT_NUM_MOUSE_BUTTONS:	    {		int32 mouseButtons = 3;		// good guess		if(get_mouse_type(&mouseButtons) != B_OK) {			__glutWarning("error getting number of mouse buttons");		}		return mouseButtons;	    }	default:		__glutWarning("invalid glutDeviceGet parameter: %d", info);		return -1;	}}/*********************************************************** *	FUNCTION:	glutGetModifiers (9.4) * *	DESCRIPTION:  get the modifier key state for the current window ***********************************************************/int glutGetModifiers() {	if(gState.modifierKeys == (int) ~0) {	  __glutWarning(		"glutCurrentModifiers: do not call outside core input callback.");    return 0;	}	return gState.modifierKeys;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -