#pragma comment(lib, "glut32.lib")
#include "glut.h"
#include <stdio.h>
#define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047
#define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048
#define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049
#define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A
#define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B
void PrintVideoMemory()
{
static GLint evicted=0;
GLint vidmem=0, mem_available=0, vidmem_available=0, evicted_count=0, evicted_size=0;
glGetIntegerv(GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX, &vidmem);
glGetIntegerv(GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX, &mem_available);
glGetIntegerv(GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX, &vidmem_available);
glGetIntegerv(GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX, &evicted_count);
glGetIntegerv(GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX, &evicted_size);
if (evicted!=evicted_count)
{
printf("evicted_count=%d, evicted_size=%dkb, vidmem_available=%dkb\n",
evicted_count, evicted_size, vidmem_available);
evicted=evicted_count;
}
}
void renderScene(void)
{
static bool flip=true;
flip=!flip;
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glVertex3f(-0.5,-0.5,0.0);
glVertex3f(0.5,0.0,0.0);
glVertex3f(0.0,0.5,0.0);
glEnd();
glutSwapBuffers();
PrintVideoMemory();
if (flip)
glutReshapeWindow(300,200);
else
glutReshapeWindow(300,300);
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE );
glutInitWindowPosition(100,100);
glutInitWindowSize(100,100);
glutCreateWindow("resoource leak provoker");
glutHideWindow(); //comment this to make the leak disappear
glutDisplayFunc(&renderScene);
glutIdleFunc(&renderScene);
glutMainLoop();
return 0;
}