X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=contrib%2Fbobtoolz%2FDVisDrawer.cpp;h=3699a4775bf6c20ece19b6c59cab06420f83a508;hb=9dfae1c9b270ee369c6362903a9205b30751b95f;hp=c03a9262b950ff2c375b53f83df87f3a62755712;hpb=48410b113dd2036e69dbf723a39ec9af02fc9b12;p=xonotic%2Fnetradiant.git diff --git a/contrib/bobtoolz/DVisDrawer.cpp b/contrib/bobtoolz/DVisDrawer.cpp index c03a9262..3699a477 100644 --- a/contrib/bobtoolz/DVisDrawer.cpp +++ b/contrib/bobtoolz/DVisDrawer.cpp @@ -1,29 +1,37 @@ /* -BobToolz plugin for GtkRadiant -Copyright (C) 2001 Gordon Biggans + BobToolz plugin for GtkRadiant + Copyright (C) 2001 Gordon Biggans -This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Lesser General Public -License as published by the Free Software Foundation; either -version 2.1 of the License, or (at your option) any later version. + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. -This library 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 -Lesser General Public License for more details. + This library 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 + Lesser General Public License for more details. -You should have received a copy of the GNU Lesser General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ // BobView.cpp: implementation of the DVisDrawer class. // ////////////////////////////////////////////////////////////////////// -#include "StdAfx.h" -#include "DPoint.h" #include "DVisDrawer.h" + +#include "iglrender.h" +#include "math/matrix.h" + +#include +#include "str.h" + +#include "DPoint.h" +#include "DWinding.h" + #include "misc.h" #include "funchandlers.h" @@ -33,147 +41,108 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA DVisDrawer::DVisDrawer() { - refCount = 1; - m_bHooked = FALSE; - m_list = NULL; + m_list = NULL; + + constructShaders(); + GlobalShaderCache().attachRenderable(*this); } DVisDrawer::~DVisDrawer() { - if(m_bHooked) - UnRegister(); + GlobalShaderCache().detachRenderable(*this); + destroyShaders(); - g_VisView = NULL; + g_VisView = NULL; } ////////////////////////////////////////////////////////////////////// // Implementation ////////////////////////////////////////////////////////////////////// +const char *g_state_solid = "$bobtoolz/visdrawer/solid"; +const char *g_state_wireframe = "$bobtoolz/visdrawer/wireframe"; -void DVisDrawer::Draw2D(VIEWTYPE vt) +void DVisDrawer::constructShaders() { - if(!m_list) - return; - - g_QglTable.m_pfn_qglPushAttrib(GL_ALL_ATTRIB_BITS); - - g_QglTable.m_pfn_qglDisable(GL_BLEND); - g_QglTable.m_pfn_qglDisable(GL_LINE_SMOOTH); - - g_QglTable.m_pfn_qglPushMatrix(); - - switch(vt) - { - case XY: - break; - case XZ: - g_QglTable.m_pfn_qglRotatef(270.0f, 1.0f, 0.0f, 0.0f); - break; - case YZ: - g_QglTable.m_pfn_qglRotatef(270.0f, 1.0f, 0.0f, 0.0f); - g_QglTable.m_pfn_qglRotatef(270.0f, 0.0f, 0.0f, 1.0f); - break; - } - - g_QglTable.m_pfn_qglLineWidth(1.0f); - g_QglTable.m_pfn_qglColor4f(1.0f, 0.0f, 0.0f, 0.5f); - - g_QglTable.m_pfn_qglEnable(GL_BLEND); - g_QglTable.m_pfn_qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - g_QglTable.m_pfn_qglDisable(GL_POLYGON_SMOOTH); - - g_QglTable.m_pfn_qglDepthFunc(GL_ALWAYS); - - //bleh - list::const_iterator l=m_list->begin(); - - for(; l != m_list->end(); l++) - { - DWinding* w = *l; - - g_QglTable.m_pfn_qglColor4f(w->clr[0], w->clr[1], w->clr[2], 0.5f); - - g_QglTable.m_pfn_qglBegin(GL_POLYGON); - for(int i = 0; i < w->numpoints; i++) { - g_QglTable.m_pfn_qglVertex3f((w->p[i])[0], (w->p[i])[1], (w->p[i])[2]); - } - g_QglTable.m_pfn_qglEnd(); - } - - - g_QglTable.m_pfn_qglPopMatrix(); - - g_QglTable.m_pfn_qglPopAttrib(); -} + OpenGLState state; + GlobalOpenGLStateLibrary().getDefaultState(state); + state.m_state = RENDER_COLOURWRITE | RENDER_DEPTHWRITE | RENDER_COLOURCHANGE; + state.m_linewidth = 1; -void DVisDrawer::Draw3D() -{ - if(!m_list) - return; + GlobalOpenGLStateLibrary().insert(g_state_wireframe, state); - g_QglTable.m_pfn_qglPushAttrib(GL_ALL_ATTRIB_BITS); + GlobalOpenGLStateLibrary().getDefaultState(state); + state.m_state = + RENDER_FILL | RENDER_BLEND | RENDER_COLOURWRITE | RENDER_COLOURCHANGE | RENDER_SMOOTH | RENDER_DEPTHWRITE; - g_QglTable.m_pfn_qglColor4f(1.0, 0.0, 0.0, 0.5f); + GlobalOpenGLStateLibrary().insert(g_state_solid, state); -// g_QglTable.m_pfn_qglHint(GL_FOG_HINT, GL_NICEST); - -// g_QglTable.m_pfn_qglDisable(GL_CULL_FACE); - g_QglTable.m_pfn_qglDisable(GL_LINE_SMOOTH); + m_shader_solid = GlobalShaderCache().capture(g_state_solid); + m_shader_wireframe = GlobalShaderCache().capture(g_state_wireframe); +} -// g_QglTable.m_pfn_qglPolygonMode(GL_FRONT_AND_BACK, GL_FILL); -// g_QglTable.m_pfn_qglShadeModel(GL_SMOOTH); +void DVisDrawer::destroyShaders() +{ + GlobalShaderCache().release(g_state_solid); + GlobalShaderCache().release(g_state_wireframe); + GlobalOpenGLStateLibrary().erase(g_state_solid); + GlobalOpenGLStateLibrary().erase(g_state_wireframe); +} - g_QglTable.m_pfn_qglEnable(GL_BLEND); - g_QglTable.m_pfn_qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - g_QglTable.m_pfn_qglDisable(GL_POLYGON_SMOOTH); +void DVisDrawer::render(RenderStateFlags state) const +{ + //bleh + std::list::const_iterator l = m_list->begin(); - g_QglTable.m_pfn_qglDepthFunc(GL_ALWAYS); + for (; l != m_list->end(); l++) { + DWinding *w = *l; - //bleh - list::const_iterator l=m_list->begin(); + glColor4f(w->clr[0], w->clr[1], w->clr[2], 0.5f); - for(; l != m_list->end(); l++) - { - DWinding* w = *l; + glBegin(GL_POLYGON); + for (int i = 0; i < w->numpoints; i++) { + glVertex3f((w->p[i])[0], (w->p[i])[1], (w->p[i])[2]); + } + glEnd(); + } +} - g_QglTable.m_pfn_qglColor4f(w->clr[0], w->clr[1], w->clr[2], 0.5f); +void DVisDrawer::renderWireframe(Renderer &renderer, const VolumeTest &volume) const +{ + if (!m_list) { + return; + } - g_QglTable.m_pfn_qglBegin(GL_POLYGON); - for(int i = 0; i < w->numpoints; i++) { - g_QglTable.m_pfn_qglVertex3f((w->p[i])[0], (w->p[i])[1], (w->p[i])[2]); - } - g_QglTable.m_pfn_qglEnd(); - } + renderer.SetState(m_shader_wireframe, Renderer::eWireframeOnly); - g_QglTable.m_pfn_qglPopAttrib(); + renderer.addRenderable(*this, g_matrix4_identity); } -void DVisDrawer::Register() +void DVisDrawer::renderSolid(Renderer &renderer, const VolumeTest &volume) const { - g_QglTable.m_pfnHookGL2DWindow( this ); - g_QglTable.m_pfnHookGL3DWindow( this ); - m_bHooked = TRUE; -} + if (!m_list) { + return; + } -void DVisDrawer::UnRegister() -{ - g_QglTable.m_pfnUnHookGL2DWindow( this ); - g_QglTable.m_pfnUnHookGL3DWindow( this ); - m_bHooked = FALSE; + renderer.SetState(m_shader_solid, Renderer::eWireframeOnly); + renderer.SetState(m_shader_solid, Renderer::eFullMaterials); + + renderer.addRenderable(*this, g_matrix4_identity); } -void DVisDrawer::SetList(list *pointList) +void DVisDrawer::SetList(std::list *pointList) { - if(m_list) - ClearPoints(); + if (m_list) { + ClearPoints(); + } - m_list = pointList; + m_list = pointList; } void DVisDrawer::ClearPoints() { - list::const_iterator deadPoint=m_list->begin(); - for(; deadPoint!=m_list->end(); deadPoint++) - delete *deadPoint; - m_list->clear(); + std::list::const_iterator deadPoint = m_list->begin(); + for (; deadPoint != m_list->end(); deadPoint++) { + delete *deadPoint; + } + m_list->clear(); }