#define WIN32_LEAN_AND_MEAN #define WIN32_EXTRA_LEAN #include "synth.h" #include #include "glext.h" #include "mark_small.h" #ifndef SCREENWIDTH #define SCREENWIDTH 1280 #endif #ifndef SCREENHEIGHT #define SCREENHEIGHT 720 #endif #ifndef ASPECTOFFSET #define ASPECTOFFSET 0.375f #endif #define WINDOWED #pragma data_seg(".Shader0") #include "mark_small.h" #pragma data_seg(".pfd") static const PIXELFORMATDESCRIPTOR pfd = { 0, 1, PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, PFD_TYPE_RGBA, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8 }; #pragma data_seg(".dms") static DEVMODE dmScreenSettings = { "", 0, 0, sizeof(dmScreenSettings), 0, DM_PELSWIDTH | DM_PELSHEIGHT, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "", 0, 0, SCREENWIDTH, SCREENHEIGHT }; #pragma data_seg(".fltused") int _fltused = 1; #pragma bss_seg(".mainbss") static int gCurScene = 0; static int gCurSceneStart = 0; static float lf_Time = 0.0f; static unsigned int shaders[3]; #pragma data_seg(".g_SceneLength") int g_SceneLength[] = { 16, 16, 16, 8, 8, 8, 8, 16, 8, 8, 16, 16, 16, 16, 16, 16, 0x80000000 }; #pragma data_seg(".g_SceneShader") int g_SceneShader[] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2 }; #pragma data_seg(".glCreateShaderProgramEXT") static const char* sglCreateShaderProgramEXT = "glCreateShaderProgramEXT"; #pragma data_seg(".glUseProgram") static const char* sglUseProgram = "glUseProgram"; #pragma data_seg(".glUniform4f") static const char* sglUniform4f = "glUniform4f"; #define shaderCountOffset 12 #ifdef _DEBUG void _printProgramInfoLog(GLhandleARB ah_Program) { int li_InfologLength = 0; int li_CharsWritten = 0; ((PFNGLGETPROGRAMIVPROC)wglGetProcAddress("glGetProgramiv"))(ah_Program, GL_INFO_LOG_LENGTH, &li_InfologLength); if (li_InfologLength > 0) { static char ls_InfoLog[65536]; ((PFNGLGETPROGRAMINFOLOGPROC)wglGetProcAddress("glGetProgramInfoLog"))(ah_Program, li_InfologLength, &li_CharsWritten, ls_InfoLog); OutputDebugString(ls_InfoLog); } } #else #define _printProgramInfoLog(foo) #endif #define ATOM_EDIT 0xC018 #define ATOM_STATIC 0xC019 #include "..\..\hgplus\obliterator\syncprototype\syncprototype\timeline.h" #pragma code_seg(".main") void _cdecl main() { #ifndef WINDOWED ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN); HDC hDC = GetDC(CreateWindowExA(0, (LPCSTR)ATOM_STATIC, 0, WS_POPUP | WS_VISIBLE | WS_MAXIMIZE, 0, 0, 0, 0, 0, 0, 0, 0)); #else HDC hDC = GetDC(CreateWindowExA(0, (LPCSTR)ATOM_EDIT, 0, WS_EX_APPWINDOW | WS_VISIBLE | WS_SYSMENU, 0, 0, SCREENWIDTH + 16, SCREENHEIGHT + 39, 0, 0, 0, 0)); #endif SetPixelFormat(hDC, ChoosePixelFormat(hDC, &pfd), &pfd); wglMakeCurrent(hDC, wglCreateContext(hDC)); //shaders[0] = ((PFNGLCREATESHADERPROGRAMEXTPROC)wglGetProcAddress(sglCreateShaderProgramEXT))(GL_FRAGMENT_SHADER, mark_fs_0); mark_fs_0[shaderCountOffset]++; _printProgramInfoLog(1); //shaders[1] = ((PFNGLCREATESHADERPROGRAMEXTPROC)wglGetProcAddress(sglCreateShaderProgramEXT))(GL_FRAGMENT_SHADER, mark_fs_0); mark_fs_0[shaderCountOffset]++; _printProgramInfoLog(2); //shaders[2] = ((PFNGLCREATESHADERPROGRAMEXTPROC)wglGetProcAddress(sglCreateShaderProgramEXT))(GL_FRAGMENT_SHADER, mark_fs_0); mark_fs_0[shaderCountOffset]++; _printProgramInfoLog(3); ShowCursor(FALSE); CreateTimeline(); InitSound(); do { UpdateTimeline(); get_Sample(); int Sample = MMTime.u.sample - gCurSceneStart; int SceneEnd = g_SceneLength[gCurScene] * SAMPLES_PER_TICK * 8;//samples per tick lf_Time = (float)Sample / (float)SceneEnd; //auto program = shaders[g_SceneShader[gCurScene]]; auto program = 1 + g_SceneShader[gCurScene]; ((PFNGLUSEPROGRAMPROC)wglGetProcAddress(sglUseProgram))(program); ((PFNGLUNIFORM4FPROC)wglGetProcAddress(sglUniform4f))(0, gCurScene, lf_Time, SCREENHEIGHT, ASPECTOFFSET); glRecti(-1, -1, 1, 1); SwapBuffers(hDC); if (Sample > SceneEnd) { gCurSceneStart += SceneEnd; gCurScene++; } MSG msg; while (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { ::TranslateMessage(&msg); ::DispatchMessage(&msg); } } while (MMTime.u.sample < MAX_SAMPLES && !GetAsyncKeyState(VK_ESCAPE)); ExitProcess(0); }