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

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

?? opengles1_1_egl_demo.cpp

?? 6410BSP3
?? CPP
字號:
// OpenGLES1_1_EGL_Demo.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "OpenGLES1_1_EGL_Demo.h"
#include <windows.h>
#include <commctrl.h>


#include <gles/gl.h>
#include <egl/egl.h>

#define MAX_LOADSTRING 100

// Global Variables:
HINSTANCE            g_hInst;            // current instance
#ifdef SHELL_AYGSHELL
HWND                g_hWndMenuBar;        // menu bar handle
#else // SHELL_AYGSHELL
HWND                g_hWndCommandBar;    // command bar handle
#endif

EGLDisplay        display;
EGLSurface        surface;
EGLContext        context;
EGLConfig         config;

NativeDisplayType g_dpy;

HWND                gHWND;

extern int CheckerDemo();
extern void CheckerRender();
extern int CheckerDeinit();
extern int MipmapDemo();
extern void MipmapRender();
extern int MipmapDeinit();
extern int SubTextureDemo();
extern void SubTextureRender();
extern int SubTextureDeinit();
extern int TexbindDemo();
extern void TexbindRender();
extern int TexbindDeinit();
extern int TextureDemo();
extern void TextureRender();
extern int TextureDeinit();
extern int WrapDemo();
extern void WrapRender();
extern int WrapDeinit();
extern int VarrayDemo();
extern void VarrayRender();
extern int VarrayDeinit();
extern int ModelDemo();
extern void ModelRender();
extern int ModelDeinit();


typedef int (*pfnDemoInit)(void);
typedef void (*pfnDemoRender)(void);
typedef int (*pfnDemoDeinit)(void);

typedef struct _DemoFunction {
    pfnDemoInit        pfnInit;    
    pfnDemoRender        pfnRender;
    pfnDemoDeinit    pfnDeinit;
} DemoFunction;

DemoFunction    DemoList[8] = 
{
    {CheckerDemo, CheckerRender, CheckerDeinit},
    {MipmapDemo, MipmapRender, MipmapDeinit},
    {SubTextureDemo, SubTextureRender, SubTextureDeinit},
    {TexbindDemo, TexbindRender, TexbindDeinit},
    {TextureDemo, TextureRender, TextureDeinit},
    {WrapDemo, WrapRender, WrapDeinit},
    {VarrayDemo, VarrayRender, VarrayDeinit},
    {ModelDemo, ModelRender, ModelDeinit},
};

int selectedDemo=1;

// Forward declarations of functions included in this code module:
ATOM            MyRegisterClass(HINSTANCE, LPTSTR);
BOOL            InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);


void            initializeEGL();
void            deinitializeEGL();
void            render();

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPTSTR    lpCmdLine,
                   int       nCmdShow)
{
    MSG msg;

    DWORD dwFrames = 0;
    DWORD dwPrevTicks = GetTickCount();
    int stats_time = 0; // Assume no statistics

    // Perform application initialization:
    if (!InitInstance(hInstance, nCmdShow)) 
    {
        return FALSE;
    }

    initializeEGL();

    HACCEL hAccelTable;
    hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_OPENGLES1_1_EGL_DEMO));

    // Main message loop:
    /*
    while (GetMessage(&msg, NULL, 0, 0)) 
    {
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }*/

    DemoList[selectedDemo].pfnInit();

    for (;;)
    {
        if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
            if (WM_QUIT == msg.message)
                break;
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        else
        {
            render();
            dwFrames++;
        }
        const DWORD dwTicks = GetTickCount();
        if (stats_time > 0 && dwTicks - dwPrevTicks >= (DWORD)stats_time*1000)
        {
            TCHAR szMsg[16];
            wsprintf(szMsg, TEXT("%d FPS\n"), (1000 * dwFrames) / (dwTicks - dwPrevTicks));
            OutputDebugString(szMsg);
            dwPrevTicks = GetTickCount();
            dwFrames = 0;
        }
    }

    DemoList[selectedDemo].pfnDeinit();
    deinitializeEGL();

    return (int) msg.wParam;
}

//
//  FUNCTION: MyRegisterClass()
//
//  PURPOSE: Registers the window class.
//
//  COMMENTS:
//
ATOM MyRegisterClass(HINSTANCE hInstance, LPTSTR szWindowClass)
{
    WNDCLASS wc;

    wc.style         = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc   = WndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    wc.hIcon         = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_OPENGLES1_1_EGL_DEMO));
    wc.hCursor       = 0;
    wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
    wc.lpszMenuName  = 0;
    wc.lpszClassName = szWindowClass;

    return RegisterClass(&wc);
}

