Changeset 2592


Ignore:
Timestamp:
Mar 14, 2013, 10:43:40 PM (10 years ago)
Author:
touky
Message:

Added FrameBufferFormat struct : a wrapper for RenderTarget-format. NOT TESTED on PS3 & DirectX. Default values are the same as previous code, though.

Location:
trunk/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/gpu/framebuffer.cpp

    r2591 r2592  
    5656
    5757//
     58// The FrameBufferFormat struct
     59// ----------------------
     60//
     61
     62uint32_t FrameBufferFormat::GetFormat()
     63{
     64    switch (m_format)
     65    {
     66#if defined USE_D3D9 || defined _XBOX
     67        case R_16_F:        return D3DFMT_R16F;
     68        case R_32_F:        return D3DFMT_R32F;
     69        case RG_16:         
     70        case RG_16_I:       
     71        case RG_16_UI:      return D3DFMT_G16R16;
     72        case RG_16_F:       return D3DFMT_G16R16F;
     73        case RG_32_F:       return D3DFMT_G32R32F;
     74        case RGB_8:         
     75        case RGB_8_I:       
     76        case RGB_8_UI:      return D3DFMT_R8G8B8;
     77        case RGBA_8:       
     78        case RGBA_8_I:     
     79        case RGBA_8_UI:     return D3DFMT_A8R8G8B8;
     80        case RGBA_16:       
     81        case RGBA_16_I:     
     82        case RGBA_16_UI:    return D3DFMT_A16B16G16R16;
     83        case RGBA_16_F:     return D3DFMT_A16B16G16R16F;
     84        case RGBA_32_F:     return D3DFMT_A32B32G32R32F;
     85
     86        default:            ASSERT(0, "Not supported by DirectX.");
     87#else
     88#   if defined __CELLOS_LV2__
     89    /* Supported drawable formats on the PS3: GL_ARGB_SCE, GL_RGB16F_ARB,
     90     * GL_RGBA16F_ARB, GL_RGB32F_ARB, GL_RGBA32F_ARB, GL_LUMINANCE32F_ARB. */
     91        case RGB_16_F:      return GL_RGB16F_ARB;
     92        case RGB_32_F:      return GL_RGB32F_ARB;
     93        case RGBA_8:        return GL_ARGB_SCE;
     94        case RGBA_16_F:     return GL_RGBA16F_ARB;
     95        case RGBA_32_F:     return GL_RGBA32F_ARB;
     96
     97        default:            ASSERT(0, "Not supported by the PS3.");
     98#   else
     99        case R_8:           return GL_R8;
     100        case R_8_I:         return GL_R8I;
     101        case R_8_UI:        return GL_R8UI;
     102
     103        case R_16:          return GL_R16;
     104        case R_16_I:        return GL_R16I;
     105        case R_16_UI:       return GL_R16UI;
     106        case R_16_F:        return GL_R16F;
     107
     108        case R_32_I:        return GL_R32I;
     109        case R_32_UI:       return GL_R32UI;
     110        case R_32_F:        return GL_R32F;
     111
     112        case RG_8:          return GL_RG8;
     113        case RG_8_I:        return GL_RG8I;
     114        case RG_8_UI:       return GL_RG8UI;
     115
     116        case RG_16:         return GL_RG16;
     117        case RG_16_I:       return GL_RG16I;
     118        case RG_16_UI:      return GL_RG16UI;
     119        case RG_16_F:       return GL_RG16F;
     120
     121        case RG_32_I:       return GL_RG32I;
     122        case RG_32_UI:      return GL_RG32UI;
     123        case RG_32_F:       return GL_RG32F;
     124
     125        case RGB_8:         return GL_RGB8;
     126        case RGB_8_I:       return GL_RGB8I;
     127        case RGB_8_UI:      return GL_RGB8UI;
     128
     129        case RGB_16:        return GL_RGB16;
     130        case RGB_16_I:      return GL_RGB16I;
     131        case RGB_16_UI:     return GL_RGB16UI;
     132        case RGB_16_F:      return GL_RGB16F;
     133
     134        case RGB_32_I:      return GL_RGB32I;
     135        case RGB_32_UI:     return GL_RGB32UI;
     136        case RGB_32_F:      return GL_RGB32F;
     137
     138        case RGBA_8:        return GL_RGBA8;
     139        case RGBA_8_I:      return GL_RGBA8I;
     140        case RGBA_8_UI:     return GL_RGBA8UI;
     141
     142        case RGBA_16:       return GL_RGBA16;
     143        case RGBA_16_I:     return GL_RGBA16I;
     144        case RGBA_16_UI:    return GL_RGBA16UI;
     145        case RGBA_16_F:     return GL_RGBA16F;
     146
     147        case RGBA_32_I:     return GL_RGBA32I;
     148        case RGBA_32_UI:    return GL_RGBA32UI;
     149        case RGBA_32_F:     return GL_RGBA32F;
     150
     151        default:            ASSERT(0, "Not supported by OpenGL.");
     152#   endif
     153#endif
     154    };
     155    ASSERT(0, "Not implemented.");
     156    return 0;
     157}
     158
     159uint32_t FrameBufferFormat::GetFormatOrder()
     160{
     161    switch (m_format)
     162    {
     163#if !defined USE_D3D9 && !defined _XBOX
     164        case R_8:         
     165        case R_8_I:         
     166        case R_8_UI:       
     167        case R_8_F:   
     168
     169        case R_16:       
     170        case R_16_I:       
     171        case R_16_UI:       
     172        case R_16_F:   
     173
     174        case R_32_I:       
     175        case R_32:         
     176        case R_32_UI: 
     177        case R_32_F:        return GL_RED;
     178
     179        case RG_8:         
     180        case RG_8_I:       
     181        case RG_8_UI:       
     182        case RG_8_F:       
     183
     184        case RG_16:         
     185        case RG_16_I:       
     186        case RG_16_UI:     
     187        case RG_16_F:       
     188
     189        case RG_32:         
     190        case RG_32_I:       
     191        case RG_32_UI:     
     192        case RG_32_F:       return GL_RG;
     193
     194        case RGB_8:         
     195        case RGB_8_I:       
     196        case RGB_8_UI:     
     197        case RGB_8_F:       
     198
     199        case RGB_16:       
     200        case RGB_16_I:     
     201        case RGB_16_UI:     
     202        case RGB_16_F:     
     203
     204        case RGB_32:       
     205        case RGB_32_I:     
     206        case RGB_32_UI:     
     207        case RGB_32_F:      return (m_invert_rgb)?(GL_BGR):(GL_RGB);
     208
     209        case RGBA_8:       
     210        case RGBA_8_I:     
     211        case RGBA_8_UI:     
     212        case RGBA_8_F:     
     213
     214        case RGBA_16:       
     215        case RGBA_16_I:     
     216        case RGBA_16_UI:   
     217        case RGBA_16_F:     
     218
     219
     220        case RGBA_32:       
     221        case RGBA_32_I:     
     222        case RGBA_32_UI:   
     223        case RGBA_32_F:     return (m_invert_rgb)?(GL_BGRA):(GL_RGBA);
     224#endif
     225    }
     226}
     227
     228//
    58229// The FrameBuffer class
    59230// ----------------------
    60231//
    61232
    62 FrameBuffer::FrameBuffer(ivec2 size)
     233FrameBuffer::FrameBuffer(ivec2 size, FrameBufferFormat fbo_format)
    63234  : m_data(new FrameBufferData)
    64235{
     
    67238    if (FAILED(g_d3ddevice->CreateTexture(size.x, size.y, 1,
    68239                                          D3DUSAGE_RENDERTARGET,
    69                                           D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT,
     240                                          fbo_format.GetFormat(), D3DPOOL_DEFAULT,
    70241                                          &m_data->m_texture, nullptr)))
    71242        Abort();
     
    74245#elif defined _XBOX
    75246    if (FAILED(g_d3ddevice->CreateTexture(size.x, size.y, 1, 0,
    76                                           D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT,
     247                                          fbo_format.GetFormat(), D3DPOOL_DEFAULT,
    77248                                          &m_data->m_texture, nullptr)))
    78249        Abort();
    79250    if (FAILED(g_d3ddevice->CreateRenderTarget(size.x, size.y,
    80                                                D3DFMT_A8R8G8B8,
     251                                               fbo_format.GetFormat(),
    81252                                               D3DMULTISAMPLE_NONE, 0, 0,
    82253                                               &m_data->m_surface, nullptr)))
     
    84255#else
    85256#   if GL_VERSION_1_1
    86     GLenum internal_format = GL_RGBA8;
    87     GLenum format = GL_BGRA;
     257    GLenum internal_format = fbo_format.GetFormat();
     258    GLenum format = fbo_format.GetFormatOrder();
    88259    GLenum depth = GL_DEPTH_COMPONENT;
    89260#   elif defined __CELLOS_LV2__
    90261    /* Supported drawable formats on the PS3: GL_ARGB_SCE, GL_RGB16F_ARB,
    91262     * GL_RGBA16F_ARB, GL_RGB32F_ARB, GL_RGBA32F_ARB, GL_LUMINANCE32F_ARB. */
    92     GLenum internal_format = GL_ARGB_SCE;
    93     GLenum format = GL_RGBA;
    94 #   else
    95     GLenum internal_format = GL_RGBA;
    96     GLenum format = GL_RGBA;
     263    GLenum internal_format = fbo_format.GetFormat();
     264    GLenum format = fbo_format.GetFormatOrder();
     265#   else
     266    GLenum internal_format = fbo_format.GetFormat();
     267    GLenum format = fbo_format.GetFormatOrder();
    97268#   endif
    98269    GLenum wrapmode = GL_REPEAT;
  • trunk/src/lol/gpu/framebuffer.h

    r2591 r2592  
    2222{
    2323
     24struct FrameBufferFormat
     25{
     26    enum Value
     27    {
     28        R_8,
     29        R_8_I,
     30        R_8_UI,
     31        R_8_F,
     32
     33        R_16,
     34        R_16_I,
     35        R_16_UI,
     36        R_16_F,
     37
     38        R_32,
     39        R_32_I,
     40        R_32_UI,
     41        R_32_F,
     42
     43        RG_8,
     44        RG_8_I,
     45        RG_8_UI,
     46        RG_8_F,
     47
     48        RG_16,
     49        RG_16_I,
     50        RG_16_UI,
     51        RG_16_F,
     52
     53        RG_32,
     54        RG_32_I,
     55        RG_32_UI,
     56        RG_32_F,
     57
     58        RGB_8,
     59        RGB_8_I,
     60        RGB_8_UI,
     61        RGB_8_F,
     62
     63        RGB_16,
     64        RGB_16_I,
     65        RGB_16_UI,
     66        RGB_16_F,
     67
     68        RGB_32,
     69        RGB_32_I,
     70        RGB_32_UI,
     71        RGB_32_F,
     72
     73        RGBA_8,
     74        RGBA_8_I,
     75        RGBA_8_UI,
     76        RGBA_8_F,
     77
     78        RGBA_16,
     79        RGBA_16_I,
     80        RGBA_16_UI,
     81        RGBA_16_F,
     82
     83        RGBA_32,
     84        RGBA_32_I,
     85        RGBA_32_UI,
     86        RGBA_32_F,
     87    }
     88    m_format;
     89    bool m_invert_rgb;
     90
     91    inline FrameBufferFormat(Value format=RGBA_8, bool invert_rgb=true)
     92            : m_format(format), m_invert_rgb(invert_rgb) {}
     93    inline uint32_t GetFormat();
     94    inline uint32_t GetFormatOrder();
     95    inline operator Value() { return m_format; }
     96};
     97
    2498class FrameBuffer
    2599{
    26100public:
    27     FrameBuffer(ivec2 size);
     101    FrameBuffer(ivec2 size, FrameBufferFormat fbo_format=FrameBufferFormat());
    28102    ~FrameBuffer();
    29103
Note: See TracChangeset for help on using the changeset viewer.