예제 #1
0
파일: system.c 프로젝트: 5432935/genesis3d
BOOL SysInit(void)
{
	if(bWindowed)
	{
		SAL_get_pixel_format(&ClientWindow.PixelPitch,
							&ClientWindow.BytesPerPixel,
							&ClientWindow.R_shift,
							&ClientWindow.R_mask,
							&ClientWindow.R_width,
							&ClientWindow.G_shift,
							&ClientWindow.G_mask,
							&ClientWindow.G_width,
							&ClientWindow.B_shift,
							&ClientWindow.B_mask,
							&ClientWindow.B_width);
	}
	else
	{
		GetDDrawPixelFormat(&ClientWindow);
	}

	if (!RenderInit(&ClientWindow))
		return FALSE;
	
	return TRUE;
}
예제 #2
0
파일: disp.cpp 프로젝트: Plombo/dega
int DispInit()
{
  int Ret=0,MemLen=0;

  DisableDesktopWindowManager();

  // Create the DirectDraw interface
  pDD=NULL; Ret=DirectDrawCreate(NULL,&pDD,NULL);
  if (Ret<0) return 1; if (pDD==NULL) return 1; 

  // Set cooperation level
  pDD->SetCooperativeLevel(hFrameWnd,DDSCL_NORMAL);

  // Make primary surface
  Ret=MakePrimarySurface(); if (Ret!=0) return 1;
  
  Ret=1;
  if (TryOverlay) Ret=MakeOverlaySurface(); // Try overlay first
  if (Ret!=0)
  {
    // Else make buffer surface
    Ret=MakeBufferSurface(); if (Ret!=0) return 1;
  }

  // Render Init (precalc all colors)
  RenderInit();

  // Create the memory buffer
  DispMemPitch=ScrnWidth*DispBpp;
  MemLen=ScrnHeight*DispMemPitch;
  DispMem=(unsigned char *)malloc(MemLen); if (DispMem==NULL) return 1;
  memset(DispMem,0,MemLen);

  return 0;
}
예제 #3
0
    pixel_city()
    {
	RandomInit (time (NULL));
        RenderInit ();
	CameraInit ();
        TextureInit ();
        WorldInit ();
        resetviewport();
        
    }
