#pragma comment(linker, "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")
#include <GL/freeglut/freeglut.h>
#include <stdio.h>
#include <string>
#include "lodepng.h"
using namespace std;
#define WIDTH 320
#define HEIGHT 240
GLuint Tex[2];
void Draw(float x,float y,float w,float h)
{
glEnable(GL_ALPHA_TEST);//アルファテスト開始
glBegin(GL_POLYGON);
glTexCoord2f(0.f, 0.f); glVertex2f(x,y);
glTexCoord2f(0.2f, 0.f); glVertex2f(x+w,y);
glTexCoord2f(0.2f, 0.2f); glVertex2f(x+w,y+h);
glTexCoord2f(0.f, 0.2f); glVertex2f(x,y+h);
glEnd();
glDisable(GL_ALPHA_TEST);//アルファテスト終了
}
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);
glEnable( GL_TEXTURE_2D );
glBindTexture( GL_TEXTURE_2D, Tex[0] );
//元画像
Draw(10,10,128,128);
glBindTexture( GL_TEXTURE_2D, Tex[1] );
//バイリニアフィルタリング
Draw(160,10,128,128);
glDisable( GL_TEXTURE_2D );
glutSwapBuffers();
}
void idle(void)
{
glutPostRedisplay();
}
void Init(){
glClearColor(0.0, 0.0, 0.0, 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, "maptip.png");
//デコード
LodePNG_decode(&decoder, &image, &imagesize, buffer,
buffersize);
//幅,高さ
int width = decoder.infoPng.width; int height = decoder.infoPng.height;
glGenTextures(2, (GLuint *)&Tex);
glEnable( GL_TEXTURE_2D );
glBindTexture(GL_TEXTURE_2D, Tex[0]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glBindTexture( GL_TEXTURE_2D, Tex[0] );
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,width, height, 0,GL_RGBA,
GL_UNSIGNED_BYTE, image);
glBindTexture(GL_TEXTURE_2D, Tex[1]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glBindTexture( GL_TEXTURE_2D, Tex[1] );
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;
}
|