//
//   FUNCTION: InitInstance(HINSTANCE, int)
//
//   PURPOSE: Saves instance handle and creates main window
//
//   COMMENTS:
//
//        In this function, we save the instance handle in a global variable and
//        create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
    HWND hWnd;
    TCHAR szTitle[MAX_LOADSTRING];        // title bar text
    TCHAR szWindowClass[MAX_LOADSTRING];    // main window class name

    g_hInst = hInstance; // Store instance handle in our global variable

#if defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP)
    // SHInitExtraControls should be called once during your application's initialization to initialize any
    // of the device specific controls such as CAPEDIT and SIPPREF.
    SHInitExtraControls();
#endif // WIN32_PLATFORM_PSPC || WIN32_PLATFORM_WFSP

    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); 
    LoadString(hInstance, IDC_OPENGLES1_1_EGL_DEMO, szWindowClass, MAX_LOADSTRING);

#if defined(WIN32_PLATFORM_PSPC) || defined(WIN32_PLATFORM_WFSP)
    //If it is already running, then focus on the window, and exit
    hWnd = FindWindow(szWindowClass, szTitle);    
    if (hWnd) 
    {
        // set focus to foremost child window
        // The "| 0x00000001" is used to bring any owned windows to the foreground and
        // activate them.
        SetForegroundWindow((HWND)((ULONG) hWnd | 0x00000001));
        return 0;
    } 
#endif // WIN32_PLATFORM_PSPC || WIN32_PLATFORM_WFSP

    if (!MyRegisterClass(hInstance, szWindowClass))
    {
        return FALSE;
    }

    gHWND = hWnd = CreateWindow(szWindowClass, szTitle, WS_VISIBLE,
        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
     /*gHWND = hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU,
        0, 0, 400, 240, NULL, NULL, hInstance, NULL);*/

    if (!hWnd)
    {
        return FALSE;
    }

#ifdef WIN32_PLATFORM_PSPC
    // When the main window is created using CW_USEDEFAULT the height of the menubar (if one
    // is created is not taken into account). So we resize the window after creating it
    // if a menubar is present
    if (g_hWndMenuBar)
    {
        RECT rc;
        RECT rcMenuBar;

        GetWindowRect(hWnd, &rc);
        GetWindowRect(g_hWndMenuBar, &rcMenuBar);
        rc.bottom -= (rcMenuBar.bottom - rcMenuBar.top);
        
        MoveWindow(hWnd, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, FALSE);
    }
#endif // WIN32_PLATFORM_PSPC

    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);

#ifndef SHELL_AYGSHELL
    if (g_hWndCommandBar)
    {
        CommandBar_Show(g_hWndCommandBar, TRUE);
    }
#endif // !SHELL_AYGSHELL

    return TRUE;
}

//
//  FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  PURPOSE:  Processes messages for the main window.
//
//  WM_COMMAND    - process the application menu
//  WM_PAINT    - Paint the main window
//  WM_DESTROY    - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;

#if defined(SHELL_AYGSHELL) && !defined(WIN32_PLATFORM_WFSP)
    static SHACTIVATEINFO s_sai;
#endif // SHELL_AYGSHELL && !WIN32_PLATFORM_WFSP
    
    switch (message) 
    {
        case WM_COMMAND:
            wmId    = LOWORD(wParam); 
            wmEvent = HIWORD(wParam); 
            // Parse the menu selections:
            switch (wmId)
            {
                case IDM_HELP_ABOUT:
                    DialogBox(g_hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, About);
                    break;
#ifndef SHELL_AYGSHELL
                case IDM_FILE_EXIT:
                    DestroyWindow(hWnd);
                    break;
#endif // !SHELL_AYGSHELL
#ifdef WIN32_PLATFORM_PSPC
                case IDM_OK:
                    SendMessage (hWnd, WM_CLOSE, 0, 0);                
                    break;
#endif // WIN32_PLATFORM_PSPC
                default:
                    return DefWindowProc(hWnd, message, wParam, lParam);
            }
            break;
        case WM_CREATE:
#ifndef SHELL_AYGSHELL
            g_hWndCommandBar = CommandBar_Create(g_hInst, hWnd, 1);
            CommandBar_InsertMenubar(g_hWndCommandBar, g_hInst, IDR_MENU, 0);
            CommandBar_AddAdornments(g_hWndCommandBar, 0, 0);
#endif // !SHELL_AYGSHELL
#ifdef SHELL_AYGSHELL
            SHMENUBARINFO mbi;

            memset(&mbi, 0, sizeof(SHMENUBARINFO));
            mbi.cbSize     = sizeof(SHMENUBARINFO);
            mbi.hwndParent = hWnd;
            mbi.nToolBarId = IDR_MENU;
            mbi.hInstRes   = g_hInst;

            if (!SHCreateMenuBar(&mbi)) 
            {
                g_hWndMenuBar = NULL;
            }
            else
            {
                g_hWndMenuBar = mbi.hwndMB;
            }

            // Initialize the shell activate info structure
            memset(&s_sai, 0, sizeof (s_sai));
            s_sai.cbSize = sizeof (s_sai);
#endif // SHELL_AYGSHELL
            break;
        case WM_PAINT:
            hdc = BeginPaint(hWnd, &ps);
            
            // TODO: Add any drawing code here...
            
            EndPaint(hWnd, &ps);
            break;
        case WM_DESTROY:
#ifndef SHELL_AYGSHELL
            CommandBar_Destroy(g_hWndCommandBar);
#endif // !SHELL_AYGSHELL
#ifdef SHELL_AYGSHELL
            CommandBar_Destroy(g_hWndMenuBar);
#endif // SHELL_AYGSHELL
            PostQuitMessage(0);
            break;

#if defined(SHELL_AYGSHELL) && !defined(WIN32_PLATFORM_WFSP)
        case WM_ACTIVATE:
            // Notify shell of our activate message
            SHHandleWMActivate(hWnd, wParam, lParam, &s_sai, FALSE);
            break;
        case WM_SETTINGCHANGE:
            SHHandleWMSettingChange(hWnd, wParam, lParam, &s_sai);
            break;
#endif // SHELL_AYGSHELL && !WIN32_PLATFORM_WFSP

        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

// Message handler for about box.
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_INITDIALOG:
#ifndef SHELL_AYGSHELL
            RECT rectChild, rectParent;
            int DlgWidth, DlgHeight;    // dialog width and height in pixel units
            int NewPosX, NewPosY;

            // trying to center the About dialog
            if (GetWindowRect(hDlg, &rectChild)) 
            {
                GetClientRect(GetParent(hDlg), &rectParent);
                DlgWidth    = rectChild.right - rectChild.left;
                DlgHeight    = rectChild.bottom - rectChild.top ;
                NewPosX        = (rectParent.right - rectParent.left - DlgWidth) / 2;
                NewPosY        = (rectParent.bottom - rectParent.top - DlgHeight) / 2;
                
                // if the About box is larger than the physical screen 
                if (NewPosX < 0) NewPosX = 0;
                if (NewPosY < 0) NewPosY = 0;
                SetWindowPos(hDlg, 0, NewPosX, NewPosY,
                    0, 0, SWP_NOZORDER | SWP_NOSIZE);
            }
#endif // !SHELL_AYGSHELL
#ifdef SHELL_AYGSHELL
            {
                // Create a Done button and size it.  
                SHINITDLGINFO shidi;
                shidi.dwMask = SHIDIM_FLAGS;
                shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIPDOWN | SHIDIF_SIZEDLGFULLSCREEN | SHIDIF_EMPTYMENU;
                shidi.hDlg = hDlg;
                SHInitDialog(&shidi);
            }
#endif // SHELL_AYGSHELL

            return (INT_PTR)TRUE;

        case WM_COMMAND:
#ifndef SHELL_AYGSHELL
            if ((LOWORD(wParam) == IDOK) || (LOWORD(wParam) == IDCANCEL))
#endif // !SHELL_AYGSHELL
#ifdef SHELL_AYGSHELL
            if (LOWORD(wParam) == IDOK)
#endif
            {
                EndDialog(hDlg, LOWORD(wParam));
                return (INT_PTR)TRUE;
            }
            break;

        case WM_CLOSE:
            EndDialog(hDlg, message);
            return (INT_PTR)TRUE;

    }
    return (INT_PTR)FALSE;
}


void            initializeEGL()
{
    EGLint config_list[] = {
        EGL_RED_SIZE,       5,
        EGL_GREEN_SIZE,     6,
        EGL_BLUE_SIZE,      5,
#if defined(OPENGLES_TEST)        
        EGL_DEPTH_SIZE,     24,
#endif        
        EGL_NONE
    };

    EGLint num_config;

    
    g_dpy = GetDC(gHWND);

    display = eglGetDisplay(g_dpy);

    if (eglInitialize(display, NULL, NULL) == EGL_FALSE || eglGetError() != EGL_SUCCESS)
    {
        printf("eglInitialize Error!\r\n");
        return;
    }

    eglChooseConfig(display, config_list, &config, 1, &num_config);

    eglBindAPI(EGL_OPENGL_ES_API);

    surface = eglCreateWindowSurface( display, config, (NativeWindowType)(gHWND) , NULL);
    if ( surface == EGL_NO_SURFACE || eglGetError() != EGL_SUCCESS )
    {
        printf("eglCreateWindowSurface Error!\r\n");
        return ;
    }

    context = eglCreateContext( display, config, NULL,  NULL );
    if ( context == EGL_NO_CONTEXT || eglGetError() != EGL_SUCCESS )
    {
        printf("eglCreateContext Error!\r\n");
        return ;
    }

    if ( eglMakeCurrent( display, surface, surface, context ) == EGL_FALSE || eglGetError() != EGL_SUCCESS )
    {
        printf("eglMakeCurrent Error!\r\n");
        return;
    }

}