예제 #4
0
void AppInit (void)
{

  RandomInit (time (NULL));
  CameraInit ();
  RenderInit ();
  TextureInit ();
  WorldInit ();

}
예제 #5
0
파일: main.c 프로젝트: dedred/SShowNN
void Init() {
	LogInit();
	LogSetLevel(LOG_DEBUG);
	SDL_Init(SDL_INIT_EVERYTHING);	/* Initialize SDL */
	window = SDL_CreateWindow("SDL_Shownn", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, WINDOW_WIDTH, WINDOW_HEIGHT, 0);
	renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED|SDL_RENDERER_PRESENTVSYNC);
	NetInit(WINDOW_WIDTH, WINDOW_HEIGHT);
	RenderInit(renderer, WINDOW_WIDTH, WINDOW_HEIGHT);
	LogDebug("Init complete");
}
예제 #6
0
void __fastcall TFSSettings::GDIBtnClick(TObject *Sender)
{
        int NewRenderMode;

        if (GDIBtn->Checked) NewRenderMode=RENDERGDI;
        else NewRenderMode=RENDERDDRAW;

        if (Form1->RenderMode!=NewRenderMode)
        {
                RenderEnd();
                Form1->RenderMode=NewRenderMode;
                RenderInit();
                AccurateInit(true);
        }
}
예제 #7
0
파일: main.c 프로젝트: Corbachu/KallistiOS
int main(int argc, char **argv) {
    printf("OpenGL MipMap Example (C) 2014 PH3NOM\n");

    RenderInit(); /* Initialize Open GL */

    /* Load a PVR texture to OpenGL with No MipMap */
    GLuint texID0 = glTextureLoadPVR("/rd/MP_512.pvr", 0, 0);

    /* Load a PVR texture to OpenGL with No MipMap, but use Open GL to create the MipMap */
    GLuint texID1 = glTextureLoadPVR("/rd/MP_512.pvr", 0, 1);

    GLuint curTexID = texID0;
    GLfloat width = 480, height = 480;

    while(1) {
        switch(InputCallback()) {
            case INP_RESIZE_UP:
                ++width;
                ++height;
                break;

            case INP_RESIZE_DOWN:
                if(width > 1 && height > 1) {
                    --width;
                    --height;
                }

                break;

            case INP_NO_MIP_MAP:
                curTexID = texID0;
                break;

            case INP_USE_MIP_MAP:
                curTexID = texID1;
                break;
        }

        RenderTexturedQuadCentered(curTexID, width, height);

        glutSwapBuffers();
    }

    return 0;
}
예제 #8
0
void QUADAPULT_Init(const char* path)
{
	if (!SortAndSweep::UnitTest())
		exit(1);

    RenderInit();

    const int NUM_TEXTURES = 10;
    static const char* textureArray[NUM_TEXTURES] = {
		"texture/a.tga", "texture/b.tga", "texture/c.tga", "texture/d.tga", "texture/e.tga",
        "texture/f.tga", "texture/g.tga", "texture/h.tga", "texture/i.tga", "texture/j.tga", };
/*
        "texture/k.tga", "texture/l.tga", "texture/m.tga", "texture/n.tga", "texture/o.tga",
        "texture/p.tga", "texture/q.tga", "texture/r.tga", "texture/s.tga", "texture/t.tga",
        "texture/u.tga", "texture/v.tga", "texture/w.tga", "texture/x.tga",	"texture/y.tga",
        "texture/z.tga"};
*/

	srand(10);
	//srand(12);

    Texture::SetSearchPath(path);
    for (int i = 0; i < NUM_TEXTURES; ++i)
    {
        Texture* texture = new Texture();
        texture->SetMinFilter(GL_LINEAR);
        texture->SetMagFilter(GL_LINEAR);
        texture->SetSWrap(GL_CLAMP_TO_EDGE);
        texture->SetTWrap(GL_CLAMP_TO_EDGE);
        bool ret = texture->LoadFromFile(textureArray[i], Texture::FlipVertical);
        assert(ret);
        s_textureVec.push_back(texture);
    }

    // init the s_texMap (used by StateSort)
    for (unsigned int i = 0; i < s_textureVec.size(); ++i)
    {
        const Texture* texture = s_textureVec[i];
        assert(texture);
        s_texMap[texture] = SpriteVec();
    }

	const float WIDTH = 320.0f;
	const float HEIGHT = 480.0f;
	const float SIZE = 5;//30;

    const int NUM_SPRITES = 1000;

	// special case this is meant to indicate the "screen"!
	s_screenSprite = new Sprite();
	Vector2f pos(RandomScalar(0.0f, WIDTH - SIZE), RandomScalar(0.0f, HEIGHT - SIZE));
	Vector2f size(Vector2f(SIZE, SIZE));
	float depth = -FLT_MAX;
	s_screenSprite->SetPosition(pos);
	s_screenSprite->SetSize(size);
	s_screenSprite->SetDepth(depth);
	s_screenSprite->SetName("screen");

	SortAndSweep::AABB* screenBox = s_sortAndSweep.AllocAABB();
    screenBox->Set(Vector2f(0, 0), Vector2f(WIDTH, HEIGHT), reinterpret_cast<void*>(s_screenSprite));
	s_sortAndSweep.Insert(screenBox);

    s_spriteVec.reserve(NUM_SPRITES);
    for (int i = 0; i < NUM_SPRITES; ++i)
    {
        Sprite* sprite = new Sprite();

		Vector2f pos(RandomScalar(0.0f, WIDTH - SIZE), RandomScalar(0.0f, HEIGHT - SIZE));
		Vector2f size(Vector2f(SIZE, SIZE));
		float depth = RandomScalar(0.0f, 1.0f);

        sprite->SetColor(Vector4f(RandomScalar(0.0f, 1.0f), RandomScalar(0.0f, 1.0f), RandomScalar(0.0f, 1.0f), 0.9f));
        sprite->SetPosition(pos);
        sprite->SetSize(size);
        sprite->SetDepth(depth);
		//int texNum = RandomInt(0, NUM_TEXTURES-1);
		int texNum = i % NUM_TEXTURES;
		sprite->SetTexture(s_textureVec[texNum]);
		char temp[512];
		sprintf(temp, "%d:%s[%.3f]", i, textureArray[texNum], depth);
		sprite->SetName(temp);

        s_spriteVec.push_back(sprite);

		SortAndSweep::AABB* spriteBox = s_sortAndSweep.AllocAABB();
        spriteBox->Set(pos, pos + size, reinterpret_cast<void*>(sprite));
		s_sortAndSweep.Insert(spriteBox);
    }

	printf("m_overlapVec.size = %lu\n", s_sortAndSweep.GetOverlapPairSet().size());

    Matrixf proj = Matrixf::Ortho(0, WIDTH, HEIGHT, 0, -10, 10);
    glMatrixMode(GL_PROJECTION);
    glLoadMatrixf(reinterpret_cast<float*>(&proj));
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glEnable(GL_TEXTURE_2D);
}
예제 #9
0
파일: riftty.cpp 프로젝트: kkawamura/riftty
int main(int argc, char* argv[])
{
    printf("START! pid = %d\n", getpid());

    if (!system("./restart.rb"))
        exit(1);

    if (signal(SIGUSR1, RestartHandler) == SIG_ERR) {
        fprintf(stderr, "An error occurred while setting a signal handler.\n");
        exit(1);
    }

    bool fullscreen = true;
    s_config = new AppConfig(fullscreen, false, 1280, 800);
    SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK);
    SDL_Window* displayWindow;
    SDL_Renderer* displayRenderer;

    uint32_t flags = SDL_WINDOW_OPENGL | (s_config->fullscreen ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0);
	int err = SDL_CreateWindowAndRenderer(s_config->width, s_config->height, flags, &displayWindow, &displayRenderer);
	if (err == -1 || !displayWindow || !displayRenderer) {
		fprintf(stderr, "SDL_CreateWindowAndRenderer failed!\n");
	}

	SDL_RendererInfo displayRendererInfo;
    SDL_GetRendererInfo(displayRenderer, &displayRendererInfo);
    /* TODO: Check that we have OpenGL */
    if ((displayRendererInfo.flags & SDL_RENDERER_ACCELERATED) == 0 ||
        (displayRendererInfo.flags & SDL_RENDERER_TARGETTEXTURE) == 0) {
        /* TODO: Handle this. We have no render surface and not accelerated. */
        fprintf(stderr, "NO RENDERER wtf!\n");
    }

    atexit(SDL_Quit);

    JOYSTICK_Init();

    AppConfig& config = *s_config;
    config.title = "riftty";

    //SDL_WM_SetCaption(config.title.c_str(), config.title.c_str());
    //SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);

    /*
    // clear
    glClearColor(s_clearColor.x, s_clearColor.y, s_clearColor.z, s_clearColor.w);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    SDL_GL_SwapWindow(displayWindow);
    */

    RiftSetup();

    RenderInit();

    win_init();

    init_config();

    struct passwd *pw = getpwuid(getuid());
    const char *homedir = pw->pw_dir;
    char config_filename[512];
    strncpy(config_filename, homedir, 512);
    strncat(config_filename, "/.riftty", 512);
    load_config(config_filename);

    cs_init();  // TODO: code pages do not want

    // TODO: determine this based on window-size & font-size or vice versa.
    cfg.rows = 25;
    cfg.cols = 80;

    // TODO: load config from /etc/riffty or ~/.rifttyrc
    finish_config();
    win_reconfig();

    // TODO: get SHELL from env

    cs_reconfig(); // TODO: do not want

    term_init();
    term_reset();
    term_resize(cfg.rows, cfg.cols);

    // TODO:
    int font_width = 10;
    int font_height = 10;
    unsigned short term_width = font_width * cfg.cols;
    unsigned short term_height = font_height * cfg.rows;

    char login[128];
    strncpy(login, getlogin(), 128);
    const char* login_argv[] = {"login", "-pfl", login, NULL};
    unsigned short rows = cfg.rows;
    unsigned short cols = cfg.cols;
    winsize ws = {rows, cols, term_width, term_height};
    child_create(login_argv, &ws);

    bool done = false;
    while (!done)
    {
        JOYSTICK_ClearFlags();

        SDL_Event event;
        while (SDL_PollEvent(&event))
        {
            switch (event.type)
            {
            case SDL_QUIT:
                done = true;
                break;

            case SDL_MOUSEMOTION:
                if (event.motion.state & SDL_BUTTON(1)) {
                    // move touch
                }
                break;

            case SDL_MOUSEBUTTONDOWN:
                if (event.button.button == SDL_BUTTON_LEFT) {
                    // start touch
                }
                break;

            case SDL_MOUSEBUTTONUP:
                if (event.button.button == SDL_BUTTON_LEFT) {
                    // end touch
                }
                break;

            case SDL_JOYAXISMOTION:
                JOYSTICK_UpdateMotion(&event.jaxis);
                break;

            case SDL_JOYBUTTONDOWN:
            case SDL_JOYBUTTONUP:
                JOYSTICK_UpdateButton(&event.jbutton);
                break;

            case SDL_KEYDOWN:
            case SDL_KEYUP:
                if (ProcessKeyEvent(&event.key)) {
                    done = true;
                }
                break;
            }
        }

        if (!done)
        {
            if (s_needsRestart)
                Restart();

            unsigned int now = SDL_GetTicks();  // milliseconds
            float dt = (now - s_ticks) / 1000.0f;	// convert to seconds.
            s_ticks = now;

            //printf("fps = %.0f\n", 1.0f/dt);

            Process(dt);
            Render(dt);
        }
    }

    child_kill(true);
    win_shutdown();

    RiftShutdown();
    JOYSTICK_Shutdown();

    return 0;
}
예제 #10
0
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	int wmId, wmEvent;
	PAINTSTRUCT ps;
	HDC hdc;

	switch (message)
	{
	case WM_SIZE:
	{
					//gWidth = LOWORD(lParam);
					//gHeight = HIWORD(wParam);
					TIMECAPS tc;
					UINT     wTimerRes;

					if (timeGetDevCaps(&tc, sizeof(TIMECAPS)) != TIMERR_NOERROR)
					{
						// Error; application can't continue.
					}
					else
					{
						char buf[200];
						sprintf_s(buf, "\nTimer %u", tc.wPeriodMin);
						OutputDebugStringA(buf);
					}
					
					HDC hdc = GetDC(hWnd);
					gSurface = CreateCompatibleDC(hdc);

					//HDC hdc = GetDC(hWnd);

					RECT rect;
					GetWindowRect(hWnd, &rect);

					gWidth = rect.right - rect.left;
					gHeight = rect.bottom - rect.top;
					gBitmap = CreateCompatibleBitmap(hdc, gWidth, gHeight);

					gOldBitmap = (HBITMAP)SelectObject(gSurface, gBitmap);
					DeleteDC(hdc);

					SetTimer(hWnd, IDT_TIMER, 10, NULL);


					RenderInit();
					//resize the backbuffer accordingly
					//SelectObject(gSurface, gOldBitmap);


					DeleteDC(hdc);
	}
	case WM_CREATE:
	{
					  BOOL comp;
					  if (DwmIsCompositionEnabled(&comp) != S_OK)
					  {
						  exit(0);
					  }
					  
					  break;
	}

	case WM_KEYDOWN:
	{
					 RECT r = { 0, gHeight - 10,  gWidth, gHeight };
					 //ScrollWindow(gHwnd, 0, -10, NULL, NULL);
					 //startX += 10;
					 startY += 16;
					 //InvalidateRect(hWnd, NULL, FALSE);
					 Render(gSurface);
					 break;
	}
	case WM_BLIT_REQUEST:
		/*hdc = GetDC(hWnd);
		gVsyncWin->TimerBlit(hdc);
		DeleteDC(hdc);*/
		
		//gVsyncWin->TimerBlit();
		
		break;
	case WM_COMMAND:
		wmId    = LOWORD(wParam);
		wmEvent = HIWORD(wParam);
		// Parse the menu selections:
		switch (wmId)
		{
		case IDM_ABOUT:
			//init();
			DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
			break;
		case IDM_EXIT:
			DestroyWindow(hWnd);
			break;
		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
		}
		break;
	case WM_PAINT:
		hdc = BeginPaint(hWnd, &ps);
		// TODO: Add any drawing code here...
		//Render(gSurface);
		//Rectangle(hdc, 100, 100, 500, 500);
		EndPaint(hWnd, &ps);
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	case WM_TIMER:
		switch (wParam)
		{
		case IDT_TIMER:
			gOldBitmap = (HBITMAP)SelectObject(gSurface, gBitmap);
			//startY += 16;
			Render(gSurface);
			SelectObject(gSurface, gOldBitmap);
			break;
		case TIMER_VSYNC:
			//gVsyncWin->TimerBlit();
			break;
		}
			
		break;
	default:
		return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return 0;
}
void Display()
{
	float buffer[16];
	RenderInit();
	//Pass1
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glViewport(0, 0, view1->w, view1->h);

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	gluLookAt(	light1->lightList[0].position[0], light1->lightList[0].position[1], light1->lightList[0].position[2],// eye
				
				view1->center[0], view1->center[1], view1->center[2],  // center
				view1->up[0]+1, view1->up[1], view1->up[2]);    // up	//kkk 9.4 problem
	
	glGetFloatv(GL_MODELVIEW_MATRIX, buffer);
	for(int i = 0; i < 16; i++)
		LightViewMatrix.M[i] = buffer[i];
	
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective(view1->fovy*1.4, (GLfloat)WinW/(GLfloat)WinH, view1->dnear*4, view1->dfar);//fovy aspect near far
	
	glGetFloatv(GL_PROJECTION_MATRIX, buffer);
	for(int i = 0; i < 16; i++)
		LightProjectionMatrix.M[i] = buffer[i];
	
	
	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, FBO);
	glDrawBuffers(0, NULL); glReadBuffer(GL_NONE);
	glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, ShadowMap, 0);
	
	glClear(GL_DEPTH_BUFFER_BIT);
	
	
	glEnable(GL_DEPTH_TEST);
	glEnable(GL_CULL_FACE);
	//we don't use it because there are thin plane. If we cull front, shadowmap can't see thin plane.
	//glCullFace(GL_FRONT);	//kkk problem

	glShadeModel(GL_FLAT);
    glColorMask(0, 0, 0, 0);

	//kkk RenderObjects
	switch(scene_num)
	{
	case 1:
		RenderObjects(true, object1, 0);
		RenderObjects(true, object2, 1);
		break;
	case 2:
		RenderObjects(true, object1, 0);
		RenderObjects(true, object2, 1);
		break;
	case 3:
		RenderObjects(true, object1, 0);
		RenderObjects(true, object2, 1);
		RenderObjects(true, object3, 2);
		break;
	}
	
	//glCullFace(GL_BACK);
    glShadeModel(GL_SMOOTH);
    glColorMask(1, 1, 1, 1);
	
	glDisable(GL_CULL_FACE);
	glDisable(GL_DEPTH_TEST);
	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);

	//Pass2

	glViewport(view1->x, view1->y, view1->w, view1->h);						// Reset The Current Viewport
	
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glMatrixMode(GL_MODELVIEW);
	//glLoadMatrixf(&ViewMatrix);
	glLoadIdentity();
	gluLookAt(	view1->eye[0], view1->eye[1], view1->eye[2],// eye
				view1->center[0], view1->center[1], view1->center[2],  // center
				view1->up[0], view1->up[1], view1->up[2]);    // up
	glGetFloatv(GL_MODELVIEW_MATRIX, buffer);
	for(int i = 0; i < 16; i++)
		ViewMatrix.M[i] = buffer[i];
	ViewMatrixInverse = inverse(ViewMatrix);
	glMatrixMode(GL_PROJECTION);											// Select The Projection Matrix
	
	glLoadIdentity();
	gluPerspective(view1->fovy, (GLfloat)WinW/(GLfloat)WinH, view1->dnear, view1->dfar);//fovy aspect near far

	
	if(scene_num == 3)
		light1->lightList[0].position[3] = 1;
	glEnable(GL_LIGHTING);
	for(int i = 0; i < light1->now; i++)
	{
		glEnable(GL_LIGHT0 + i);
		//some problem about GL_POSITION
		glLightfv(GL_LIGHT0 + i, GL_POSITION, light1->lightList[i].position);
		glLightfv(GL_LIGHT0 + i, GL_AMBIENT, light1->lightList[i].ambient);
		glLightfv(GL_LIGHT0 + i, GL_DIFFUSE, light1->lightList[i].diffuse);
		glLightfv(GL_LIGHT0 + i, GL_SPECULAR, light1->lightList[i].specular);
		//glLightModelfv(GL_LIGHT_MODEL_AMBIENT, light1->total_ambient);
		//cout << "i:" << i << "  " << light1->position[i] << light1->ambient[i] << light1->diffuse[i] << light1->specular[i] << endl;
	}

	glEnable(GL_DEPTH_TEST);
	glEnable(GL_CULL_FACE);

	glUseProgram(MyShader);
	ShadowMatrix = BiasMatrix * LightProjectionMatrix * LightViewMatrix * ViewMatrixInverse; //kkk
	
	glUniformMatrix4fv(UniformLocations[0], 1, GL_FALSE, &ShadowMatrix);

	glBindTexture(GL_TEXTURE_2D, ShadowMap);
	//kkk RenderObjects
	switch(scene_num)
	{
	case 1:
		RenderObjects(false, object1, 0);
		RenderObjects(false, object2, 1);
		break;
	case 2:
		RenderObjects(false, object1, 0);
		RenderObjects(false, object2, 1);
		break;
	case 3:
		RenderObjects(false, object1, 0);
		RenderObjects(false, object2, 1);
		RenderObjects(false, object3, 2);
		break;
	}
	glDisable(GL_LIGHTING);

	glUseProgram(0);
	glDisable(GL_CULL_FACE);
	glDisable(GL_DEPTH_TEST);
    glDisable(GL_TEXTURE_2D);
	
	if(ShowShadowMap)
	{
		glViewport(0, 0, 512, 512);
	
		glMatrixMode(GL_PROJECTION);
		glLoadMatrixf(&ortho(0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f));
	
		glMatrixMode(GL_MODELVIEW);
		glLoadIdentity();
	
		glEnable(GL_TEXTURE_2D);
		glBindTexture(GL_TEXTURE_2D, ShadowMap);
		glColor3f(100.0f, 100.0f, 100.0f);
		glBegin(GL_QUADS);
			glTexCoord2f(0.0f, 0.0f); glVertex2f(0.0f, 0.0f);
			glTexCoord2f(1.0f, 0.0f); glVertex2f(1.0f, 0.0f);
			glTexCoord2f(1.0f, 1.0f); glVertex2f(1.0f, 1.0f);
			glTexCoord2f(0.0f, 1.0f); glVertex2f(0.0f, 1.0f);
		glEnd();
		glBindTexture(GL_TEXTURE_2D, 0);
		glDisable(GL_TEXTURE_2D);
	}


	glutSwapBuffers();
	glutPostRedisplay();
}
예제 #12
0
파일: Main.cpp 프로젝트: quantumrain/LD24
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    // Window

    WNDCLASSEX wc = { sizeof(wc) };

    wc.lpszClassName = L"MainWnd";
    wc.lpfnWndProc = MainWndProc;
    wc.hIcon = LoadIcon(GetModuleHandle(0), MAKEINTRESOURCE(IDI_LD24));
    wc.hCursor = LoadCursor(0, MAKEINTRESOURCE(IDC_ARROW));

    RegisterClassEx(&wc);

    DWORD	style	= WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU;
    DWORD	styleEx = WS_EX_WINDOWEDGE;
    RECT	rcWin	= { 0, 0, kWinWidth * 4, kWinHeight * 4 };

    AdjustWindowRectEx(&rcWin, style, FALSE, styleEx);
    OffsetRect(&rcWin, 100, 100);

    gMainWnd = CreateWindowEx(styleEx, wc.lpszClassName, L"LD24 - Super Conga Kat", style, rcWin.left, rcWin.top, rcWin.right - rcWin.left, rcWin.bottom - rcWin.top, 0, 0, 0, 0);

    ShowWindow(gMainWnd, SW_SHOWNORMAL);

    // Graphics

    if ((gD3d = Direct3DCreate9(D3D_SDK_VERSION)) == 0)
    {
        Panic("D3DCreate failed - do you have D3D9 installed?");
    }

    D3DPRESENT_PARAMETERS pp = { };

    pp.Windowed			= TRUE;
    pp.SwapEffect		= D3DSWAPEFFECT_DISCARD;
    pp.BackBufferWidth	= kWinWidth;
    pp.BackBufferHeight	= kWinHeight;
    pp.BackBufferFormat	= D3DFMT_A8R8G8B8;
    pp.hDeviceWindow	= gMainWnd;
    pp.PresentationInterval = D3DPRESENT_INTERVAL_ONE;

    if (FAILED(gD3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, gMainWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &pp, &gDevice)))
    {
        Panic("D3D CreateDevice failed - do you have D3D9 installed?");
    }

    D3DVIEWPORT9 vp;
    vp.Width = kWinWidth;
    vp.Height = kWinHeight;
    vp.MinZ = 0.0f;
    vp.MaxZ = 1.0f;
    vp.X = 0;
    vp.Y = 0;

    gDevice->SetViewport(&vp);

    gpu::Init();

    // Audio

    SoundInit();

    // Keys

    int locKeyW = MapVirtualKey(0x11, MAPVK_VSC_TO_VK);
    int locKeyS = MapVirtualKey(0x1F, MAPVK_VSC_TO_VK);
    int locKeyA = MapVirtualKey(0x1E, MAPVK_VSC_TO_VK);
    int locKeyD = MapVirtualKey(0x20, MAPVK_VSC_TO_VK);
    int locKeyZ = MapVirtualKey(0x2C, MAPVK_VSC_TO_VK);

    // Main

    void RenderInit();
    RenderInit();

    void GameInit();
    GameInit();

    for(;;)
    {
        MSG msg;
        if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
        {
            if (msg.message == WM_QUIT)
                break;

            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        else
        {
            if (gDevice)
            {
                gDevice->BeginScene();

                void RenderPreUpdate();
                RenderPreUpdate();

                gKeyUp		= gHasFocus && (((GetAsyncKeyState(VK_UP) & 0x8000) != 0) || ((GetAsyncKeyState(locKeyW) & 0x8000) != 0));
                gKeyDown	= gHasFocus && (((GetAsyncKeyState(VK_DOWN) & 0x8000) != 0) || ((GetAsyncKeyState(locKeyS) & 0x8000) != 0));
                gKeyLeft	= gHasFocus && (((GetAsyncKeyState(VK_LEFT) & 0x8000) != 0) || ((GetAsyncKeyState(locKeyA) & 0x8000) != 0));
                gKeyRight	= gHasFocus && (((GetAsyncKeyState(VK_RIGHT) & 0x8000) != 0) || ((GetAsyncKeyState(locKeyD) & 0x8000) != 0));
                gKeyFire	= gHasFocus && (((GetAsyncKeyState(VK_SPACE) & 0x8000) != 0) || ((GetAsyncKeyState(VK_RETURN) & 0x8000) != 0) || ((GetAsyncKeyState(locKeyZ) & 0x8000) != 0));

                void GameUpdate();
                GameUpdate();

                void RenderGame();
                RenderGame();

                gDevice->EndScene();
                gDevice->Present(0, 0, 0, 0);
            }

            Sleep(gHasFocus ? 0 : 250);
        }
    }

    gDevice->SetVertexDeclaration(0);
    gDevice->SetVertexShader(0);
    gDevice->SetPixelShader(0);
    gDevice->SetTexture(0, 0);

    SoundShutdown();

    void RenderShutdown();
    RenderShutdown();

    gDevice->Release();
    gD3d->Release();

    DestroyWindow(gMainWnd);

    return 0;
}