Ejemplo n.º 1
0
bool RGBtoRGBA::supports(const PixelFormat& targetFormat,
                         const PixelFormat& sourceFormat)
{
  if (targetFormat.type() != sourceFormat.type())
    return false;

  if (targetFormat.semantic() != PixelFormat::RGBA ||
      sourceFormat.semantic() != PixelFormat::RGB)
  {
    return false;
  }

  return true;
}
Ejemplo n.º 2
0
GLenum ConvertToGL( const PixelFormat& format, bool sRGB )
{
	switch(format.componentType())
	{
		case PixelComponent_UInt8:
		{
			switch(format.semantic())
			{
				case PixelSemantic_Luminance:
				{
					if(sRGB)
						return GL_SLUMINANCE8;
					else
						return GL_LUMINANCE8;
				}
				
				case PixelSemantic_LuminanceAlpha:
				{
					if(sRGB)
						return GL_SLUMINANCE8_ALPHA8;
					else
						return GL_LUMINANCE8_ALPHA8;
				}
				
				case PixelSemantic_RGB:
				{
					if(sRGB)
						return GL_SRGB8;
					else
						return GL_RGB8;
				}
				
				case PixelSemantic_RGBA:
				{
					if(sRGB)
						return GL_SRGB8_ALPHA8;
					else
						return GL_RGBA8;
				}
				
				default:
					;
			}
			
			break;
		}
		
		case PixelComponent_UInt16:
		{
			if(format.semantic() == PixelSemantic_Depth)
				return GL_DEPTH_COMPONENT16;
			break;
		}
		
		case PixelComponent_UInt24:
		{
			if(format.semantic() == PixelSemantic_Depth)
				return GL_DEPTH_COMPONENT24;
			break;
		}
		
		case PixelComponent_UInt32:
		{
			if(format.semantic() == PixelSemantic_Depth)
				return GL_DEPTH_COMPONENT32;
			break;
		}
		
		case PixelComponent_Float16:
		{
			switch(format.semantic())
			{
				case PixelSemantic_Luminance:
				{
					if(!GLEW_ARB_texture_float)
					{
						FatalError("GLEW_ARB_texture_float not supported");
						break;
					}
					
					return GL_LUMINANCE16F_ARB;
				}
				
				case PixelSemantic_LuminanceAlpha:
				{
					if(!GLEW_ARB_texture_float)
					{
						FatalError("GLEW_ARB_texture_float not supported");
						break;
					}
					
					return GL_LUMINANCE_ALPHA16F_ARB;
				}
				
				case PixelSemantic_RGB:
					return GL_RGB16F;
				
				case PixelSemantic_RGBA:
					return GL_RGBA16F;
				
				default:
					;
			}
			
			break;
		}
		
		case PixelComponent_Float32:
		{
			switch(format.semantic())
			{
				case PixelSemantic_Luminance:
				{
					if(!GLEW_ARB_texture_float)
					{
						FatalError("GLEW_ARB_texture_float not supported");
						break;
					}
					
					return GL_LUMINANCE32F_ARB;
				}
				
				case PixelSemantic_LuminanceAlpha:
				{
					if(!GLEW_ARB_texture_float)
					{
						FatalError("GLEW_ARB_texture_float not supported");
						break;
					}
					
					return GL_LUMINANCE_ALPHA32F_ARB;
				}
				
				case PixelSemantic_RGB:
					return GL_RGB32F;
				
				case PixelSemantic_RGBA:
					return GL_RGBA32F;
				
				default:
					;
			}
			
			break;
		}
		
		default:
			;
	}
	
	FatalError("Pixel format '%s' not supported!", format.asString().c_str());
	return 0;
}
Ejemplo n.º 3
0
std::string stringCast(PixelFormat format)
{
  return std::string(stringCast(format.semantic())) + stringCast(format.type());
}
Ejemplo n.º 4
0
GLenum convertToGL(const PixelFormat& format, bool sRGB)
{
  switch (format.type())
  {
    case PixelFormat::UINT8:
    {
      switch (format.semantic())
      {
        case PixelFormat::L:
        {
          if (sRGB)
            return GL_SLUMINANCE8;
          else
            return GL_LUMINANCE8;
        }

        case PixelFormat::LA:
        {
          if (sRGB)
            return GL_SLUMINANCE8_ALPHA8;
          else
            return GL_LUMINANCE8_ALPHA8;
        }

        case PixelFormat::RGB:
        {
          if (sRGB)
            return GL_SRGB8;
          else
            return GL_RGB8;
        }

        case PixelFormat::RGBA:
        {
          if (sRGB)
            return GL_SRGB8_ALPHA8;
          else
            return GL_RGBA8;
        }

        default:
          break;
      }

      break;
    }

    case PixelFormat::UINT16:
    {
      if (format.semantic() == PixelFormat::DEPTH)
        return GL_DEPTH_COMPONENT16;

      break;
    }

    case PixelFormat::UINT24:
    {
      if (format.semantic() == PixelFormat::DEPTH)
        return GL_DEPTH_COMPONENT24;

      break;
    }

    case PixelFormat::UINT32:
    {
      if (format.semantic() == PixelFormat::DEPTH)
        return GL_DEPTH_COMPONENT32;

      break;
    }

    case PixelFormat::FLOAT16:
    {
      switch (format.semantic())
      {
        case PixelFormat::L:
        {
          if (!GLEW_ARB_texture_float)
          {
            logError("Half-precision floating point textures not supported; "
                     "cannot convert pixel format");
            return 0;
          }

          return GL_LUMINANCE16F_ARB;
        }

        case PixelFormat::LA:
        {
          if (!GLEW_ARB_texture_float)
          {
            logError("Half-precision floating point textures not supported; "
                     "cannot convert pixel format");
            return 0;
          }

          return GL_LUMINANCE_ALPHA16F_ARB;
        }

        case PixelFormat::RGB:
          return GL_RGB16F;
        case PixelFormat::RGBA:
          return GL_RGBA16F;
        default:
          break;
      }

      break;
    }

    case PixelFormat::FLOAT32:
    {
      switch (format.semantic())
      {
        case PixelFormat::L:
        {
          if (!GLEW_ARB_texture_float)
          {
            logError("Floating point textures not supported; cannot convert pixel format");
            return 0;
          }

          return GL_LUMINANCE32F_ARB;
        }

        case PixelFormat::LA:
        {
          if (!GLEW_ARB_texture_float)
          {
            logError("Floating point textures not supported; cannot convert pixel format");
            return 0;
          }

          return GL_LUMINANCE_ALPHA32F_ARB;
        }

        case PixelFormat::RGB:
          return GL_RGB32F;
        case PixelFormat::RGBA:
          return GL_RGBA32F;
        default:
          break;
      }

      break;
    }

    default:
      break;
  }

  logError("No OpenGL equivalent for pixel format %s",
           format.asString().c_str());
  return 0;
}