void Setup(CPlatform * const pPlatform) { CShader vertexShader(CShader::VERT, &pVertexShader, 1); CShader fragmentShader(CShader::FRAG, &pFragmentShader, 1); // - - - - - - - - - - //setup the shaders program.Initialise(); program.AddShader(&vertexShader); program.AddShader(&fragmentShader); program.Link(); mt = program.GetUniformLocation("mt"); // - - - - - - - - - - // setup vertex buffers etc vao = WRender::CreateVertexArrayObject(); eab = WRender::CreateBuffer(WRender::ELEMENTS, WRender::STATIC, sizeof(indices), indices); ab = WRender::CreateBuffer(WRender::ARRAY, WRender::STATIC, sizeof(vertices), vertices); WRender::BindVertexArrayObject(vao); WRender::BindBuffer(WRender::ELEMENTS, eab); WRender::VertexAttribute va[3] = { {ab, 0, 3, WRender::FLOAT, 0, sizeof(float)*6, 0, 0}, {ab, 1, 3, WRender::FLOAT, 0, sizeof(float)*6, sizeof(float)*3, 0}, }; WRender::SetAttributeFormat( va, 2, 0); program.Start(); }
void Setup(CPlatform * const pPlatform) { //for the shapes unsigned int nTorusFloats; float *pTorusVertices = 0; float *pPlaneVertices = 0; float colour[] = {1.0f,0.0f,0.0f, 0.0f,1.0f,0.0f, 0.0f,0.0f,1.0f}; unsigned int torusSegments = 36, torusTubeSegments = 36; //for the shaders const char *pVertStr[3] = {0,0,0}, *pFragStr = 0; const char *pFragTexStr = 0, *pVertTexStr = 0; //fbo stuff WRender::Texture::SDescriptor descDepth = {WRender::Texture::TEX_2D, WRender::Texture::DEPTH_COMPONENT, TEX_DIMENSIONS, TEX_DIMENSIONS, 0, 0, WRender::Texture::DONT_GEN_MIPMAP}; WRender::Texture::SParam param[] ={ { WRender::Texture::MIN_FILTER, WRender::Texture::LINEAR}, { WRender::Texture::MAG_FILTER, WRender::Texture::LINEAR}, { WRender::Texture::WRAP_S, WRender::Texture::CLAMP_TO_EDGE}, { WRender::Texture::WRAP_T, WRender::Texture::CLAMP_TO_EDGE}, }; glswInit(); glswSetPath("../resources/", ".glsl"); WRender::SetClearColour(0,0,0,0); WRender::EnableCulling(true); // - - - - - - - - - - //setup the shaders // - - - - - - - - - - //normal shader glswGetShadersAlt("shaders.Version+shaders.Shared+shaders.SingleShadow.Vertex", pVertStr, 3); pFragStr = glswGetShaders("shaders.Version+shaders.SingleShadow.Fragment"); CShader vertexShader(CShader::VERT, pVertStr, 3); CShader fragmentShader(CShader::FRAG, &pFragStr, 1); program.Initialise(); program.AddShader(&vertexShader); program.AddShader(&fragmentShader); program.Link(); uShadowMtx = program.GetUniformLocation("shadowMtx"); program.Start(); program.SetTextureUnit("shadowMap", 0); program.Stop(); //debug shader for textures in screen space pVertTexStr = glswGetShaders("shaders.Version+shaders.Dbg.ScreenSpaceTexture.Vertex"); pFragTexStr = glswGetShaders("shaders.Version+shaders.Dbg.ScreenSpaceTexture.Fragment"); CShader vTexShader(CShader::VERT, &pVertTexStr, 1); CShader fTexShader(CShader::FRAG, &pFragTexStr, 1); textureShader.Initialise(); textureShader.AddShader(&vTexShader); textureShader.AddShader(&fTexShader); textureShader.Link(); textureShader.Start(); textureShader.SetTextureUnit("texture",0); textureShader.Stop(); // - - - - - - - - - - //set up shapes // - - - - - - - - - - //shared colours abColour = WRender::CreateBuffer(WRender::ARRAY, WRender::STATIC, sizeof(colour), colour); //Torus nTorusVertices = 2*torusTubeSegments*torusSegments*3; nTorusFloats = nTorusVertices*3; pTorusVertices = new float[nTorusFloats]; CreateTorus(pTorusVertices, torusSegments, 3.0f, torusTubeSegments, 1.0f); vaoTorus = WRender::CreateVertexArrayObject(); abTorus = WRender::CreateBuffer(WRender::ARRAY, WRender::STATIC, sizeof(float)*nTorusFloats, pTorusVertices); WRender::BindVertexArrayObject(vaoTorus); WRender::VertexAttribute vaTorus[2] = { {abTorus, 0, 3, WRender::FLOAT, 0, sizeof(float)*3, 0, 0}, {abColour, 1, 3, WRender::FLOAT, 0, sizeof(float)*9, sizeof(float)*6, 1}, }; WRender::SetAttributeFormat( vaTorus, 2, 0); delete[] pTorusVertices; //Plane pPlaneVertices = new float[4*3*3]; CreatePlane(pPlaneVertices, 20.0f, 20.0f); vaoPlane = WRender::CreateVertexArrayObject(); abPlane = WRender::CreateBuffer(WRender::ARRAY, WRender::STATIC, sizeof(float)*4*3*3, pPlaneVertices); WRender::BindVertexArrayObject(vaoPlane); WRender::VertexAttribute vaFrustum[2] = { {abPlane, 0, 3, WRender::FLOAT, 0, sizeof(float)*3, 0, 0}, {abColour, 1, 3, WRender::FLOAT, 0, sizeof(float)*9, sizeof(float)*3, 1}, }; WRender::SetAttributeFormat( vaFrustum, 2, 0); delete[] pPlaneVertices; //for screen aligned texture sqVao = WRender::CreateVertexArrayObject(); sqEab = WRender::CreateBuffer(WRender::ELEMENTS, WRender::STATIC, sizeof(sqIndices), sqIndices); sqAb = WRender::CreateBuffer(WRender::ARRAY, WRender::STATIC, sizeof(sqVertices), sqVertices); WRender::BindVertexArrayObject(sqVao); WRender::BindBuffer(WRender::ELEMENTS, sqEab); WRender::VertexAttribute sqVa[2] = { {sqAb, 0, 3, WRender::FLOAT, 0, sizeof(float)*5, 0, 0}, //vertices {sqAb, 1, 2, WRender::FLOAT, 0, sizeof(float)*5, sizeof(float)*3, 0}, //texture coordinates }; WRender::SetAttributeFormat( sqVa, 2, 0); WRender::UnbindVertexArrayObject(); // - - - - - - - - - - //ubo for cameras etc // - - - - - - - - - - ubo = WRender::CreateBuffer(WRender::UNIFORM, WRender::DYNAMIC, sizeof(Transforms), &transform); WRender::BindBufferToIndex(WRender::UNIFORM, ubo, 1); //create the texture and FBO for rendering to when drawing //during shadow stage WRender::CreateBaseTexture(depthTexture, descDepth); WRender::SetTextureParams(depthTexture,param,4); WRender::CreateFrameBuffer(fbo); WRender::AddTextureRenderBuffer(fbo, depthTexture, WRender::ATT_DEPTH, 0); WRender::BindFrameBuffer(WRender::FrameBuffer::DRAW, fbo); WRender::SetDrawBuffer(WRender::DB_NONE); WRender::CheckFrameBuffer(fbo); //set the projection matrix Transform::CreateProjectionMatrix(transforms.proj, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 50.0f); WRender::BindTexture(depthTexture,WRender::Texture::UNIT_0); }
void Setup(CPlatform * const pPlatform) { int utex = 0; unsigned char * pTexture = 0; WRender::Texture::SDescriptor desc = {WRender::Texture::TEX_3D, WRender::Texture::RGB8, WIDTH, HEIGHT, DEPTH, 0, WRender::Texture::DONT_GEN_MIPMAP}; WRender::Texture::SParam param[] ={ //tex 0 { WRender::Texture::MIN_FILTER, WRender::Texture::NEAREST}, { WRender::Texture::MAG_FILTER, WRender::Texture::NEAREST}, { WRender::Texture::WRAP_S, WRender::Texture::REPEAT}, { WRender::Texture::WRAP_T, WRender::Texture::REPEAT}, // tex 1 { WRender::Texture::MIN_FILTER, WRender::Texture::LINEAR}, { WRender::Texture::MAG_FILTER, WRender::Texture::LINEAR}, { WRender::Texture::WRAP_S, WRender::Texture::REPEAT}, { WRender::Texture::WRAP_T, WRender::Texture::REPEAT}, // tex 2 { WRender::Texture::MIN_FILTER, WRender::Texture::LINEAR}, { WRender::Texture::MAG_FILTER, WRender::Texture::LINEAR}, { WRender::Texture::WRAP_S, WRender::Texture::REPEAT}, { WRender::Texture::WRAP_T, WRender::Texture::CLAMP_TO_EDGE}, // tex 3 { WRender::Texture::MIN_FILTER, WRender::Texture::LINEAR}, { WRender::Texture::MAG_FILTER, WRender::Texture::LINEAR}, { WRender::Texture::WRAP_S, WRender::Texture::CLAMP_TO_EDGE}, { WRender::Texture::WRAP_T, WRender::Texture::CLAMP_TO_EDGE}, // tex 4 { WRender::Texture::MIN_FILTER, WRender::Texture::NEAREST}, { WRender::Texture::MAG_FILTER, WRender::Texture::NEAREST}, { WRender::Texture::WRAP_S, WRender::Texture::CLAMP_TO_EDGE}, { WRender::Texture::WRAP_T, WRender::Texture::CLAMP_TO_EDGE}, }; CShader vertexShader(CShader::VERT, &pVertexShader, 1); CShader fragmentShader(CShader::FRAG, &pFragmentShader, 1); WRender::Pixel::Data pixelData = {WRender::Pixel::RGB, WRender::Pixel::UCHAR, 0, 0}; // - - - - - - - - - - // create textures pTexture = new unsigned char[WIDTH * HEIGHT * DEPTH * 3]; for(unsigned int d=0;d<DEPTH;d++) for(unsigned int h=0;h<HEIGHT;h++) for(unsigned int w=0;w<WIDTH;w++) { int depth_index = d*HEIGHT*WIDTH*3; int height_index = h*WIDTH*3; int width_index = w*3; pTexture[depth_index + height_index + width_index + 0] = (255*w)/(WIDTH); //R pTexture[depth_index + height_index + width_index + 1] = (255*h)/(HEIGHT); //G pTexture[depth_index + height_index + width_index + 2] = (255*d)/(DEPTH);//(255*(w+h))/(WIDTH+HEIGHT); //B } pixelData.pData = (void*)pTexture; WRender::ActiveTexture(WRender::Texture::UNIT_4); //tex 0 if(WRender::CreateBaseTexture(tex[0], desc)) { WRender::UpdateTextureData(tex[0], pixelData); WRender::SetTextureParams(tex[0], param, 4); } //tex 1 if(WRender::CreateBaseTextureData(tex[1], desc, pixelData)) WRender::SetTextureParams(tex[1], param+4, 4); //tex 2 if(WRender::CreateBaseTextureData(tex[2], desc, pixelData)) WRender::SetTextureParams(tex[2], param+8, 4); //tex 3 if(WRender::CreateBaseTextureData(tex[3], desc, pixelData)) WRender::SetTextureParams(tex[3], param+12, 4); //tex 4 if(WRender::CreateBaseTextureData(tex[4], desc, pixelData)) WRender::SetTextureParams(tex[4], param+16, 4); delete [] pTexture; // - - - - - - - - - - //setup the shaders program.Initialise(); program.AddShader(&vertexShader); program.AddShader(&fragmentShader); program.Link(); utex = program.GetUniformLocation("tex"); // - - - - - - - - - - // setup vertex buffers etc vao = WRender::CreateVertexArrayObject(); eab = WRender::CreateBuffer(WRender::ELEMENTS, WRender::STATIC, sizeof(indices), indices); ab = WRender::CreateBuffer(WRender::ARRAY, WRender::STATIC, sizeof(vertices), vertices); WRender::BindVertexArrayObject(vao); WRender::BindBuffer(WRender::ELEMENTS, eab); WRender::VertexAttribute va[] = { {ab, 0, 3, WRender::FLOAT, 0, sizeof(float)*5, 0, 0}, {ab, 3, 2, WRender::FLOAT, 0, sizeof(float)*5, sizeof(float)*3, 0} }; WRender::SetAttributeFormat( va, 2, 0); program.Start(); //program.SetTextureUnit(utex, 4); glEnable(GL_CULL_FACE); WRender::BindTexture(tex[activeTexture]); }