#pragma comment(linker, "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")
#include <GL/freeglut/freeglut.h>
#include "lodepng.h"
#define WIDTH 320
#define HEIGHT 240
float alpha = 0.0f;
//サイズ用構造体
struct SizeRECT{
int x;
int y;
int width;
int height;
};
GLuint texture;
//サイズセット
void SetSizeRECT(SizeRECT* rect, int a,int b,int c,int d)
{
rect->x=a;rect->y=b;rect->width=c;rect->height=d;
}
void Draw()
{
glEnable(GL_BLEND);
glEnable( GL_TEXTURE_2D );
glBindTexture( GL_TEXTURE_2D, texture );
glAlphaFunc(GL_GREATER, alpha);
glEnable(GL_ALPHA_TEST);//アルファテスト開始
glBegin(GL_POLYGON);
glTexCoord2f(0.0f, 1.0f); glVertex2d(10 , 230);//左下
glTexCoord2f(0.0f, 0.0f); glVertex2d(10 , 10);//左上
glTexCoord2f(1.0f, 0.0f); glVertex2d( 310 , 10);//右上
glTexCoord2f(1.0f, 1.0f); glVertex2d( 310 , 230);//右下
glEnd();
glDisable(GL_ALPHA_TEST);//アルファテスト終了
glDisable( GL_TEXTURE_2D );
glDisable(GL_BLEND);
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glOrtho(0.0, WIDTH, HEIGHT, 0.0, -1.0, 1.0);
Draw();
glutSwapBuffers();
}
void idle(void)
{
alpha+=0.002f;
if(alpha>1.0f)alpha=0.0f;
Sleep(1);
glutPostRedisplay();
}
void Init(){
glClearColor(0.5, 0.5, 0.5, 1.0);
glOrtho(0, WIDTH, HEIGHT, 0, -1, 1);
LodePNG_Decoder decoder;
LodePNG_Decoder_init(&decoder);
unsigned char* buffer;
unsigned char* image;
size_t buffersize, imagesize;
//ロード
LodePNG_loadFile(&buffer, &buffersize, "test.png");
//デコード
LodePNG_decode(&decoder, &image, &imagesize, buffer,
buffersize);
//幅,高さ
int width = decoder.infoPng.width; int height = decoder.infoPng.height;
glGenTextures(1, (GLuint *)&texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glEnable( GL_TEXTURE_2D );
glBindTexture( GL_TEXTURE_2D, texture );
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,width, height, 0,GL_RGBA,
GL_UNSIGNED_BYTE, image);
glDisable( GL_TEXTURE_2D );
}
int main(int argc, char *argv[])
{
glutInitWindowPosition(100, 100);
glutInitWindowSize(WIDTH, HEIGHT);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
glutCreateWindow("アルファテスト");
glutDisplayFunc(display);
glutIdleFunc(idle);
Init();
glutMainLoop();
return 0;
}
|