diff options
author | Hans-Christoph Steiner <eighthave@users.sourceforge.net> | 2005-12-15 07:26:47 +0000 |
---|---|---|
committer | Hans-Christoph Steiner <eighthave@users.sourceforge.net> | 2005-12-15 07:26:47 +0000 |
commit | 37b6643df2df7d784a31ca73f7bb90dc109c2401 (patch) | |
tree | a8664e5adcfcb60cae136063d627549ecb76619b /opengl/system/pdp_3Dcontext_common.c | |
parent | c50ce0e0217ea07e2d450add2ab29cecea66fa96 (diff) |
removing PDP source (except debian files) before import of PDP 0.12.4
svn path=/trunk/externals/pdp/; revision=4217
Diffstat (limited to 'opengl/system/pdp_3Dcontext_common.c')
-rw-r--r-- | opengl/system/pdp_3Dcontext_common.c | 267 |
1 files changed, 0 insertions, 267 deletions
diff --git a/opengl/system/pdp_3Dcontext_common.c b/opengl/system/pdp_3Dcontext_common.c deleted file mode 100644 index 185e2be..0000000 --- a/opengl/system/pdp_3Dcontext_common.c +++ /dev/null @@ -1,267 +0,0 @@ - -/* - * OpenGL Extension Module for pdp - pbuffer packet implementation - * Copyright (c) by Tom Schouten <pdp@zzz.kotnet.org> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -/* - this code uses glx. i don't know if it is worth to take into - account portabiliy. since it will take a while until pdp runs - on anything else than linux. but in any case, providing a windows/osx - implementation here should not be too difficult.. -*/ - -#include "pdp_3Dcontext.h" -#include <GL/gl.h> -//#include <GL/glx.h> -#include <GL/glu.h> -//#include <GL/glut.h> - -#define D if (0) - -/* constructor */ - -/* pbuf operators */ - -u32 pdp_packet_3Dcontext_width(int packet) -{ - t_3Dcontext *c = pdp_packet_3Dcontext_info(packet); - if (c) return c->width; - else return 0; -} - -u32 pdp_packet_3Dcontext_height(int packet) -{ - t_3Dcontext *c = pdp_packet_3Dcontext_info(packet); - if (c) return c->height; - else return 0; -} - -u32 pdp_packet_3Dcontext_subwidth(int packet) -{ - t_3Dcontext *c = pdp_packet_3Dcontext_info(packet); - if (c) return c->sub_width; - else return 0; -} - - -u32 pdp_packet_3Dcontext_subheight(int packet) -{ - t_3Dcontext *c = pdp_packet_3Dcontext_info(packet); - if (c) return c->sub_height; - else return 0; -} - - -void pdp_packet_3Dcontext_set_subwidth(int packet, u32 w) -{ - t_3Dcontext *c = pdp_packet_3Dcontext_info(packet); - if (c) c->sub_width = w; -} - - -void pdp_packet_3Dcontext_set_subheight(int packet, u32 h) -{ - t_3Dcontext *c = pdp_packet_3Dcontext_info(packet); - if (c) c->sub_height = h; -} - - -float pdp_packet_3Dcontext_subaspect(int packet) -{ - t_3Dcontext *c = pdp_packet_3Dcontext_info(packet); - if (c) return (float)c->sub_width/c->sub_height; - else return 0; -} - -int pdp_packet_3Dcontext_isvalid(int packet) -{ - t_pdp *header = pdp_packet_header(packet); - t_3Dcontext *c = pdp_packet_3Dcontext_info(packet); - - if (!header) return 0; - if (!c) return 0; - if (PDP_3DCONTEXT != header->type) return 0; - return 1; -} - -t_3Dcontext *pdp_packet_3Dcontext_info(int packet) -{ - t_pdp *header = pdp_packet_header(packet); - if (!header) return 0; - if (PDP_3DCONTEXT != header->type) return 0; - return (t_3Dcontext *)&header->info.raw; -} - - - -void pdp_llconv_flip_top_bottom(char *data, int width, int height, int pixelsize); - -int pdp_packet_3Dcontext_snap_to_bitmap(int packet, int w, int h) -{ - int x, y, new_p, i; - char *data = 0; - // char r; - // int extra = 5; - - if (!pdp_packet_3Dcontext_isvalid(packet)) goto error; - - x = pdp_packet_3Dcontext_subwidth(packet); - y = pdp_packet_3Dcontext_subheight(packet); - - x = (x - w) >> 1; - y = (y - h) >> 1; - x = (x < 0 ) ? 0 : x; - y = (y < 0 ) ? 0 : y; - - new_p = pdp_packet_new_bitmap_rgb(w, h); - data = (char *)pdp_packet_data(new_p); - if (-1 == new_p || !data) goto error; - pdp_packet_3Dcontext_set_rendering_context(packet); - - // D post("BEGIN READPIXELS %d %d %d %d %x", w, h, x, y, data); - - //for (i=0; i<w*h; i++){ - // data[3*i] = 255; - // data[3*i+1] = 255; - // data[3*i+2] = 0; - //} - // r = random(); - // data[w*h*3] = r; - - /* seems nvidia drivers 4191 have a bug - when w % 4 is not zero */ - glReadPixels(x,y, w ,h,GL_RGB,GL_UNSIGNED_BYTE, data); - - /* inplace swap top to bottom (textures and buffers have - another coordinate system than standard images) - instead of fixing this by using a different texture coordinate - system, a memory swap is performed. this is more expensive - but eliminates hassle when converting between buffers, textures - and bitmaps */ - - pdp_llconv_flip_top_bottom(data, w, h, 3); - - // if (r != data[w*h*3]) post("PANIC"); - - // post("END READPIXELS %d %d", w, h); - - - return new_p; - - error: - return -1; - -} - - - - -/* move these to the pdp_3d_context object: they're too specific */ - -/* setup for 2d operation from pbuf dimensions */ -void pdp_packet_3Dcontext_setup_2d_context(int p) -{ - u32 w; - u32 h; - float asp; - if (!pdp_packet_3Dcontext_isvalid(p)) return; - w = pdp_packet_3Dcontext_subwidth(p); - h = pdp_packet_3Dcontext_subheight(p); - asp = pdp_packet_3Dcontext_subaspect(p); - - - /* set the viewport to the size of the sub frame */ - glViewport(0, 0, w, h); - - /* set orthogonal projection, with a relative frame size of (2asp x 2) */ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - gluOrtho2D(0, 2*asp, 0, 2); - - /* set the center of view */ - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(asp, 1, 0); - glScalef(1,-1,1); - - -} - -/* setup for 3d operation from pbuf dimensions */ -void pdp_packet_3Dcontext_setup_3d_context(int p) -{ - u32 w; - u32 h; - int i; - float asp; - float m_perspect[] = {-1.f, /* left */ - 1.f, /* right */ - -1.f, /* bottom */ - 1.f, /* top */ - 1.f, /* front */ - 20.f};/* back */ - - if (!pdp_packet_3Dcontext_isvalid(p)) return; - w = pdp_packet_3Dcontext_subwidth(p); - h = pdp_packet_3Dcontext_subheight(p); - asp = pdp_packet_3Dcontext_subaspect(p); - - - /* set the viewport to the size of the sub frame */ - glViewport(0, 0, w, h); - - /* set orthogonal projection, with a relative frame size of (2asp x 2) */ - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(m_perspect[0] * asp, m_perspect[1] * asp, // left, right - m_perspect[2], m_perspect[3], // bottom, top - m_perspect[4], m_perspect[5]); // front, back - - /* reset texture matrix */ - glMatrixMode(GL_TEXTURE); - glLoadIdentity(); - - - /* set the center of view */ - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - gluLookAt(0, 0, 4, 0, 0, 0, 0, 1, 0); - //glTranslatef(asp, 1, 0); - - - glEnable(GL_DEPTH_TEST); - glEnable(GL_AUTO_NORMAL); - glEnable(GL_NORMALIZE); - glShadeModel(GL_SMOOTH); - //glShadeModel(GL_FLAT); - - - /* disable everything that is enabled in other modules - this resets the ogl state to its initial conditions */ - glDisable(GL_LIGHTING); - for (i=0; i<8; i++) glDisable(GL_LIGHT0 + i); - glDisable(GL_COLOR_MATERIAL); - - -} - - -void pdp_3Dcontext_common_setup(void) -{ -} |