void init(float winwidth, float winheight, float pixratio) { const Vector4 bgcolor = {0.937, 0.937, 0.93, 1.00}; parg_state_clearcolor(bgcolor); parg_state_cullfaces(1); parg_state_depthtest(1); parg_shader_load_from_asset(SHADER_SIMPLE); int* rawdata; colorbuf = parg_buffer_slurp_asset(TEXTURE_COLOR, (void*) &rawdata); int width = *rawdata++; int height = *rawdata++; int ncomps = *rawdata++; parg_buffer_unlock(colorbuf); colortex = parg_texture_from_u8(colorbuf, width, height, ncomps, 3 * sizeof(int)); graybuf = parg_buffer_from_asset(BIN_ISLAND); graytex = parg_texture_from_fp32(graybuf, IMGWIDTH, IMGHEIGHT, 1, 0); const float h = 1.5f; const float w = h * winwidth / winheight; const float znear = 10; const float zfar = 90; projection = M4MakeFrustum(-w, w, -h, h, znear, zfar); Point3 eye = {0, -50, 50}; Point3 target = {0, 0, 0}; Vector3 up = {0, 1, 0}; view = M4MakeLookAt(eye, target, up); rectmesh = parg_mesh_rectangle(20, 20); }
const char* PezInitialize(int width, int height) { BuddhaMesh = CreateMesh("buddha.ctm"); QuadVbo = CreateQuad(-1, -1, 1, 1); #ifdef LIGHTING DepthProgram = CreateProgram("Glass.Vertex", "Glass.Fragment.Lighting" SUFFIX); AbsorptionProgram = CreateProgram("Glass.Vertex.Quad", "Glass.Fragment.Blit" SUFFIX); #else DepthProgram = CreateProgram("Glass.Vertex", "Glass.Fragment.Depth" SUFFIX); AbsorptionProgram = CreateProgram("Glass.Vertex.Quad", "Glass.Fragment.Absorption" SUFFIX); #endif // Create a floating-point render target: GLuint textureHandle; glGenTextures(1, &textureHandle); glBindTexture(GL_TEXTURE_2D, textureHandle); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); #ifdef LIGHTING glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 768, 1024, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); #elif defined(__IPAD__) glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 768, 1024, 0, GL_LUMINANCE, GL_HALF_FLOAT_OES, 0); #else glTexImage2D(GL_TEXTURE_2D, 0, GL_RG16F, 768, 1024, 0, GL_RG, GL_FLOAT, 0); #endif PezCheckCondition(GL_NO_ERROR == glGetError(), "This passes on Mac OS X and iOS."); OffscreenTexture = textureHandle; GLuint fboHandle; glGenFramebuffers(1, &fboHandle); glBindFramebuffer(GL_FRAMEBUFFER, fboHandle); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureHandle, 0); #ifdef LIGHTING GLuint depthRenderbuffer; glGenRenderbuffers(1, &depthRenderbuffer); glBindRenderbuffer(GL_RENDERBUFFER, depthRenderbuffer); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, width, height); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthRenderbuffer); #endif PezCheckCondition(GL_FRAMEBUFFER_COMPLETE == glCheckFramebufferStatus(GL_FRAMEBUFFER), "This asserts on iOS and passes on Mac OS X."); OffscreenFbo = fboHandle; glBindFramebuffer(GL_FRAMEBUFFER, 0); glBindRenderbuffer(GL_RENDERBUFFER, 0); // Set up the projection matrix: const float HalfWidth = 0.5; const float HalfHeight = HalfWidth * PEZ_VIEWPORT_HEIGHT / PEZ_VIEWPORT_WIDTH; ProjectionMatrix = M4MakeFrustum(-HalfWidth, +HalfWidth, -HalfHeight, +HalfHeight, 5, 20); return "Glass Demo"; }
void PezUpdate(float seconds) { // Create the model-view matrix: Point3 eye = P3MakeFromElems(EyeVector[0] * EyeScale, EyeVector[1] * EyeScale, EyeVector[2] * EyeScale); Point3 target = P3MakeFromElems(TargetVector[0] * TargetScale, TargetVector[1] * TargetScale, TargetVector[2] * TargetScale); Vector3 up = V3MakeFromElems(0, 1, 0); Scene.ViewMatrix = M4MakeLookAt(eye, target, up); PezConfig cfg = PezGetConfig(); const float h = 5.0f; const float w = h * cfg.Width / cfg.Height; const float hither = 5; const float yon = 200; Scene.Projection = M4MakeFrustum(-w, w, -h, h, hither, yon); }
void init(float winwidth, float winheight, float pixratio) { resolution = pixratio * winwidth; par_shapes_mesh* shape; shape = par_shapes_create_cylinder(30, 3); float axis[3] = {1, 0, 0}; par_shapes_rotate(shape, PARG_PI * 0.5, axis); cylinder = parg_mesh_from_shape(shape); par_shapes_free_mesh(shape); shape = par_shapes_create_plane(3, 3); par_shapes_scale(shape, 4, 4, 1); par_shapes_translate(shape, -2, -2, -1); backdrop = parg_mesh_from_shape(shape); par_shapes_free_mesh(shape); kleingeo = parg_mesh_from_asset(M_KLEIN); parg_mesh_send_to_gpu(kleingeo); kleintex = parg_texture_from_asset_linear(T_KLEIN); abstract = parg_texture_from_asset(T_ABSTRACT); logo = parg_texture_from_asset(T_LOGO); rust = parg_texture_from_asset(T_RUST); billboard = parg_mesh_rectangle(1, 1); reflection = parg_framebuffer_create_empty( 512, 512, PARG_FBO_LINEAR | PARG_FBO_ALPHA | PARG_FBO_DEPTH); const Vector4 transparent = {0, 0, 0, 0}; parg_state_clearcolor(transparent); parg_state_depthtest(1); parg_state_cullfaces(1); parg_shader_load_from_asset(S_SIMPLE); const float h = 1.0f; const float w = h * winwidth / winheight; const float znear = 4; const float zfar = 20; projection = M4MakeFrustum(-w, w, -h, h, znear, zfar); Point3 eye = {0, 1.8, 5}; Point3 target = {0, 0.7, 0}; Vector3 up = {0, 1, 0}; view = M4MakeLookAt(eye, target, up); model = M4MakeIdentity(); }
const char* PezInitialize(int width, int height) { TessLevel = 10.0; TessLevelOuter = 7; // CreateIcosahedron(); // CreateCube(); //CreateObject(); CreateModel(); LoadEffect(); Uniforms.Projection = glGetUniformLocation(ProgramHandle, "Projection"); Uniforms.Modelview = glGetUniformLocation(ProgramHandle, "Modelview"); Uniforms.NormalMatrix = glGetUniformLocation(ProgramHandle, "NormalMatrix"); Uniforms.LightPosition = glGetUniformLocation(ProgramHandle, "LightPosition"); Uniforms.AmbientMaterial = glGetUniformLocation(ProgramHandle, "AmbientMaterial"); Uniforms.DiffuseMaterial = glGetUniformLocation(ProgramHandle, "DiffuseMaterial"); Uniforms.TessLevel = glGetUniformLocation(ProgramHandle, "TessLevel"); Uniforms.TessLevelOuter = glGetUniformLocation(ProgramHandle, "TessLevelOuter"); Uniforms.NormalModel = glGetUniformLocation(ProgramHandle, "NormalModel"); Uniforms.Tesselation = glGetUniformLocation(ProgramHandle, "Tesselation"); Uniforms.Wireframe = glGetUniformLocation(ProgramHandle, "Wireframe"); Uniforms.Tagg = glGetUniformLocation(ProgramHandle, "Tagg"); Uniforms.ColNorm = glGetUniformLocation(ProgramHandle, "ColNorm"); Uniforms.DCol = glGetUniformLocation(ProgramHandle, "DCol"); // Set up the projection matrix: const float HalfWidth = 0.6f; const float HalfHeight = HalfWidth * PEZ_VIEWPORT_HEIGHT / PEZ_VIEWPORT_WIDTH; ProjectionMatrix = M4MakeFrustum(-HalfWidth, +HalfWidth, -HalfHeight, +HalfHeight, 5, 150); // Initialize various state: glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glClearColor(0.7f, 0.6f, 0.5f, 1.0f); return "Tessellation Demo"; }