windowless demos
category: code [glöplog]
I want to see more demos do this!
I want borderless windowed demos so I can IRC and browse teh WEB at the same time while also listening to music and ...
hack the planet?
Quote:
like this?
that's kinda awesome actually. If nothing else it could be used as a nice way to transition out of the desktop.
fake dos prompts nostalgia? :D
http://www.pouet.net/prod.php?which=66837
Divine lights...
Divine lights...
Similar fadeouts from the "desktop" are common in C64 and Amstrad CPC demos. Would be fun to see some on Windows as well :)
Oh u will ;-)
Here is the code below of my test application where it could use either DirectX or OpenGL.
In this code, you can also move the triangles which keep rotating...
You can compile without the transparency (which increase the FPS).
To close the application, ALT+F4 when the focus is on it.
Enjoy & do an amazing transition sequence within your demo! ;)
In this code, you can also move the triangles which keep rotating...
You can compile without the transparency (which increase the FPS).
To close the application, ALT+F4 when the focus is on it.
Enjoy & do an amazing transition sequence within your demo! ;)
Code:
#define _WIN32_WINNT 0x0500
#include <windows.h>
#include "stdafx.h"
#include <windowsx.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <mmsystem.h>
#include <stdio.h>
#define USE_DIRECT_X
#define COMPILE_WITH_TRANSPARENCY
#pragma comment (lib, "opengl32.lib")
#pragma comment (lib, "glu32.lib")
#pragma comment (lib, "winmm.lib")
#include <d3d9.h>
#include <D3D9Types.h>
// include the Direct3D Library file
#pragma comment (lib, "d3d9.lib")
// global declarations
LPDIRECT3D9 d3d = NULL; // the pointer to our Direct3D interface
LPDIRECT3DDEVICE9 d3ddev = NULL; // the pointer to the device class
#include <assert.h>
#include <tchar.h>
#include <math.h>
#define PI 3.14159265359
#define TIMER_DELAY 20
#ifdef assert
#define verify(expr) if(!expr) assert(0)
#else verify(expr) expr
#endif
const TCHAR szAppName[]=_T("TransparentGL");
const TCHAR wcWndName[]=_T("Transparent - DirectX");
HDC hDC;
HGLRC m_hrc;
HWND g_hWnd;
int w(640);
int h(480);
bool g_bSwitchAlpha = false;//false;
bool g_bTryFaster = false;//true;
int g_dlgx = 0;
int g_dlgy = 0;
int g_nINTSTEP = 1;
HDC pdcDIB;
HBITMAP hbmpDIB;
void *bmp_cnt(NULL);
int cxDIB(0);
int cyDIB(0);
BITMAPINFOHEADER BIH;
BITMAPV5HEADER BIHA;
DWORD g_dwPrepareDrawPerf, g_dwDrawPerf, g_dwDrawCopyBuf, g_dwGetBuf, g_dwUpdatewin32, g_dwUnlockBuf;
LARGE_INTEGER g_CPUTIME, g_CPUFREQ;
void _beginProf( void )
{
QueryPerformanceFrequency(&g_CPUFREQ);
QueryPerformanceCounter(&g_CPUTIME);
}
DWORD _getProf( void )
{
LARGE_INTEGER time;
QueryPerformanceCounter(&time);
time.QuadPart -= g_CPUTIME.QuadPart;
time.QuadPart*= 1000000;
time.QuadPart/= g_CPUFREQ.QuadPart;
return time.LowPart;
}
#define glGenFramebuffersEXT_t void *
BOOL initSC()
{
glEnable(GL_ALPHA_TEST);
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_RGBA_MODE);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glClearColor(0, 0, 0, 0);
return 0;
}
#define CUSTOMFVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)
LPDIRECT3DVERTEXBUFFER9 v_buffer;
struct CUSTOMVERTEX
{
FLOAT x, y, z, rhw; // from the D3DFVF_XYZRHW flag
DWORD color; // from the D3DFVF_DIFFUSE flag
};
CUSTOMVERTEX OurVertices[] =
{
{320.0f, 50.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(0, 0, 255),},
{520.0f, 400.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(0, 255, 0),},
{120.0f, 400.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0),},
{320.0f, 50.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(0, 0, 255),},
{520.0f, 400.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(0, 255, 0),},
{120.0f, 400.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0),},
{320.0f, 50.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(0, 0, 255),},
{520.0f, 400.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(0, 255, 0),},
{120.0f, 400.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0),},
{320.0f, 50.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(0, 0, 255),},
{520.0f, 400.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(0, 255, 0),},
{120.0f, 400.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0),},
{320.0f, 50.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(0, 0, 255),},
{520.0f, 400.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(0, 255, 0),},
{120.0f, 400.0f, 1.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0),},
};
BOOL initDX()
{
HRESULT hr;
// This code fragment assumes that lpD3DDevice is a valid pointer to a device.
// Enable alpha blending.
d3ddev->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
// Set the source blend state.
d3ddev->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCCOLOR);
// Set the destination blend state.
d3ddev->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCCOLOR);
hr = d3ddev->CreateVertexBuffer(5*3*sizeof(CUSTOMVERTEX),
0,
CUSTOMFVF,
D3DPOOL_MANAGED,
&v_buffer,
NULL);
VOID* pVoid; // the void* we were talking about
hr = v_buffer->Lock(0, 0, (void**)&pVoid, 0); // locks v_buffer, the buffer we made earlier
memcpy(pVoid, OurVertices, sizeof(OurVertices)); // copy vertices to the vertex buffer
hr = v_buffer->Unlock(); // unlock v_buffer
return 0;
}
void resizeSC(int width,int height)
{
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW );
glLoadIdentity();
}
BOOL renderSC()
{
DWORD dwTime, dwTime2;
DWORD dwPrepareDrawPerf, dwDrawPerf, dwDrawCopyBuf, dwGetBuf, dwUnlockBuf;
HDC pdcDest;
static double t = 0.0f;
double a1, a2, a3, x,y, tf;
int i, j;
VOID* pVoid; // the void* we were talking about
HRESULT hr;
static DWORD s_lastTime = 0;
static int s_nBufCpy = 0;
char szDbg[MAX_PATH];
_beginProf();
dwTime = timeGetTime();
if (s_lastTime==0)
s_lastTime = dwTime;
dwTime-=s_lastTime; // reduce time big number to start to zero.
dwTime = (DWORD) ((float) 0.7f * dwTime);
/* {
char szDbg[MAX_PATH];
sprintf(szDbg, "%d\n", dwTime-s_lastTime);
OutputDebugString(szDbg);
s_lastTime = dwTime;
}*/
t=((double) dwTime/1.4f) + 350.0f * sin(2.0f * PI * (double) dwTime/1.4f* 1.0f /1000);
#ifndef USE_DIRECT_X
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glPushMatrix();
glColor3f(0, 1, 1);
glBegin(GL_TRIANGLES); // Drawing Using Triangles
#else
// clear the window to a deep blue
d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_ARGB(0, 0, 0, 0), 1.0f, 0);
d3ddev->BeginScene(); // begins the 3D scene
d3ddev->SetFVF(CUSTOMFVF); // select which vertex format we are using
#endif
dwPrepareDrawPerf = _getProf();
g_dwPrepareDrawPerf+=dwPrepareDrawPerf;
// g_dwPrepareDrawPerf = g_dwDrawPerf = g_dwDrawCopyBuf = g_dwGetBuf
_beginProf();
// do 3D rendering on the back buffer here
a3 = 0.0f;
for(j=0;j<5;++j)
{
x = 0.3 * sin(2.0 * PI * t* 0.25 /1000);
y = 0.3 * sin(2.0 * PI * t* 0.5 /1000);
for(i=0;i<3;++i)
{
a1 = 0.75 * cos(2.0f * PI * t *0.3 / 1000 + 2.0 * PI * i /3);
a2 = 0.75 * sin(2.0f * PI * t *0.3 / 1000 + 2.0 * PI * i /3);
#ifndef USE_DIRECT_X
if (i==0)
glColor4f(0.8f,0.0f,0.0f,1.0f); // Set The Color To Red
else if (i==1)
glColor4f(1.0f,1.0f,0.0f,1.0f); // Set The Color To Green
else
glColor4f(0.0f,0.0f+j*0.1f,2.0f,0.0f); // Set The Color To Blue
glVertex3f( a1+x, a2+y, a3); // Top
#else
if (i==0)
OurVertices[i+j*3].color = D3DCOLOR_RGBA((int)(0.8f*255),(int)(0.0f*255),(int)(0.0f*255), int(1.0f*255));
else if (i==1)
OurVertices[i+j*3].color = D3DCOLOR_RGBA((int)(1.0f*255),(int)(1.0f*255),(int)(0.0f*255), int(1.0f*255));
else
OurVertices[i+j*3].color = D3DCOLOR_RGBA((int)(0.0f*255),(int)((0.0f+j*0.1f)*255),(int)(2.0f*255), int(0.25f*255));
tf = a1+x+1.0f;
OurVertices[i+j*3].x = tf*(float) (w/2); //(w*(a1+x+1.0f))/2.0f;
tf = a2+y+1.0f;
OurVertices[i+j*3].y = tf*(float)(h/2); //(h*(a2+y+1.0f))/2.0f;
OurVertices[i+j*3].z = 1.0f;//a3;
#endif
}
t += (38.0+30.0*sin(2.0*PI*t*0.70/1000))*(j+1+j*0.1);
a3-=0.01f;
// a3+=1.5f;
}
#ifndef USE_DIRECT_X
glEnd();
glPopMatrix();
glFlush();
#else
// select the vertex buffer to display
hr = v_buffer->Lock(0, 0, (void**)&pVoid, 0); // locks v_buffer, the buffer we made earlier
memcpy(pVoid, OurVertices, sizeof(OurVertices)); // copy vertices to the vertex buffer
hr = v_buffer->Unlock(); // unlock v_buffer
d3ddev->SetStreamSource(0, v_buffer, 0, sizeof(CUSTOMVERTEX));
// copy the vertex buffer to the back buffer
d3ddev->DrawPrimitive(D3DPT_TRIANGLELIST, 0, j);
d3ddev->EndScene(); // ends the 3D scene
#ifndef COMPILE_WITH_TRANSPARENCY
d3ddev->Present(NULL, NULL, NULL, NULL);
dwDrawPerf = _getProf();
g_dwDrawPerf+=dwDrawPerf;
_beginProf();
return 0;
#else
dwDrawPerf = _getProf();
g_dwDrawPerf+=dwDrawPerf;
_beginProf();
IDirect3DSurface9 *D3DBack;
hr = d3ddev->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &D3DBack );
RECT rect;
D3DLOCKED_RECT lockedrect;
rect.left = 0;
rect.right = w;
rect.top = 0;
rect.bottom = h;
hr = D3DBack->LockRect(&lockedrect, &rect, D3DLOCK_READONLY);
dwGetBuf = _getProf();
g_dwGetBuf+=dwGetBuf;
_beginProf();
if (hr==S_OK)
{
unsigned char *pS, *pD;
pD = (unsigned char *) bmp_cnt;
pS = (unsigned char *) lockedrect.pBits;
for(i=s_nBufCpy;i<h;i+=g_nINTSTEP)
{
memcpy(&pD[i*w*4], &pS[i*w*4], w*4);
}
s_nBufCpy = s_nBufCpy+1;
s_nBufCpy%=g_nINTSTEP;
}
dwDrawCopyBuf = _getProf();
g_dwDrawCopyBuf+=dwDrawCopyBuf;
_beginProf();
hr = D3DBack->UnlockRect();
dwUnlockBuf = _getProf();
g_dwUnlockBuf+=dwUnlockBuf;
#endif
#endif
return 0;
}
// DIB -> hDC
void draw(HDC pdcDest)
{
POINT pptDst, pptSrc;
SIZE pSize;
int i,j;
DWORD dwValue;
DWORD dwTime = timeGetTime();
assert(pdcDIB);
BLENDFUNCTION blendfunc;
blendfunc.AlphaFormat = AC_SRC_ALPHA;
blendfunc.BlendFlags = 0;
blendfunc.SourceConstantAlpha = 255;
blendfunc.BlendOp = AC_SRC_OVER;
// AlphaBlend(pdcDest, 0, 0, w, h, pdcDIB, 0, 0, w, h, blendfunc);
// TransparentBlt(pdcDest, 0, 0, w, h, pdcDIB, 0, 0, w, h, 0);
// verify(BitBlt(pdcDest, 0, 0, w, h, pdcDIB, 0, 0, SRCCOPY));
pptDst.x = 0+g_dlgx;
pptDst.y = 0+g_dlgy;
pptSrc.x = 0;
pptSrc.y = 0;
pSize.cx = w;
pSize.cy = h;
BOOL bRet;
unsigned char *pBuf;
HBITMAP hbm;
DWORD *pBmp = (DWORD *) bmp_cnt;
// DWORD dwValue;
int a, b;
// if ((timeGetTime()%1000)<500)
_beginProf();
#ifdef COMPILE_WITH_TRANSPARENCY
bRet = UpdateLayeredWindow(g_hWnd, pdcDest, &pptDst, &pSize, pdcDIB, &pptSrc, RGB(0,0,0), &blendfunc, ULW_ALPHA);
#endif
g_dwUpdatewin32+= _getProf();
}
void CreateDIB(int cx, int cy)
{
assert(cx > 0);
assert(cy > 0);
cxDIB = cx ;
cyDIB = cy ;
int iSize = sizeof(BITMAPV5HEADER);
memset(&BIHA, 0, iSize);
//The following mask specification specifies a supported 32 BPP
//alpha format for Windows XP.
BIHA.bV5Size = sizeof(BITMAPV5HEADER);
BIHA.bV5Width = cx;
BIHA.bV5Height = cy;
BIHA.bV5Planes = 1;
BIHA.bV5BitCount = 32;
BIHA.bV5SizeImage = w*h*4;
BIHA.bV5CSType = LCS_sRGB;
BIHA.bV5Compression = BI_BITFIELDS;
BIHA.bV5RedMask = 0x00FF0000;
BIHA.bV5GreenMask = 0x0000FF00;
BIHA.bV5BlueMask = 0x000000FF;
BIHA.bV5AlphaMask = 0xFF000000;
if(pdcDIB)
verify(DeleteDC(pdcDIB));
pdcDIB = CreateCompatibleDC(NULL);
assert(pdcDIB);
if(hbmpDIB)
verify(DeleteObject(hbmpDIB));
hbmpDIB = CreateDIBSection(
pdcDIB,
(BITMAPINFO*)&BIHA,
DIB_RGB_COLORS,
&bmp_cnt,
NULL,
0);
memset(bmp_cnt, 0x00, 4*w*h);
assert(hbmpDIB);
assert(bmp_cnt);
if(hbmpDIB)
SelectObject(pdcDIB, hbmpDIB);
}
BOOL CreateHGLRC()
{
DWORD dwFlags = PFD_DRAW_TO_BITMAP|PFD_SUPPORT_GDI|PFD_SUPPORT_DIRECTDRAW|PFD_GENERIC_ACCELERATED;
PIXELFORMATDESCRIPTOR pfd ;
memset(&pfd,0, sizeof(PIXELFORMATDESCRIPTOR)) ;
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
pfd.nVersion = 1;
pfd.dwFlags = dwFlags ;
pfd.iPixelType = PFD_TYPE_RGBA ;
pfd.cColorBits = 32 ;
pfd.cDepthBits = 24 ;
pfd.cStencilBits = 8;
pfd.cAlphaBits = 8;
pfd.iLayerType = PFD_MAIN_PLANE;
int PixelFormat = ChoosePixelFormat(pdcDIB, &pfd);
if (PixelFormat == 0){
assert(0);
return FALSE ;
}
BOOL bResult = SetPixelFormat(pdcDIB, PixelFormat, &pfd);
if (bResult==FALSE){
assert(0);
return FALSE ;
}
m_hrc = wglCreateContext(pdcDIB);
if (!m_hrc){
assert(0);
return FALSE;
}
return TRUE;
}
BOOL CreateHDXRC(HWND hWnd)
{
D3DPRESENT_PARAMETERS d3dpp; // create a struct to hold various device information
HRESULT hr;
ZeroMemory(&d3dpp, sizeof(d3dpp)); // clear out the struct for use
d3dpp.Windowed = TRUE; // program windowed, not fullscreen
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; // discard old frames
d3dpp.hDeviceWindow = hWnd; // set the window to be used by Direct3D
d3dpp.BackBufferWidth = w;
d3dpp.BackBufferHeight = h;
d3dpp.Flags = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
// create a device class using this information and information from the d3dpp stuct
hr = d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &d3ddev);
return TRUE;
}
LRESULT CALLBACK WindowFunc(HWND hWnd,UINT msg, WPARAM wParam, LPARAM lParam)
{
static int s_enter = 0;
PAINTSTRUCT ps;
int i;
char szDbg[MAX_PATH];
char szLastDbg[MAX_PATH];
DWORD dwTime;
static DWORD s_dwTime = 0;
static int s_nTime = 0;
static DWORD s_cumTime = 0;
static int s_lMX = 0;
static int s_lMY = 0;
static bool s_bMCD = false;
POINT pt;
CURSORINFO pci;
switch(msg)
{
case WM_ERASEBKGND:
return 0;
break;
case WM_CREATE:
break;
case WM_LBUTTONDOWN:
s_bMCD = true;
GetCursorPos(&pt);
s_lMX = pt.x;
s_lMY = pt.y;
break;
case WM_LBUTTONUP:
s_bMCD = false;
break;
case WM_MOUSEMOVE:
if (s_bMCD && (wParam&MK_LBUTTON)==0)
s_bMCD = false;
break;
case WM_DESTROY:
#ifndef USE_DIRECT_X
if(m_hrc)
{
wglMakeCurrent(NULL, NULL);
wglDeleteContext(m_hrc) ;
}
#else
if (d3ddev)
d3ddev->Release(); // close and release the 3D device
if (d3d)
d3d->Release(); // close and release Direct3D
#endif
PostQuitMessage(0) ;
break;
case WM_PAINT:
hDC = BeginPaint(hWnd, &ps);
renderSC(); // OpenGL -> DIB
draw(hDC); // DIB -> hDC
EndPaint(hWnd, &ps);
break;
case WM_TIMER:
// how to query mouse lbutton... to turn off moving our screen...
++s_nTime;
if (s_bMCD)
{
GetCursorPos(&pt);
g_dlgx += pt.x - s_lMX;
g_dlgy += pt.y - s_lMY;
s_lMX = pt.x;
s_lMY = pt.y;
}
//#ifndef USE_DIRECT_X
hDC = GetDC(hWnd);
renderSC(); // OpenGL -> DIB
draw(hDC); // DIB -> hDC
ReleaseDC(hWnd, hDC);
#ifndef COMPILE_WITH_TRANSPARENCY
SetWindowPos(hWnd, NULL, g_dlgx, g_dlgy, 0, 0, SWP_NOOWNERZORDER|SWP_NOSIZE);
#endif
break;
case WM_SIZE:
w = LOWORD(lParam); h = HIWORD(lParam);
#ifndef USE_DIRECT_X
// --- initialize Open GL ---
wglMakeCurrent(NULL, NULL);
wglDeleteContext(m_hrc);
CreateDIB(w, h);
CreateHGLRC();
verify(wglMakeCurrent(pdcDIB, m_hrc));
initSC();
resizeSC(w, h);
renderSC();
#else
// --- initialize Direct X ---
d3d = Direct3DCreate9(D3D_SDK_VERSION); // create the Direct3D interface
CreateDIB(w, h);
CreateHDXRC(hWnd);
initDX();
renderSC();
#endif
break;
case WM_KEYDOWN:
if (toupper(LOBYTE(wParam))=='A')
{
int nFPS, nRefXFer;
nFPS = (g_dwPrepareDrawPerf+g_dwDrawPerf+g_dwGetBuf+g_dwDrawCopyBuf+g_dwUnlockBuf+g_dwUpdatewin32)/s_nTime;
nFPS = 1000000/nFPS;
unsigned char *pS, *pD;
pS = new unsigned char[w*h*4];
pD = new unsigned char[w*h*4];
_beginProf();
memcpy(pD, pS, w*h*4);
nRefXFer = _getProf();
delete pS;
delete pD;
sprintf(szLastDbg, "Average %d FPS using %d Steps (memcpy ref=%dus)\n(after %d times: %dx%d): prepare=%d us, draw=%d us\n---> getBuf=%d us, copyBuf=%d us, unlock=%d us, updateWin32=%d us\n",
nFPS, g_nINTSTEP, nRefXFer, s_nTime, w, h,
g_dwPrepareDrawPerf/s_nTime, g_dwDrawPerf/s_nTime, g_dwGetBuf/s_nTime, g_dwDrawCopyBuf/s_nTime, g_dwUnlockBuf/s_nTime, g_dwUpdatewin32/s_nTime);
MessageBox(NULL, szLastDbg, "Info...", MB_OK);
}
else if (toupper(LOBYTE(wParam))=='1')
{
g_nINTSTEP = 1;
s_nTime = 0;
g_dwPrepareDrawPerf = g_dwDrawPerf = g_dwGetBuf = 0;
g_dwDrawCopyBuf = g_dwUnlockBuf = g_dwUpdatewin32 = 0;
}
else if (toupper(LOBYTE(wParam))=='2')
{
g_nINTSTEP = 2;
s_nTime = 0;
g_dwPrepareDrawPerf = g_dwDrawPerf = g_dwGetBuf = 0;
g_dwDrawCopyBuf = g_dwUnlockBuf = g_dwUpdatewin32 = 0;
}
else if (toupper(LOBYTE(wParam))=='3')
{
g_nINTSTEP = 4;
s_nTime = 0;
g_dwPrepareDrawPerf = g_dwDrawPerf = g_dwGetBuf = 0;
g_dwDrawCopyBuf = g_dwUnlockBuf = g_dwUpdatewin32 = 0;
}
else if (toupper(LOBYTE(wParam))=='4')
{
g_nINTSTEP = 8;
s_nTime = 0;
g_dwPrepareDrawPerf = g_dwDrawPerf = g_dwGetBuf = 0;
g_dwDrawCopyBuf = g_dwUnlockBuf = g_dwUpdatewin32 = 0;
}
else if (toupper(LOBYTE(wParam))=='5')
{
g_nINTSTEP = 16;
s_nTime = 0;
g_dwPrepareDrawPerf = g_dwDrawPerf = g_dwGetBuf = 0;
g_dwDrawCopyBuf = g_dwUnlockBuf = g_dwUpdatewin32 = 0;
}
else if (toupper(LOBYTE(wParam))=='6')
{
g_nINTSTEP = 24;
s_nTime = 0;
g_dwPrepareDrawPerf = g_dwDrawPerf = g_dwGetBuf = 0;
g_dwDrawCopyBuf = g_dwUnlockBuf = g_dwUpdatewin32 = 0;
}
else if (toupper(LOBYTE(wParam))=='7')
{
g_nINTSTEP = 32;
s_nTime = 0;
g_dwPrepareDrawPerf = g_dwDrawPerf = g_dwGetBuf = 0;
g_dwDrawCopyBuf = g_dwUnlockBuf = g_dwUpdatewin32 = 0;
}
else if (toupper(LOBYTE(wParam))=='8')
{
g_nINTSTEP = 40;
s_nTime = 0;
g_dwPrepareDrawPerf = g_dwDrawPerf = g_dwGetBuf = 0;
g_dwDrawCopyBuf = g_dwUnlockBuf = g_dwUpdatewin32 = 0;
}
else if (toupper(LOBYTE(wParam))=='Q')
{
g_bTryFaster = !g_bTryFaster;
s_cumTime = 0;
s_nTime = 0;
}
else
{
g_bSwitchAlpha = !g_bSwitchAlpha;
s_cumTime = 0;
s_nTime = 0;
}
break;
default:
return DefWindowProc(hWnd,msg,wParam,lParam);
}
return 0;
}
int WINAPI _tWinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR str,int nWinMode)
{
WNDCLASSEX wc;
memset(&wc, 0, sizeof(wc));
wc.cbSize = sizeof(WNDCLASSEX);
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC)WindowFunc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hThisInst;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH) (COLOR_WINDOW);
wc.lpszClassName = szAppName;
char szDbg[MAX_PATH];
_beginProf();
timeBeginPeriod(1);
sprintf(szDbg, "delay = %d us\n", _getProf());
g_dwPrepareDrawPerf = g_dwDrawPerf = g_dwDrawCopyBuf = g_dwGetBuf = 0;
g_dwUpdatewin32 = g_dwUnlockBuf = 0;
if(!RegisterClassEx(&wc))
{
MessageBox(NULL, _T("RegisterClassEx - failed"), _T("Error"), MB_OK | MB_ICONERROR);
return FALSE;
}
#ifdef COMPILE_WITH_TRANSPARENCY
HWND hWnd = CreateWindowEx(WS_EX_LAYERED, szAppName, wcWndName,
WS_VISIBLE | WS_POPUP, 0, 0, w, h,
NULL, NULL, hThisInst, NULL);
#else
HWND hWnd = CreateWindowEx(WS_EX_TOOLWINDOW, szAppName, wcWndName,
(WS_OVERLAPPED | WS_POPUP), 0, 0, w, h,
NULL, NULL, hThisInst, NULL);
#endif
if(!hWnd){
MessageBox(NULL, _T("CreateWindowEx - failed"), _T("Error"), MB_OK | MB_ICONERROR);
return FALSE;
}
#ifndef COMPILE_WITH_TRANSPARENCY
ShowWindow(hWnd, SW_NORMAL);
UpdateWindow(hWnd);
#endif
g_hWnd = hWnd;
MSG msg;
SetTimer(hWnd, 1, TIMER_DELAY, NULL);
while(1)
{
while (PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)){
if (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else return 0;
}
}
timeEndPeriod(1);
return (FALSE);
}