亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? win.cpp

?? 一個3D桌面的實現源碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
////  Copyright (C) 2002 Brad Wasson <bard@systemtoolbox.com>////  This file is part of 3ddesktop.////  3ddesktop is free software; you can redistribute it and/or modify it//  under the terms of the GNU General Public License as published by//  the Free Software Foundation; either version 2, or (at your option)//  any later version.////  3ddesktop is distributed in the hope that it will be useful, but//  WITHOUT ANY WARRANTY; without even the implied warranty of//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the//  GNU General Public License for more details.////  You should have received a copy of the GNU General Public License//  along with 3ddesktop; see the file COPYING.   If not, write to//  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.//#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <GL/gl.h>   // OpenGL itself.#include <GL/glu.h>  // GLU support library.#include <GL/glx.h>#include <X11/extensions/xf86vmode.h>#include <Imlib2.h>#include "win.hpp"#include "3ddesk.h" // for FOV#include "config.hpp"/* attributes for a single buffered visual in RGBA format with at least * 4 bits per color and a 16 bit depth buffer */static int attrListSgl[] = {GLX_RGBA, GLX_RED_SIZE, 4,     GLX_GREEN_SIZE, 4,     GLX_BLUE_SIZE, 4,     GLX_DEPTH_SIZE, 16,    None};/* attributes for a double buffered visual in RGBA format with at least * 4 bits per color and a 16 bit depth buffer */static int attrListDbl[] = { GLX_RGBA, GLX_DOUBLEBUFFER,     GLX_RED_SIZE, 4,     GLX_GREEN_SIZE, 4,     GLX_BLUE_SIZE, 4,     GLX_DEPTH_SIZE, 16,    None };unsigned int GLWindow::get_width(){ return width; }unsigned int GLWindow::get_height(){ return height; }unsigned int GLWindow::get_screen_width(){ return screen_width; }unsigned int GLWindow::get_screen_height(){ return screen_height; }Display *GLWindow::get_display(){ return display; }Window GLWindow::get_window(){ return win; }static intX_errors_handler (Display *display, XErrorEvent *error){    msgout (ERROR, "-------- X error\n");    return 0;}extern Config *cfg;  // FIXME!GLWindow::GLWindow() {    screenshot_data = NULL;}GLWindow::~GLWindow() {    if (screenshot_data)        delete screenshot_data;}int GLWindow::open_display() {    display = XOpenDisplay(0);    if (display == NULL) {        msgout (ERROR, "Can't open display\n");        return -1;    }    #if 0    // this must be done later after create_GL_window and after    // get_best_texture_size when we know what texturesize we will be    // using (also init imgfinal then)    screenshot_data = new unsigned char [cfg->texture_size * cfg->texture_size * 4];    if (screenshot_data == NULL) {        msgout (ERROR, "out of memory\n");        end_program(-1);    }#endif    screen = DefaultScreen(display);    screen_width = DisplayWidth(display, screen);    screen_height = DisplayHeight(display, screen);    Visual *vis = DefaultVisual(display, screen);    Colormap cm = DefaultColormap(display, screen);    imlib_context = imlib_context_new();    imlib_context_set_display(display);    imlib_context_set_visual(vis);    imlib_context_set_colormap(cm);    imlib_context_set_drawable(RootWindow(display, screen));    imlib_context_set_anti_alias(1);    imlib_context_set_blend(0);    img = imlib_create_image(screen_width, screen_height);    XSetErrorHandler(X_errors_handler);    return 0;}// ripped from bbws.cc -- redundant to VDesktops::send_client_message// but it was easier to just put another version herestatic void sendClientMessage(Display *display, int screen,                               int win, Atom atom, XID data){    XEvent e;    unsigned long mask;        e.xclient.type = ClientMessage;    e.xclient.window = win;    e.xclient.message_type = atom;    e.xclient.format = 32;    e.xclient.data.l[0] = (unsigned long) data;    e.xclient.data.l[1] = CurrentTime;        mask =  SubstructureRedirectMask;        XSendEvent(display, RootWindow(display,screen),               False, mask, &e);}int GLWindow::create_GL_window(char *title, Bool fs){    Colormap cmap;    int dpyWidth, dpyHeight;    int i;    int glxMajorVersion, glxMinorVersion;    int vidModeMajorVersion, vidModeMinorVersion;    XF86VidModeModeInfo **modes;    int modeNum;    int bestMode;    Atom wmDelete;    Window winDummy;    unsigned int borderDummy;        static int first_time = 1;    /* set best mode to current */    bestMode = 0;    fullscreen = fs;    if (fullscreen) {        width = screen_width;        height = screen_height;        msgout (DEBUG, "width %d x %d\n", width, height);    } else {        width = 600;        height = 480;    }    XF86VidModeQueryVersion(display, &vidModeMajorVersion,                            &vidModeMinorVersion);    msgout(DEBUG, "XF86VidModeExtension-Version %d.%d\n", vidModeMajorVersion,           vidModeMinorVersion);    XF86VidModeGetAllModeLines(display, screen, &modeNum, &modes);    // first entry cooresponds to the current mode - we want to use    // that so the mode switch happens seamlessly (no monitor reset)    deskMode = *modes[0];    bestMode = 0;    // verify the first mode is the current resolution    if ((modes[0]->hdisplay != width) || (modes[0]->vdisplay != height))    {        msgout (ERROR,                 "First mode in XF86VidMode list is not the same resolution as current desktop.\n"                "This will not do.  Exiting.\n");        fprintf (stderr,                 "3ddeskd: First mode in XF86VidMode list is not the same resolution as current desktop.\n"                 "3ddeskd: This will not do.  Exiting.\n");        end_program(-1);    }    // print out all the resolutions we found    for (i = 0; i < modeNum; i++)    {        msgout (DEBUG, "Found mode: %dx%d (%d) %d %d %d %d - %d %d %d\n",                modes[i]->hdisplay, modes[i]->vdisplay,                 modes[i]->dotclock,                modes[i]->hsyncstart, modes[i]->hsyncend,                modes[i]->htotal, modes[i]->hskew,                modes[i]->vsyncstart, modes[i]->vsyncend,                 modes[i]->vtotal);    }    /* get an appropriate visual */    vi = glXChooseVisual(display, screen, attrListDbl);    if (vi == NULL)    {        vi = glXChooseVisual(display, screen, attrListSgl);        msgout(DEBUG, "Only Singlebuffered Visual!\n");    }    else    {        msgout(DEBUG, "Got Doublebuffered Visual!\n");    }    glXQueryVersion(display, &glxMajorVersion, &glxMinorVersion);        msgout(DEBUG, "glX-Version %d.%d\n", glxMajorVersion, glxMinorVersion);        if (first_time) {        /* create a GLX context */        msgout (DEBUG, "create context\n");        ctx = glXCreateContext(display, vi, 0, GL_TRUE);                first_time = 0;    }    /* create a color map */    cmap = XCreateColormap(display, RootWindow(display, vi->screen),                           vi->visual, AllocNone);            attr.colormap = cmap;    attr.border_pixel = 0;    if (fullscreen)    {        fullscreenMode = *modes[bestMode];        XF86VidModeSwitchToMode(display, screen, modes[bestMode]);        XF86VidModeSetViewPort(display, screen, 0, 0);        dpyWidth = modes[bestMode]->hdisplay;        dpyHeight = modes[bestMode]->vdisplay;        msgout(DEBUG, "Resolution %dx%d\n", dpyWidth, dpyHeight);        XFree(modes);            /* create a fullscreen window */        attr.override_redirect = True;        attr.event_mask = ExposureMask | KeyPressMask | ButtonPressMask |            StructureNotifyMask | SubstructureRedirectMask;        win = XCreateWindow(display, RootWindow(display, vi->screen),                                   0, 0, dpyWidth, dpyHeight, 0, vi->depth, InputOutput, vi->visual,                                   CWBorderPixel | CWColormap | CWEventMask | CWOverrideRedirect,                                   &attr);        Atom wmproto[2];        wmproto[0] = XInternAtom (display, "WM_DELETE_WINDOW", False);        wmproto[1] = XInternAtom(display, "_BLACKBOX_STRUCTURE_MESSAGES", False);        XSetWMProtocols(display, win, wmproto, 2);        // this code fragment from xscreensaver - for making a blank mouse pointer        XColor black;        black.red = black.green = black.blue = 0;        Pixmap bit;        bit = XCreatePixmapFromBitmapData (display, win,                                           "\000", 1, 1,                                           0, //BlackPixelOfScreen (screen),                                           0, //BlackPixelOfScreen (screen),                                           1);        empty_cursor = XCreatePixmapCursor (display, bit, bit, &black, &black,                                             0, 0);        XFreePixmap (display, bit);        // -----        //XUndefineCursor (display, win);        //XDefineCursor (display, win, empty_cursor);        //XWarpPointer(display, None, win, 0, 0, 0, 0, 0, 0);                XMapRaised(display, win);        int rc1 = XGrabKeyboard(display, win, True, GrabModeSync,                                GrabModeAsync, CurrentTime);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕第一区第二区| 99精品久久久久久| 国产精品视频免费| 欧美色图在线观看| 亚洲www啪成人一区二区麻豆 | 色婷婷久久一区二区三区麻豆| 偷拍亚洲欧洲综合| 国产精品美日韩| 欧美一级片在线| 972aa.com艺术欧美| 免费高清成人在线| 亚洲欧美色综合| 色婷婷激情久久| 六月丁香婷婷色狠狠久久| 日韩伦理电影网| 26uuu欧美| 欧美欧美欧美欧美首页| 成人av午夜影院| 日本欧美一区二区在线观看| 一区二区三区自拍| 国产三级一区二区| 91精品国产综合久久国产大片| www.日韩av| 奇米精品一区二区三区在线观看| 国产日韩欧美综合一区| 日韩视频免费直播| 欧美日韩亚洲不卡| 色偷偷久久一区二区三区| 丁香啪啪综合成人亚洲小说| 奇米一区二区三区| 亚洲福利视频一区二区| 亚洲欧美在线另类| 久久夜色精品一区| 日韩三级免费观看| 欧美日韩高清影院| 欧美色网站导航| 91蝌蚪国产九色| www.亚洲人| 懂色av噜噜一区二区三区av| 激情图片小说一区| 蜜臀av亚洲一区中文字幕| 亚洲成av人片观看| 亚洲在线观看免费| 欧美高清在线精品一区| 精品国产自在久精品国产| 在线视频你懂得一区| 91网页版在线| 成人看片黄a免费看在线| 国产精品一卡二卡| 久久精品国产网站| 精品系列免费在线观看| 日韩国产精品久久久久久亚洲| 一区二区三区小说| 一区二区欧美精品| 一区二区国产视频| 亚洲欧美国产毛片在线| 欧美肥妇free| 在线看不卡av| 色偷偷成人一区二区三区91| 色视频成人在线观看免| 色综合久久综合网欧美综合网| 99re热视频这里只精品| 91在线国产观看| 在线观看av不卡| 欧美剧情片在线观看| 欧美久久婷婷综合色| 欧美视频在线观看一区二区| 欧美伊人久久久久久久久影院| 成人动漫一区二区三区| 美国十次综合导航| 国产一区二区不卡| 成人午夜在线视频| 国产精品午夜在线| 人人超碰91尤物精品国产| 在线免费观看日本欧美| 免费观看一级特黄欧美大片| 亚洲一区二区三区四区在线观看 | 亚洲久草在线视频| 亚洲激情校园春色| 日av在线不卡| 亚洲国产成人porn| 精品一区二区精品| 不卡一区二区三区四区| 99re成人精品视频| 91在线免费看| 91精品国产乱| 国产欧美精品一区二区色综合朱莉| 一区在线观看免费| 午夜久久电影网| 男人的天堂久久精品| 久久精品二区亚洲w码| 成av人片一区二区| 在线播放中文一区| 欧美一区二区日韩| 精品久久人人做人人爽| 国产精品电影院| 免费观看91视频大全| 成人激情文学综合网| 欧美精品v国产精品v日韩精品| 26uuu色噜噜精品一区二区| 亚洲日本在线a| 蜜乳av一区二区三区| 国产.欧美.日韩| 欧美无人高清视频在线观看| 欧美久久婷婷综合色| 国产精品青草综合久久久久99| 亚洲最色的网站| 国产美女久久久久| 欧美日韩国产123区| 中文字幕成人在线观看| 亚洲美女偷拍久久| 国产成人亚洲综合a∨婷婷| 欧美丝袜第三区| 精品国产乱码久久| 亚洲欧洲成人自拍| 毛片不卡一区二区| 欧美在线观看一区| 精品欧美一区二区三区精品久久 | 国产精品国产三级国产aⅴ无密码| 亚洲蜜臀av乱码久久精品| 精品一区二区三区香蕉蜜桃| 91极品美女在线| 久久久久久久国产精品影院| 日韩av电影天堂| 欧美在线不卡一区| 中文字幕日韩一区| 国产一区二区三区免费播放| 色999日韩国产欧美一区二区| 91精彩视频在线观看| 国产精品国产自产拍高清av王其| 激情五月婷婷综合网| 在线日韩av片| 一区二区三区日本| 91美女片黄在线观看| 亚洲欧洲日本在线| 国产成人免费在线| 精品久久久久久久久久久院品网| 国产女主播视频一区二区| 日本大胆欧美人术艺术动态| 欧美午夜精品久久久久久超碰 | 国产一区二区三区在线看麻豆| 欧美日韩一卡二卡| 亚洲在线视频免费观看| 国产精品18久久久久久久久| 精品少妇一区二区三区免费观看 | www.亚洲色图.com| 在线视频你懂得一区| 亚洲另类中文字| 色综合视频在线观看| 亚洲三级在线播放| 91美女视频网站| 亚洲精品日韩专区silk| www.66久久| 自拍偷拍国产亚洲| 91免费国产在线| 亚洲精品免费一二三区| 91国偷自产一区二区开放时间| 亚洲欧美日韩国产手机在线| av在线这里只有精品| 成人免费一区二区三区视频| 色综合久久久久久久久久久| 亚洲欧美综合色| 在线精品亚洲一区二区不卡| 亚洲国产视频网站| 日韩欧美卡一卡二| 国产成人亚洲综合a∨婷婷图片| 欧美韩国一区二区| 99精品欧美一区二区三区小说| 亚洲色图制服诱惑| 欧美喷潮久久久xxxxx| 亚洲欧美另类久久久精品2019| 91精品国产综合久久小美女| 久久66热re国产| 国产精品久久久久久久第一福利| 一本久久a久久精品亚洲| 亚洲一二三区视频在线观看| 日韩一区二区三区三四区视频在线观看| 久久国产精品99精品国产| 久久亚洲影视婷婷| 97精品久久久久中文字幕| 亚洲h精品动漫在线观看| 日韩欧美区一区二| www.久久精品| 五月婷婷久久丁香| 国产精品乱码久久久久久| 欧洲av一区二区嗯嗯嗯啊| 蜜桃久久久久久久| 国产精品久久久久婷婷二区次| 欧美日韩国产不卡| 黑人巨大精品欧美黑白配亚洲 | 亚洲欧美另类小说| 欧美精品一区二区高清在线观看 | 一本色道久久综合精品竹菊| 亚洲成av人片| 欧美激情一区二区在线| 欧美日韩国产精选| 粉嫩久久99精品久久久久久夜| 免费观看久久久4p| 亚洲精品免费一二三区| 精品免费视频一区二区|