VR-Forces 4.0.4 Class Documentation
include/vrvGraphics/DtEffectRenderer.h
Go to the documentation of this file.
00001 /******************************************************************************
00002 ** Copyright (c) 2010 MAK Technologies, Inc.
00003 ** All rights reserved.
00004 ******************************************************************************/
00005 
00009 
00010 #pragma once
00011 
00012 #include <vrvGraphics/DtFormatRenderer.h>
00013 #include <vrvGraphics/DtEffect.h>
00014 
00015 namespace makVrv
00016 {
00017    template <typename MemberType>
00018    struct DtAttributeType;
00019 
00020    template <>
00021    struct DtAttributeType<float>
00022    {
00023       enum { size = 1 };
00024       enum { value = GL_FLOAT };
00025    };
00026    template <>
00027    struct DtAttributeType<float[2]>
00028    {
00029       enum { size = 2 };
00030       enum { value = GL_FLOAT };
00031    };
00032    template <>
00033    struct DtAttributeType<float[3]>
00034    {
00035       enum { size = 3 };
00036       enum { value = GL_FLOAT };
00037    };
00038    template <>
00039    struct DtAttributeType<float[4]>
00040    {
00041       enum { size = 4 };
00042       enum { value = GL_FLOAT };
00043    };
00044 
00045    template <>
00046    struct DtAttributeType<int>
00047    {
00048       enum { size = 1 };
00049       enum { value = GL_INT };
00050    };
00051    template <>
00052    struct DtAttributeType<int[2]>
00053    {
00054       enum { size = 2 };
00055       enum { value = GL_INT };
00056    };
00057    template <>
00058    struct DtAttributeType<int[3]>
00059    {
00060       enum { size = 3 };
00061       enum { value = GL_INT };
00062    };
00063    template <>
00064    struct DtAttributeType<int[4]>
00065    {
00066       enum { size = 4 };
00067       enum { value = GL_INT };
00068    };
00069 
00070    template <>
00071    struct DtAttributeType<unsigned int>
00072    {
00073       enum { size = 1 };
00074       enum { value = GL_UNSIGNED_INT };
00075    };
00076    template <>
00077    struct DtAttributeType<unsigned int[2]>
00078    {
00079       enum { size = 2 };
00080       enum { value = GL_UNSIGNED_INT };
00081    };
00082    template <>
00083    struct DtAttributeType<unsigned int[3]>
00084    {
00085       enum { size = 3 };
00086       enum { value = GL_UNSIGNED_INT };
00087    };
00088    template <>
00089    struct DtAttributeType<unsigned int[4]>
00090    {
00091       enum { size = 4 };
00092       enum { value = GL_UNSIGNED_INT };
00093    };  
00094 
00095    class DtEffect;
00096    template <typename VertexFormat> 
00097    class DtEffectRenderer : public DtFormatRenderer<VertexFormat>
00098    {
00099    public:
00100 
00101       template <typename MemberType>
00102       static DtEffect::VaryingAttributeAddress VaryingAttribute(
00103          const VertexFormat* base, const MemberType VertexFormat::* member)
00104       {
00105          return DtEffect::VaryingAttributeAddress(
00106             reinterpret_cast<const GLvoid*>(&(base->*member)),
00107             DtAttributeType<MemberType>::value,
00108             DtAttributeType<MemberType>::size);
00109       }
00110 
00111       DtEffectRenderer(DtEffect* effect)
00112       : myEffect(effect)
00113       {
00114          myEffect->enable();
00115       }
00116 
00117       virtual ~DtEffectRenderer()
00118       {  
00119          if(myEffect->enabled())
00120          {
00121             myEffect->disable();
00122          }
00123       }
00124 
00125    protected:
00126       DtEffect* myEffect;
00127    };
00128 }
00129 

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)