void    deinitializeEGL()
{
    eglMakeCurrent   (display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
    eglDestroySurface(display, surface);
    eglDestroyContext(display, context);
    eglTerminate(display);
    ReleaseDC(gHWND, (HDC)g_dpy);
}

void render()
{
    
//    glClearColor(1.0,0.0,0.0,0.0);
//    glClear (GL_COLOR_BUFFER_BIT);
    //printf("[%d] demo render\n", selectedDemo);
    DemoList[selectedDemo].pfnRender();
    //printf("[%d] demo eglSwapBuffers\n", selectedDemo);
//    glFlush ();

    eglSwapBuffers(display, surface);
    //printf("[%d] demo eglSwapBuffers Done\n", selectedDemo);
    if (EGL_SUCCESS != eglGetError())
    {
        RETAILMSG(1, (TEXT("eglSwapBuffers error: %x\r\n"), eglGetError()));
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99re热视频这里只精品| 在线影院国内精品| 亚洲va天堂va国产va久| 久久九九久久九九| 欧美久久久久久久久中文字幕| 国产精品77777竹菊影视小说| 亚洲国产视频一区| 国产精品久久久久一区二区三区共| 日韩欧美一级在线播放| 在线观看一区二区视频| 成人午夜免费视频| 久久黄色级2电影| 亚洲电影中文字幕在线观看| 亚洲天堂中文字幕| 国产校园另类小说区| 精品少妇一区二区三区日产乱码| 欧美日韩国产综合视频在线观看 | 中文字幕精品三区| 欧美xingq一区二区| 欧美乱妇15p| 欧美日韩国产123区| 色香色香欲天天天影视综合网| 国产福利91精品一区二区三区| 麻豆国产精品官网| 三级一区在线视频先锋| 亚洲国产一二三| 亚洲一区二区三区四区在线观看| 综合在线观看色| 中文字幕一区二区三区蜜月| 欧美韩国日本不卡| 国产欧美日韩综合精品一区二区 | 伊人一区二区三区| 亚洲天堂免费在线观看视频| 国产精品三级久久久久三级| 久久久久国色av免费看影院| 久久精品免费在线观看| 久久久久久久电影| 中文字幕欧美国产| 国产精品美女久久久久久2018| 中文一区二区在线观看| 国产目拍亚洲精品99久久精品| 国产色一区二区| 久久久久久99精品| 中文字幕国产一区二区| 亚洲色图都市小说| 亚洲欧美一区二区三区极速播放 | 日韩亚洲欧美成人一区| 欧美一级理论性理论a| 欧美大片日本大片免费观看| 日韩欧美国产一二三区| 久久―日本道色综合久久| 国产亚洲精品资源在线26u| 中文欧美字幕免费| 一区二区三区在线高清| 亚洲一区二区黄色| 日韩成人一区二区三区在线观看| 青娱乐精品视频| 国产真实乱对白精彩久久| 成人久久视频在线观看| 91国在线观看| 欧美一区二区三级| 国产亚洲自拍一区| 一级日本不卡的影视| 爽爽淫人综合网网站| 久久精品国产在热久久| 成人av集中营| 欧美日韩国产影片| 久久精品视频一区二区三区| 亚洲视频在线一区观看| 午夜精品123| 国产精品资源网| 欧美在线观看你懂的| 日韩欧美激情在线| 中文文精品字幕一区二区| 亚洲国产精品久久久久秋霞影院| 蜜桃av一区二区三区电影| 成人午夜av电影| 欧美蜜桃一区二区三区| 国产视频视频一区| 亚洲电影视频在线| 从欧美一区二区三区| 欧美日韩精品系列| 国产精品人人做人人爽人人添| 亚洲成人先锋电影| 国产99精品国产| 欧美浪妇xxxx高跟鞋交| 国产精品国产三级国产| 老司机一区二区| 在线亚洲欧美专区二区| 久久久久久综合| 亚洲v精品v日韩v欧美v专区| 成人亚洲精品久久久久软件| 宅男在线国产精品| 亚洲欧美区自拍先锋| 国产在线乱码一区二区三区| 欧美视频完全免费看| 国产精品欧美一级免费| 麻豆精品久久精品色综合| 一本色道久久综合亚洲精品按摩| 精品久久久久久久一区二区蜜臀| 一区二区三区在线观看欧美| 国产成人综合精品三级| 在线不卡中文字幕播放| 中文字幕在线播放不卡一区| 玖玖九九国产精品| 欧美日韩精品一区二区在线播放 | 亚洲美女电影在线| 国产一区二区三区综合| 欧美日韩dvd在线观看| 亚洲欧美电影一区二区| 国产精品亚洲成人| 日韩欧美你懂的| 日韩黄色免费电影| 在线精品视频小说1| 中文字幕一区二区三区av| 国产在线观看一区二区| 91精品国产一区二区人妖| 一区二区久久久久久| 91视频免费播放| 国产欧美日韩不卡免费| 国产乱国产乱300精品| 日韩视频在线你懂得| 亚洲午夜av在线| 欧美性大战久久久久久久| 国产精品久线观看视频| 国产成人在线观看| 久久久91精品国产一区二区三区| 六月丁香综合在线视频| 日韩精品一区二区三区三区免费 | 国产乱人伦精品一区二区在线观看 | 欧美日韩国产综合一区二区三区| 亚洲欧洲另类国产综合| 成人性生交大片免费看中文网站| 久久久精品一品道一区| 国产麻豆午夜三级精品| 精品国产a毛片| 国产在线播放一区三区四| 欧美不卡123| 狠狠色狠狠色合久久伊人| 久久五月婷婷丁香社区| 国产激情一区二区三区四区| 久久亚洲春色中文字幕久久久| 国产一区二区三区综合| 久久精品视频在线免费观看| 国产精品资源在线看| 国产亚洲成aⅴ人片在线观看| 成人午夜又粗又硬又大| 综合在线观看色| 在线观看91视频| 日韩不卡在线观看日韩不卡视频| 欧美精品少妇一区二区三区| 日本亚洲电影天堂| 久久综合精品国产一区二区三区| 国产福利一区二区三区视频| 国产精品久久久一本精品| 在线免费视频一区二区| 午夜久久久久久久久久一区二区| 在线不卡一区二区| 精品在线亚洲视频| 欧美国产欧美综合| 在线免费观看不卡av| 奇米影视在线99精品| 久久久久久久久99精品| 91在线国产观看| 日韩精品电影一区亚洲| 精品国产乱码久久久久久蜜臀| 成人深夜视频在线观看| 亚洲一区二区视频在线| 欧美成人在线直播| 不卡一区在线观看| 午夜在线电影亚洲一区| 26uuu色噜噜精品一区二区| 成人一级片网址| 三级在线观看一区二区| 日本一区二区三区国色天香 | 国产精品无遮挡| 欧美日韩一区二区三区不卡| 精品在线免费观看| 一区二区三区四区不卡视频| 精品久久久久一区二区国产| 91一区二区三区在线观看| 奇米色777欧美一区二区| 国产精品久久久久久久久图文区 | 久久你懂得1024| 91传媒视频在线播放| 狠狠色丁香久久婷婷综| 亚洲欧洲精品一区二区三区| 欧美日韩一区二区三区高清| 国产精品亚洲专一区二区三区| 亚洲精品网站在线观看| 欧美精品一区二区不卡 | 欧美日韩成人一区二区| 国产成人日日夜夜| 亚洲一级在线观看| 国产婷婷色一区二区三区| 欧洲亚洲精品在线| 国产一区二区不卡| 爽好久久久欧美精品| 成人免费小视频| 久久免费的精品国产v∧|