Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //http://www.youtube.com/user/thecplusplusguy
- #include <iostream>
- #include <SDL/SDL.h>
- #include <SDL/SDL_image.h>
- #include "GLee.h"
- #include <GL/gl.h>
- #include <GL/glu.h>
- #include "camera.h"
- #include <vector>
- #include <string>
- #include <fstream>
- camera cam;
- //data->vertex->fragment
- unsigned int loadTexture(const char* name)
- {
- SDL_Surface* img=IMG_Load(name);
- SDL_PixelFormat form={NULL,32,4,0,0,0,0,8,8,8,8,0xff000000,0x00ff0000,0x0000ff00,0x000000ff,0,255};
- SDL_Surface* img2=SDL_ConvertSurface(img,&form,SDL_SWSURFACE);
- unsigned int texture;
- glGenTextures(1,&texture);
- glBindTexture(GL_TEXTURE_2D,texture);
- glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,img2->w,img2->h,0,GL_RGBA, GL_UNSIGNED_INT_8_8_8_8,img2->pixels);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
- SDL_FreeSurface(img);
- SDL_FreeSurface(img2);
- return texture;
- }
- void loadFile(const char* fn,std::string& str)
- {
- std::ifstream in(fn);
- if(!in.is_open())
- {
- std::cout << "The file " << fn << " cannot be opened\n";
- return;
- }
- char tmp[300];
- while(!in.eof())
- {
- in.getline(tmp,300);
- str+=tmp;
- str+='\n';
- }
- }
- unsigned int loadShader(std::string& source,unsigned int mode)
- {
- unsigned int id;
- id=glCreateShader(mode);
- const char* csource=source.c_str();
- glShaderSource(id,1,&csource,NULL);
- glCompileShader(id);
- char error[1000];
- glGetShaderInfoLog(id,1000,NULL,error);
- std::cout << "Compile status: \n" << error << std::endl;
- return id;
- }
- unsigned int vs,fs,program;
- void initShader(const char* vname,const char* fname)
- {
- std::string source;
- loadFile(vname,source);
- vs=loadShader(source,GL_VERTEX_SHADER);
- source="";
- loadFile(fname,source);
- fs=loadShader(source,GL_FRAGMENT_SHADER);
- program=glCreateProgram();
- glAttachShader(program,vs);
- glAttachShader(program,fs);
- glLinkProgram(program);
- glUseProgram(program);
- }
- void clean()
- {
- glDetachShader(program,vs);
- glDetachShader(program,fs);
- glDeleteShader(vs);
- glDeleteShader(fs);
- glDeleteProgram(program);
- }
- unsigned int buffer;
- unsigned int img;
- void init()
- {
- glClearColor(0,0,0,1);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluPerspective(50,640.0/480.0,1,1000);
- glMatrixMode(GL_MODELVIEW);
- glEnable(GL_DEPTH_TEST);
- initShader("vertex.vs","fragment.frag");
- float tri[]={-2,2,-4,1,0,0,0,1,
- -2,-2,-4,0,1,0,0,0,
- 2,-2,-4,0,0,1,1,0,
- 2,2,-4,0,0,1,1,1};
- glGenBuffers(1,&buffer);
- glBindBuffer(GL_ARRAY_BUFFER,buffer);
- glBufferData(GL_ARRAY_BUFFER,sizeof(tri),tri,GL_STATIC_DRAW);
- glActiveTexture(GL_TEXTURE0);
- img=loadTexture("img.jpg");
- }
- void display()
- {
- glLoadIdentity();
- glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
- cam.Control();
- cam.UpdateCamera();
- glUniform3f(glGetUniformLocation(program,"color"),0.6,1.0,0.4);
- int index1=glGetAttribLocation(program,"vertex");
- int index2=glGetAttribLocation(program,"inputcolor");
- int index3=glGetAttribLocation(program,"inputcolor2");
- glBindTexture(GL_TEXTURE_2D,img);
- glUniform1i(glGetUniformLocation(program,"img"),0);
- glEnableVertexAttribArray(index1);
- glVertexAttribPointer(index1,3,GL_FLOAT,GL_FALSE,8*sizeof(float),0);
- glEnableVertexAttribArray(index2);
- glVertexAttribPointer(index2,3,GL_FLOAT,GL_FALSE,8*sizeof(float),(void*)(3*sizeof(float)));
- glEnableVertexAttribArray(index3);
- glVertexAttribPointer(index3,2,GL_FLOAT,GL_FALSE,8*sizeof(float),(void*)(6*sizeof(float)));
- glDrawArrays(GL_QUADS,0,4);
- }
- int main()
- {
- SDL_Init(SDL_INIT_EVERYTHING);
- SDL_SetVideoMode(640,480,32,SDL_OPENGL);
- Uint32 start;
- SDL_Event event;
- bool running=true;
- init();
- bool b=false;
- while(running)
- {
- start=SDL_GetTicks();
- while(SDL_PollEvent(&event))
- {
- switch(event.type)
- {
- case SDL_QUIT:
- running=false;
- break;
- case SDL_KEYDOWN:
- switch(event.key.keysym.sym)
- {
- case SDLK_ESCAPE:
- running=false;
- break;
- }
- break;
- case SDL_MOUSEBUTTONDOWN:
- cam.mouseIn(true);
- break;
- }
- }
- display();
- SDL_GL_SwapBuffers();
- if(1000.0/30>SDL_GetTicks()-start)
- SDL_Delay(1000.0/30-(SDL_GetTicks()-start));
- }
- clean();
- SDL_Quit();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement