Initial commit
This commit is contained in:
		| @@ -0,0 +1,110 @@ | ||||
| /** | ||||
|   ****************************************************************************** | ||||
|   * This file is part of the TouchGFX 4.16.1 distribution. | ||||
|   * | ||||
|   * <h2><center>© Copyright (c) 2021 STMicroelectronics. | ||||
|   * All rights reserved.</center></h2> | ||||
|   * | ||||
|   * This software component is licensed by ST under Ultimate Liberty license | ||||
|   * SLA0044, the "License"; You may not use this file except in compliance with | ||||
|   * the License. You may obtain a copy of the License at: | ||||
|   *                             www.st.com/SLA0044 | ||||
|   * | ||||
|   ****************************************************************************** | ||||
|   */ | ||||
|  | ||||
| /** | ||||
|  * @file platform/core/MCUInstrumentation.hpp | ||||
|  * | ||||
|  * Declares the touchgfx::MCUInstrumentation interface class. | ||||
|  */ | ||||
| #ifndef MCUINSTRUMENTATION_HPP | ||||
| #define MCUINSTRUMENTATION_HPP | ||||
|  | ||||
| #include <stdint.h> | ||||
|  | ||||
| namespace touchgfx | ||||
| { | ||||
| /** Interface for instrumenting processors to measure MCU load via measured CPU cycles. */ | ||||
| class MCUInstrumentation | ||||
| { | ||||
| public: | ||||
|     /** Initializes a new instance of the MCUInstrumentation class. */ | ||||
|     MCUInstrumentation() | ||||
|         : cc_consumed(0), | ||||
|           cc_in(0) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     /** Initialize. */ | ||||
|     virtual void init() = 0; | ||||
|  | ||||
|     /** Finalizes an instance of the MCUInstrumentation class. */ | ||||
|     virtual ~MCUInstrumentation() | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets elapsed microseconds based on clock frequency. | ||||
|      * | ||||
|      * @param  start          Start time. | ||||
|      * @param  now            Current time. | ||||
|      * @param  clockfrequency Clock frequency of the system expressed in MHz. | ||||
|      * | ||||
|      * @return Elapsed microseconds start and now. | ||||
|      */ | ||||
|     virtual unsigned int getElapsedUS(unsigned int start, unsigned int now, unsigned int clockfrequency) = 0; | ||||
|  | ||||
|     /** | ||||
|      * Gets CPU cycles from register. | ||||
|      * | ||||
|      * @return CPU cycles. | ||||
|      */ | ||||
|     virtual unsigned int getCPUCycles(void) = 0; | ||||
|  | ||||
|     /** | ||||
|      * Sets MCU activity high. | ||||
|      * | ||||
|      * @param  active if True, inactive otherwise. | ||||
|      */ | ||||
|     virtual void setMCUActive(bool active) | ||||
|     { | ||||
|         if (active) //idle task sched out | ||||
|         { | ||||
|             uint32_t cc_temp = getCPUCycles() - cc_in; | ||||
|             cc_consumed += cc_temp; | ||||
|         } | ||||
|         else //idle task sched in | ||||
|         { | ||||
|             cc_in = getCPUCycles(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets number of consumed clock cycles. | ||||
|      * | ||||
|      * @return clock cycles. | ||||
|      */ | ||||
|     virtual uint32_t getCCConsumed() | ||||
|     { | ||||
|         return cc_consumed; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Sets number of consumed clock cycles. | ||||
|      * | ||||
|      * @param  val number of clock cycles. | ||||
|      */ | ||||
|     virtual void setCCConsumed(uint32_t val) | ||||
|     { | ||||
|         cc_consumed = val; | ||||
|     } | ||||
|  | ||||
| protected: | ||||
|     volatile uint32_t cc_consumed; ///< Amount of consumed CPU cycles. | ||||
|     volatile uint32_t cc_in;       ///< Current CPU cycles. | ||||
| }; | ||||
|  | ||||
| } // namespace touchgfx | ||||
|  | ||||
| #endif // MCUINSTRUMENTATION_HPP | ||||
| @@ -0,0 +1,58 @@ | ||||
| /** | ||||
|   ****************************************************************************** | ||||
|   * This file is part of the TouchGFX 4.16.1 distribution. | ||||
|   * | ||||
|   * <h2><center>© Copyright (c) 2021 STMicroelectronics. | ||||
|   * All rights reserved.</center></h2> | ||||
|   * | ||||
|   * This software component is licensed by ST under Ultimate Liberty license | ||||
|   * SLA0044, the "License"; You may not use this file except in compliance with | ||||
|   * the License. You may obtain a copy of the License at: | ||||
|   *                             www.st.com/SLA0044 | ||||
|   * | ||||
|   ****************************************************************************** | ||||
|   */ | ||||
|  | ||||
| /** | ||||
|  * @file platform/driver/button/ButtonController.hpp | ||||
|  * | ||||
|  * Declares the touchgfx::ButtonController interface class. | ||||
|  */ | ||||
| #ifndef BUTTONCONTROLLER_HPP | ||||
| #define BUTTONCONTROLLER_HPP | ||||
|  | ||||
| #include <touchgfx/hal/Types.hpp> | ||||
|  | ||||
| namespace touchgfx | ||||
| { | ||||
| /** Interface for sampling external key events. */ | ||||
| class ButtonController | ||||
| { | ||||
| public: | ||||
|     /** Finalizes an instance of the ButtonController class. */ | ||||
|     virtual ~ButtonController() | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     /** Initializes button controller. */ | ||||
|     virtual void init() = 0; | ||||
|  | ||||
|     /** | ||||
|      * Sample external key events. | ||||
|      * | ||||
|      * @param [out] key Output parameter that will be set to the key value if a keypress was | ||||
|      *                     detected. | ||||
|      * | ||||
|      * @return True if a keypress was detected and the "key" parameter is set to a value. | ||||
|      */ | ||||
|     virtual bool sample(uint8_t& key) = 0; | ||||
|  | ||||
|     /** Resets button controller. Does nothing in the default implementation. */ | ||||
|     virtual void reset() | ||||
|     { | ||||
|     } | ||||
| }; | ||||
|  | ||||
| } // namespace touchgfx | ||||
|  | ||||
| #endif // BUTTONCONTROLLER_HPP | ||||
| @@ -0,0 +1,80 @@ | ||||
| /** | ||||
|   ****************************************************************************** | ||||
|   * This file is part of the TouchGFX 4.16.1 distribution. | ||||
|   * | ||||
|   * <h2><center>© Copyright (c) 2021 STMicroelectronics. | ||||
|   * All rights reserved.</center></h2> | ||||
|   * | ||||
|   * This software component is licensed by ST under Ultimate Liberty license | ||||
|   * SLA0044, the "License"; You may not use this file except in compliance with | ||||
|   * the License. You may obtain a copy of the License at: | ||||
|   *                             www.st.com/SLA0044 | ||||
|   * | ||||
|   ****************************************************************************** | ||||
|   */ | ||||
|  | ||||
| /** | ||||
|  * @file platform/driver/i2c/I2C.hpp | ||||
|  * | ||||
|  * Declares the touchfgx::I2C interface class. | ||||
|  */ | ||||
| #ifndef I2C_HPP | ||||
| #define I2C_HPP | ||||
|  | ||||
| #include <touchgfx/hal/Types.hpp> | ||||
|  | ||||
| namespace touchgfx | ||||
| { | ||||
| /** Platform independent interface for I2C drivers. */ | ||||
| class I2C | ||||
| { | ||||
| public: | ||||
|     /** | ||||
|      * Initializes a new instance of the I2C class. Stores the channel of the I2C bus to be | ||||
|      * configured. | ||||
|      * | ||||
|      * @param  ch I2C channel. | ||||
|      */ | ||||
|     I2C(uint8_t ch) | ||||
|         : channel(ch) | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     /** Finalizes an instance of the I2C class. */ | ||||
|     virtual ~I2C() | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     /** Initializes the I2C driver. */ | ||||
|     virtual void init() = 0; | ||||
|  | ||||
|     /** | ||||
|      * Reads the specified register on the device with the specified address. | ||||
|      * | ||||
|      * @param       addr The I2C device address. | ||||
|      * @param       reg  The register. | ||||
|      * @param [out] data Pointer to buffer in which to place the result. | ||||
|      * @param       cnt  Size of buffer in bytes. | ||||
|      * | ||||
|      * @return true on success, false otherwise. | ||||
|      */ | ||||
|     virtual bool readRegister(uint8_t addr, uint8_t reg, uint8_t* data, uint32_t cnt) = 0; | ||||
|  | ||||
|     /** | ||||
|      * Writes the specified value in a register. | ||||
|      * | ||||
|      * @param  addr The I2C device address. | ||||
|      * @param  reg  The register. | ||||
|      * @param  val  The new value. | ||||
|      * | ||||
|      * @return true on success, false otherwise. | ||||
|      */ | ||||
|     virtual bool writeRegister(uint8_t addr, uint8_t reg, uint8_t val) = 0; | ||||
|  | ||||
| protected: | ||||
|     uint8_t channel; ///< I2c channel is stored in order to initialize and recover a specific I2C channel | ||||
| }; | ||||
|  | ||||
| } // namespace touchgfx | ||||
|  | ||||
| #endif // I2C_HPP | ||||
| @@ -0,0 +1,876 @@ | ||||
| /** | ||||
|   ****************************************************************************** | ||||
|   * This file is part of the TouchGFX 4.16.1 distribution. | ||||
|   * | ||||
|   * <h2><center>© Copyright (c) 2021 STMicroelectronics. | ||||
|   * All rights reserved.</center></h2> | ||||
|   * | ||||
|   * This software component is licensed by ST under Ultimate Liberty license | ||||
|   * SLA0044, the "License"; You may not use this file except in compliance with | ||||
|   * the License. You may obtain a copy of the License at: | ||||
|   *                             www.st.com/SLA0044 | ||||
|   * | ||||
|   ****************************************************************************** | ||||
|   */ | ||||
|  | ||||
| /** | ||||
|  * @file platform/driver/lcd/LCD16bpp.hpp | ||||
|  * | ||||
|  * Declares the touchgfx::LCD16bpp and touchgfx::LCD16DebugPrinter classes. | ||||
|  */ | ||||
| #ifndef LCD16BPP_HPP | ||||
| #define LCD16BPP_HPP | ||||
|  | ||||
| #include <stdarg.h> | ||||
| #include <touchgfx/Bitmap.hpp> | ||||
| #include <touchgfx/Font.hpp> | ||||
| #include <touchgfx/TextProvider.hpp> | ||||
| #include <touchgfx/TextureMapTypes.hpp> | ||||
| #include <touchgfx/Unicode.hpp> | ||||
| #include <touchgfx/hal/HAL.hpp> | ||||
| #include <touchgfx/hal/Types.hpp> | ||||
| #include <touchgfx/lcd/LCD.hpp> | ||||
|  | ||||
| namespace touchgfx | ||||
| { | ||||
| #undef LCD | ||||
|  | ||||
| /** | ||||
|  * This class contains the various low-level drawing routines for drawing bitmaps, texts and | ||||
|  * rectangles on 16 bits per pixel displays. | ||||
|  * | ||||
|  * @see LCD | ||||
|  * | ||||
|  * @note All coordinates are expected to be in absolute coordinates! | ||||
|  */ | ||||
| class LCD16bpp : public LCD | ||||
| { | ||||
| public: | ||||
|     LCD16bpp(); | ||||
|  | ||||
|     virtual void drawPartialBitmap(const Bitmap& bitmap, int16_t x, int16_t y, const Rect& rect, uint8_t alpha = 255, bool useOptimized = true); | ||||
|  | ||||
|     virtual void blitCopy(const uint16_t* sourceData, const Rect& source, const Rect& blitRect, uint8_t alpha, bool hasTransparentPixels); | ||||
|  | ||||
|     virtual void blitCopy(const uint8_t* sourceData, Bitmap::BitmapFormat sourceFormat, const Rect& source, const Rect& blitRect, uint8_t alpha, bool hasTransparentPixels); | ||||
|  | ||||
|     virtual uint16_t* copyFrameBufferRegionToMemory(const Rect& visRegion, const Rect& absRegion, const BitmapId bitmapId); | ||||
|  | ||||
|     virtual void fillRect(const Rect& rect, colortype color, uint8_t alpha = 255); | ||||
|  | ||||
|     virtual uint8_t bitDepth() const | ||||
|     { | ||||
|         return 16; | ||||
|     } | ||||
|  | ||||
|     virtual Bitmap::BitmapFormat framebufferFormat() const | ||||
|     { | ||||
|         return Bitmap::RGB565; | ||||
|     } | ||||
|  | ||||
|     virtual uint16_t framebufferStride() const | ||||
|     { | ||||
|         return getFramebufferStride(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Framebuffer stride in bytes. The distance (in bytes) from the start of one | ||||
|      * framebuffer row, to the next. | ||||
|      * | ||||
|      * @return The number of bytes in one framebuffer row. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint16_t getFramebufferStride() | ||||
|     { | ||||
|         assert(HAL::FRAME_BUFFER_WIDTH > 0 && "HAL has not been initialized yet"); | ||||
|         return HAL::FRAME_BUFFER_WIDTH * 2; | ||||
|     } | ||||
|  | ||||
|     virtual colortype getColorFrom24BitRGB(uint8_t red, uint8_t green, uint8_t blue) const | ||||
|     { | ||||
|         return getColorFromRGB(red, green, blue); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Generates a color representation to be used on the LCD, based on 24 bit RGB values. | ||||
|      * | ||||
|      * @param  red   Value of the red part (0-255). | ||||
|      * @param  green Value of the green part (0-255). | ||||
|      * @param  blue  Value of the blue part (0-255). | ||||
|      * | ||||
|      * @return The color representation depending on LCD color format. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static colortype getColorFromRGB(uint8_t red, uint8_t green, uint8_t blue) | ||||
|     { | ||||
|         return ((red << 8) & 0xF800) | ((green << 3) & 0x07E0) | ((blue >> 3) & 0x001F); | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getRedColor(colortype color) const | ||||
|     { | ||||
|         return getRedFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets red from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The red from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getRedFromColor(colortype color) | ||||
|     { | ||||
|         return (color & 0xF800) >> 8; | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getGreenColor(colortype color) const | ||||
|     { | ||||
|         return getGreenFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets green from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The green from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getGreenFromColor(colortype color) | ||||
|     { | ||||
|         return (color & 0x07E0) >> 3; | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getBlueColor(colortype color) const | ||||
|     { | ||||
|         return getBlueFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets blue from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The blue from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getBlueFromColor(colortype color) | ||||
|     { | ||||
|         return (color & 0x001F) << 3; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for all image formats. This allows drawing any image | ||||
|      * using Bilinear Interpolation and Nearest Neighbor algorithms, but might use a lot of | ||||
|      * memory for the drawing algorithms. | ||||
|      */ | ||||
|     void enableTextureMapperAll(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_RGB565 image format. This allows drawing L8_RGB565 | ||||
|      * images using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_RGB565_BilinearInterpolation, | ||||
|      *      enableTextureMapperL8_RGB565_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperL8_RGB565(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_RGB565 image format. This allows drawing L8_RGB565 | ||||
|      * images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_RGB565, enableTextureMapperL8_RGB565_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperL8_RGB565_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_RGB565 image format. This allows drawing L8_RGB565 | ||||
|      * images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_RGB565, enableTextureMapperL8_RGB565_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperL8_RGB565_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_RGB888 image format. This allows drawing L8_RGB888 | ||||
|      * images using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_RGB888_BilinearInterpolation, | ||||
|      *      enableTextureMapperL8_RGB888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperL8_RGB888(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_RGB888 image format. This allows drawing L8_RGB888 | ||||
|      * images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_RGB888, enableTextureMapperL8_RGB888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperL8_RGB888_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_RGB888 image format. This allows drawing L8_RGB888 | ||||
|      * images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_RGB888, enableTextureMapperL8_RGB888_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperL8_RGB888_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_ARGB8888 image format. This allows drawing | ||||
|      * L8_ARGB8888 images using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_ARGB8888_BilinearInterpolation, | ||||
|      *      enableTextureMapperL8_ARGB8888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperL8_ARGB8888(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_ARGB8888 image format. This allows drawing | ||||
|      * L8_ARGB8888 images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_ARGB8888, enableTextureMapperL8_ARGB8888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperL8_ARGB8888_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_ARGB8888 image format. This allows drawing | ||||
|      * L8_ARGB8888 images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_ARGB8888, enableTextureMapperL8_ARGB8888_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperL8_ARGB8888_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for RGB565 image format. This allows drawing RGB565 | ||||
|      * images using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperRGB565_Opaque_BilinearInterpolation, | ||||
|      *      enableTextureMapperRGB565_Opaque_NearestNeighbor, | ||||
|      *      enableTextureMapperRGB565_NonOpaque_BilinearInterpolation, | ||||
|      *      enableTextureMapperRGB565_NonOpaque_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperRGB565(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for Opaque RGB565 image format. This allows drawing | ||||
|      * RGB565 images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperRGB565 | ||||
|      */ | ||||
|     void enableTextureMapperRGB565_Opaque_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for NonOpaque RGB565 image format. This allows drawing | ||||
|      * RGB565 images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperRGB565 | ||||
|      */ | ||||
|     void enableTextureMapperRGB565_NonOpaque_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for Opaque RGB565 image format. This allows drawing | ||||
|      * RGB565 images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperRGB565 | ||||
|      */ | ||||
|     void enableTextureMapperRGB565_Opaque_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for NonOpaque RGB565 image format. This allows drawing | ||||
|      * RGB565 images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperRGB565 | ||||
|      */ | ||||
|     void enableTextureMapperRGB565_NonOpaque_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ARGB8888 image format. This allows drawing ARGB8888 | ||||
|      * images using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperARGB8888_BilinearInterpolation, | ||||
|      *      enableTextureMapperARGB8888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperARGB8888(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ARGB8888 image format. This allows drawing ARGB8888 | ||||
|      * images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperARGB8888, enableTextureMapperARGB8888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperARGB8888_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ARGB8888 image format. This allows drawing ARGB8888 | ||||
|      * images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperARGB8888, enableTextureMapperARGB8888_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperARGB8888_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for A4 image format. This allows drawing A4 images using | ||||
|      * Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperA4_BilinearInterpolation, enableTextureMapperA4_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperA4(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for A4 image format. This allows drawing A4 images using | ||||
|      * Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperA4, enableTextureMapperA4_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperA4_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for A4 image format. This allows drawing A4 images using | ||||
|      * Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperA4, enableTextureMapperA4_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperA4_NearestNeighbor(); | ||||
|  | ||||
| protected: | ||||
|     virtual DrawTextureMapScanLineBase* getTextureMapperDrawScanLine(const TextureSurface& texture, RenderingVariant renderVariant, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Find out how much to advance in the display buffer to get to the next pixel. | ||||
|      * | ||||
|      * @param  rotatedDisplay Is the display running in portrait mode? | ||||
|      * @param  textRotation   Rotation to perform. | ||||
|      * | ||||
|      * @return How much to advance to get to the next pixel. | ||||
|      */ | ||||
|     static int nextPixel(bool rotatedDisplay, TextRotation textRotation); | ||||
|  | ||||
|     /** | ||||
|      * Find out how much to advance in the display buffer to get to the next line. | ||||
|      * | ||||
|      * @param  rotatedDisplay Is the display running in portrait mode? | ||||
|      * @param  textRotation   Rotation to perform. | ||||
|      * | ||||
|      * @return How much to advance to get to the next line. | ||||
|      */ | ||||
|     static int nextLine(bool rotatedDisplay, TextRotation textRotation); | ||||
|  | ||||
|     virtual void drawGlyph(uint16_t* wbuf16, Rect widgetArea, int16_t x, int16_t y, uint16_t offsetX, uint16_t offsetY, const Rect& invalidatedArea, const GlyphNode* glyph, const uint8_t* glyphData, uint8_t byteAlignRow, colortype color, uint8_t bitsPerPixel, uint8_t alpha, TextRotation rotation); | ||||
|  | ||||
|     /** | ||||
|      * Blits a 2D source-array to the framebuffer performing alpha-blending per pixel as | ||||
|      * specified. If ARGB8888 is not supported by the DMA a software blend is performed. | ||||
|      * | ||||
|      * @param  sourceData The source-array pointer (points to the beginning of the data). The | ||||
|      *                    sourceData must be stored as 32- bits ARGB8888 values. | ||||
|      * @param  source     The location and dimensions of the source. | ||||
|      * @param  blitRect   A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha      The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                    solid, no blending) | ||||
|      */ | ||||
|     static void blitCopyARGB8888(const uint32_t* sourceData, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Blits a 2D indexed 8-bit source to the framebuffer performing alpha-blending per | ||||
|      * pixel as specified if indexed format is not supported by the DMA a software blend is | ||||
|      * performed. | ||||
|      * | ||||
|      * @param  sourceData The source-indexes pointer (points to the beginning of the data). The | ||||
|      *                    sourceData must be stored as 8- bits indexes. | ||||
|      * @param  clutData   The source-clut pointer (points to the beginning of the CLUT color | ||||
|      *                    format and size data followed by colors entries. | ||||
|      * @param  source     The location and dimensions of the source. | ||||
|      * @param  blitRect   A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha      The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                    solid, no blending) | ||||
|      */ | ||||
|     static void blitCopyL8(const uint8_t* sourceData, const uint8_t* clutData, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Blits a 2D indexed 8-bit source to the framebuffer performing alpha-blending per | ||||
|      * pixel as specified if L8_ARGB8888 is not supported by the DMA a software blend is | ||||
|      * performed. | ||||
|      * | ||||
|      * @param  sourceData The source-indexes pointer (points to the beginning of the data). The | ||||
|      *                    sourceData must be stored as 8- bits indexes. | ||||
|      * @param  clutData   The source-clut pointer (points to the beginning of the CLUT color | ||||
|      *                    format and size data followed by colors entries stored as 32- | ||||
|      *                    bits (ARGB8888) format. | ||||
|      * @param  source     The location and dimensions of the source. | ||||
|      * @param  blitRect   A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha      The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                    solid, no blending) | ||||
|      */ | ||||
|     static void blitCopyL8_ARGB8888(const uint8_t* sourceData, const uint8_t* clutData, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Blits a 2D indexed 8-bit source to the framebuffer performing alpha-blending per | ||||
|      * pixel as specified if L8_RGB565 is not supported by the DMA a software blend is | ||||
|      * performed. | ||||
|      * | ||||
|      * @param  sourceData The source-indexes pointer (points to the beginning of the data). The | ||||
|      *                    sourceData must be stored as 8- bits indexes. | ||||
|      * @param  clutData   The source-clut pointer points to the beginning of the CLUT color | ||||
|      *                    format and size data followed by colors entries stored as 16- | ||||
|      *                    bits (RGB565) format. If the source have per pixel alpha | ||||
|      *                    channel, then alpha channel data will be following the clut | ||||
|      *                    entries data. | ||||
|      * @param  source     The location and dimensions of the source. | ||||
|      * @param  blitRect   A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha      The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                    solid, no blending) | ||||
|      */ | ||||
|     static void blitCopyL8_RGB565(const uint8_t* sourceData, const uint8_t* clutData, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Blits a 2D indexed 8-bit source to the framebuffer performing alpha-blending per | ||||
|      * pixel as specified if L8_RGB888 is not supported by the DMA a software blend is | ||||
|      * performed. | ||||
|      * | ||||
|      * @param  sourceData The source-indexes pointer (points to the beginning of the data). The | ||||
|      *                    sourceData must be stored as 8- bits indexes. | ||||
|      * @param  clutData   The source-clut pointer (points to the beginning of the CLUT color | ||||
|      *                    format and size data followed by colors entries stored as 32- | ||||
|      *                    bits (ARGB8888) format. | ||||
|      * @param  source     The location and dimensions of the source. | ||||
|      * @param  blitRect   A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha      The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                    solid, no blending) | ||||
|      */ | ||||
|     static void blitCopyL8_RGB888(const uint8_t* sourceData, const uint8_t* clutData, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Blits a 2D source-array to the framebuffer performing alpha-blending per pixel as | ||||
|      * specified. Always performs a software blend. | ||||
|      * | ||||
|      * @param  sourceData The source-array pointer (points to the beginning of the data). The | ||||
|      *                    sourceData must be stored as 16- bits RGB565 values. | ||||
|      * @param  alphaData  The alpha channel array pointer (points to the beginning of the data) | ||||
|      * @param  source     The location and dimensions of the source. | ||||
|      * @param  blitRect   A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha      The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                    solid, no blending) | ||||
|      */ | ||||
|     static void blitCopyAlphaPerPixel(const uint16_t* sourceData, const uint8_t* alphaData, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
| private: | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB565_Opaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB888_Opaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB565_NonOpaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB565_Opaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB565_Opaque_NearestNeighbor_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB565_NonOpaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB565_Opaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB565_Opaque_BilinearInterpolation_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_A4_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_A4_NearestNeighbor_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_A4_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_A4_BilinearInterpolation_NoGA; | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t expandRgb565(uint16_t c) | ||||
|     { | ||||
|         return ((c & 0x07E0) << 16) | (c & ~0x07E0); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint16_t compactRgb565(uint32_t c) | ||||
|     { | ||||
|         return ((c >> 16) & 0x07E0) | (c & ~0x07E0); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint16_t bilinearInterpolate565(uint16_t c00, uint16_t c10, uint16_t c01, uint16_t c11, uint8_t x, uint8_t y) | ||||
|     { | ||||
|         assert(x < 16 && y < 16); | ||||
|         uint32_t a00 = expandRgb565(c00); | ||||
|         uint32_t a10 = expandRgb565(c10); | ||||
|         uint32_t a01 = expandRgb565(c01); | ||||
|         uint32_t a11 = expandRgb565(c11); | ||||
|  | ||||
|         uint8_t xy = (x * y) >> 3; | ||||
|         return compactRgb565((a00 * (32 - 2 * y - 2 * x + xy) + a10 * (2 * x - xy) + a01 * (2 * y - xy) + a11 * xy) >> 5); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint16_t bilinearInterpolate565(uint16_t c00, uint16_t c10, uint8_t x) | ||||
|     { | ||||
|         assert(x < 16); | ||||
|         uint32_t a00 = expandRgb565(c00); | ||||
|         uint32_t a10 = expandRgb565(c10); | ||||
|  | ||||
|         return compactRgb565((a00 * (32 - 2 * x) + a10 * (2 * x)) >> 5); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t bilinearInterpolate8(uint8_t c00, uint8_t c10, uint8_t x) | ||||
|     { | ||||
|         assert(x < 16); | ||||
|         uint16_t xy10 = 16 * x; | ||||
|         uint16_t xy00 = 256 - xy10; | ||||
|  | ||||
|         return (c00 * xy00 + c10 * xy10) >> 8; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t bilinearInterpolate8(uint8_t c00, uint8_t c10, uint8_t c01, uint8_t c11, uint8_t x, uint8_t y) | ||||
|     { | ||||
|         assert(x < 16 && y < 16); | ||||
|         uint16_t xy11 = x * y; | ||||
|         uint16_t xy10 = 16 * x - xy11; | ||||
|         uint16_t xy01 = 16 * y - xy11; | ||||
|         uint16_t xy00 = 256 - (xy11 + xy10 + xy01); | ||||
|  | ||||
|         return (c00 * xy00 + c10 * xy10 + c01 * xy01 + c11 * xy11) >> 8; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t bilinearInterpolate888(uint32_t c00, uint32_t c10, uint8_t x) | ||||
|     { | ||||
|         assert(x < 16); | ||||
|         uint16_t xy10 = 16 * x; | ||||
|         uint16_t xy00 = 256 - xy10; | ||||
|  | ||||
|         return ((((c00 & 0xFF00FF) * xy00 + (c10 & 0xFF00FF) * xy10) >> 8) & 0xFF00FF) | ||||
|                | ((((c00 & 0x00FF00) * xy00 + (c10 & 0x00FF00) * xy10) >> 8) & 0x00FF00); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t bilinearInterpolate888(uint32_t c00, uint32_t c10, uint32_t c01, uint32_t c11, uint8_t x, uint8_t y) | ||||
|     { | ||||
|         assert(x < 16 && y < 16); | ||||
|         uint16_t xy11 = x * y; | ||||
|         uint16_t xy10 = 16 * x - xy11; | ||||
|         uint16_t xy01 = 16 * y - xy11; | ||||
|         uint16_t xy00 = 256 - (xy11 + xy10 + xy01); | ||||
|  | ||||
|         return ((((c00 & 0xFF00FF) * xy00 + (c10 & 0xFF00FF) * xy10 + (c01 & 0xFF00FF) * xy01 + (c11 & 0xFF00FF) * xy11) >> 8) & 0xFF00FF) | ||||
|                | ((((c00 & 0x00FF00) * xy00 + (c10 & 0x00FF00) * xy10 + (c01 & 0x00FF00) * xy01 + (c11 & 0x00FF00) * xy11) >> 8) & 0x00FF00); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div255_888(uint32_t val, uint8_t factor) | ||||
|     { | ||||
|         return div255rb((val & 0xFF00FF) * factor) | div255g((val & 0x00FF00) * factor); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div255_888_FFcheck(uint32_t val, uint8_t factor) | ||||
|     { | ||||
|         return factor < 0xFF ? div255_888(val, factor) : val; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div31rb(uint16_t val, uint8_t factor) | ||||
|     { | ||||
|         uint32_t val32 = (val & 0xF81F) * (factor >> 3); | ||||
|         return ((val32 + 0x0801 + ((val32 >> 5) & 0xF81F)) >> 5) & 0xF81F; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div31g(uint16_t val, uint8_t factor) | ||||
|     { | ||||
|         uint32_t val32 = (val & 0x07E0) * factor; | ||||
|         return ((val32 + 0x0020 + (val32 >> 8)) >> 8) & 0x07E0; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div255_565(uint16_t val, uint8_t factor) | ||||
|     { | ||||
|         return div31rb(val, factor) | div31g(val, factor); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div255_565_FFcheck(uint16_t val, uint8_t factor) | ||||
|     { | ||||
|         return factor < 0xFF ? div31rb(val, factor) | div31g(val, factor) : val; | ||||
|     } | ||||
|  | ||||
|     class DrawTextureMapScanLineBase16 : public DrawTextureMapScanLineBase | ||||
|     { | ||||
|     protected: | ||||
|         FORCE_INLINE_FUNCTION bool overrunCheckNearestNeighbor(uint16_t*& destBits, int& pixelsToDraw, fixed16_16& U, fixed16_16& V, fixed16_16 deltaU, fixed16_16 deltaV, const int16_t maxWidth, const int16_t maxHeight); | ||||
|         FORCE_INLINE_FUNCTION bool overrunCheckBilinearInterpolation(uint16_t*& destBits, int& pixelsToDraw, fixed16_16& U, fixed16_16& V, fixed16_16 deltaU, fixed16_16 deltaV, const int16_t maxWidth, const int16_t maxHeight); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t* const textureBits8, const uint16_t* const palette16, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t* const textureBits8, const uint16_t* const palette16, const int16_t bitmapWidth, const int UInt, const int VInt); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t* const textureBits8, const uint16_t* const palette16, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint8_t* const textureBits8, const uint16_t* const palette16, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t* const textureBits8, const uint16_t* const palette16, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint8_t* const textureBits8, const uint16_t* const palette16, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t* const textureBits8, const uint8_t* const palette8, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t* const textureBits8, const uint8_t* const palette8, const int16_t bitmapWidth, const int UInt, const int VInt); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t* const textureBits8, const uint8_t* const palette8, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint8_t* const textureBits8, const uint8_t* const palette8, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t* const textureBits8, const uint8_t* const palette8, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint8_t* const textureBits8, const uint8_t* const palette8, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t* const textureBits8, const uint32_t* const palette32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t* const textureBits8, const uint32_t* const palette32, const int16_t bitmapWidth, const int UInt, const int VInt); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t* const textureBits8, const uint32_t* const palette32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint8_t* const textureBits8, const uint32_t* const palette32, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t* const textureBits8, const uint32_t* const palette32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint8_t* const textureBits8, const uint32_t* const palette32, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint16_t* const textureBits, const uint8_t* const alphaBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint16_t* const textureBits, const uint8_t* alphaBits, const int16_t bitmapWidth, const int UInt, const int VInt); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB565_Opaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint16_t* const textureBits, const uint8_t* const alphaBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint16_t* const textureBits, const uint8_t* const alphaBits, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t* const alphaBits, const uint16_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint8_t* const alphaBits, const uint16_t* const textureBits, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB565_Opaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int UInt, const int VInt); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_NearestNeighbor_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t a4, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_NearestNeighbor_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t a); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_BilinearInterpolation_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint16_t* const textureBits, const uint32_t offset, const int16_t bitmapStride, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapStride, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_BilinearInterpolation_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint16_t* const textureBits, const uint32_t offset, const int16_t bitmapStride, const uint8_t UFrac, const uint8_t VFrac); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapStride, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|     }; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * The class LCD16DebugPrinter implements the DebugPrinter interface for printing debug messages | ||||
|  * on top of 16bit framebuffer. | ||||
|  * | ||||
|  * @see DebugPrinter | ||||
|  */ | ||||
| class LCD16DebugPrinter : public DebugPrinter | ||||
| { | ||||
| public: | ||||
|     virtual void draw(const Rect& rect) const; | ||||
| }; | ||||
|  | ||||
| } // namespace touchgfx | ||||
|  | ||||
| #endif // LCD16BPP_HPP | ||||
| @@ -0,0 +1,842 @@ | ||||
| /** | ||||
|   ****************************************************************************** | ||||
|   * This file is part of the TouchGFX 4.16.1 distribution. | ||||
|   * | ||||
|   * <h2><center>© Copyright (c) 2021 STMicroelectronics. | ||||
|   * All rights reserved.</center></h2> | ||||
|   * | ||||
|   * This software component is licensed by ST under Ultimate Liberty license | ||||
|   * SLA0044, the "License"; You may not use this file except in compliance with | ||||
|   * the License. You may obtain a copy of the License at: | ||||
|   *                             www.st.com/SLA0044 | ||||
|   * | ||||
|   ****************************************************************************** | ||||
|   */ | ||||
|  | ||||
| /** | ||||
|  * @file platform/driver/lcd/LCD16bppSerialFlash.hpp | ||||
|  * | ||||
|  * Declares the touchgfx::LCD16bppSerialFlash class. | ||||
|  */ | ||||
| #ifndef LCD16BPPSERIALFLASH_HPP | ||||
| #define LCD16BPPSERIALFLASH_HPP | ||||
|  | ||||
| #include <stdarg.h> | ||||
| #include <touchgfx/Bitmap.hpp> | ||||
| #include <touchgfx/Font.hpp> | ||||
| #include <touchgfx/TextProvider.hpp> | ||||
| #include <touchgfx/TextureMapTypes.hpp> | ||||
| #include <touchgfx/Unicode.hpp> | ||||
| #include <touchgfx/hal/FlashDataReader.hpp> | ||||
| #include <touchgfx/hal/HAL.hpp> | ||||
| #include <touchgfx/hal/Types.hpp> | ||||
| #include <touchgfx/lcd/LCD.hpp> | ||||
|  | ||||
| namespace touchgfx | ||||
| { | ||||
| #undef LCD | ||||
|  | ||||
| /** | ||||
|  * This class contains the various low-level drawing routines for drawing bitmaps, texts and | ||||
|  * rectangles on 16 bits per pixel displays. | ||||
|  * | ||||
|  * @see LCD | ||||
|  * | ||||
|  * @note All coordinates are expected to be in absolute coordinates! | ||||
|  */ | ||||
| class LCD16bppSerialFlash : public LCD | ||||
| { | ||||
| public: | ||||
|     /** | ||||
|      * Creates a LCD16bppSerialFlash object. The FlashDataReader object is used to fetch | ||||
|      * data from the external flash. | ||||
|      * | ||||
|      * @param [in] flashReader Reference to a FlashDataReader object. | ||||
|      */ | ||||
|     LCD16bppSerialFlash(FlashDataReader& flashReader); | ||||
|  | ||||
|     virtual void drawPartialBitmap(const Bitmap& bitmap, int16_t x, int16_t y, const Rect& rect, uint8_t alpha = 255, bool useOptimized = true); | ||||
|  | ||||
|     virtual void blitCopy(const uint16_t* sourceData, const Rect& source, const Rect& blitRect, uint8_t alpha, bool hasTransparentPixels); | ||||
|  | ||||
|     virtual void blitCopy(const uint8_t* sourceData, Bitmap::BitmapFormat sourceFormat, const Rect& source, const Rect& blitRect, uint8_t alpha, bool hasTransparentPixels); | ||||
|  | ||||
|     virtual uint16_t* copyFrameBufferRegionToMemory(const Rect& visRegion, const Rect& absRegion, const BitmapId bitmapId); | ||||
|  | ||||
|     virtual void fillRect(const Rect& rect, colortype color, uint8_t alpha = 255); | ||||
|  | ||||
|     virtual uint8_t bitDepth() const | ||||
|     { | ||||
|         return 16; | ||||
|     } | ||||
|  | ||||
|     virtual Bitmap::BitmapFormat framebufferFormat() const | ||||
|     { | ||||
|         return Bitmap::RGB565; | ||||
|     } | ||||
|  | ||||
|     virtual uint16_t framebufferStride() const | ||||
|     { | ||||
|         return getFramebufferStride(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Framebuffer stride in bytes. The distance (in bytes) from the start of one | ||||
|      * framebuffer row, to the next. | ||||
|      * | ||||
|      * @return The number of bytes in one framebuffer row. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint16_t getFramebufferStride() | ||||
|     { | ||||
|         assert(HAL::FRAME_BUFFER_WIDTH > 0 && "HAL has not been initialized yet"); | ||||
|         return HAL::FRAME_BUFFER_WIDTH * 2; | ||||
|     } | ||||
|  | ||||
|     virtual colortype getColorFrom24BitRGB(uint8_t red, uint8_t green, uint8_t blue) const | ||||
|     { | ||||
|         return getColorFromRGB(red, green, blue); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Generates a color representation to be used on the LCD, based on 24 bit RGB values. | ||||
|      * | ||||
|      * @param  red   Value of the red part (0-255). | ||||
|      * @param  green Value of the green part (0-255). | ||||
|      * @param  blue  Value of the blue part (0-255). | ||||
|      * | ||||
|      * @return The color representation depending on LCD color format. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static colortype getColorFromRGB(uint8_t red, uint8_t green, uint8_t blue) | ||||
|     { | ||||
|         return ((red << 8) & 0xF800) | ((green << 3) & 0x07E0) | ((blue >> 3) & 0x001F); | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getRedColor(colortype color) const | ||||
|     { | ||||
|         return getRedFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets red from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The red from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getRedFromColor(colortype color) | ||||
|     { | ||||
|         return (color & 0xF800) >> 8; | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getGreenColor(colortype color) const | ||||
|     { | ||||
|         return getGreenFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets green from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The green from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getGreenFromColor(colortype color) | ||||
|     { | ||||
|         return (color & 0x07E0) >> 3; | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getBlueColor(colortype color) const | ||||
|     { | ||||
|         return getBlueFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets blue from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The blue from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getBlueFromColor(colortype color) | ||||
|     { | ||||
|         return (color & 0x001F) << 3; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for all image formats. This allows drawing any image | ||||
|      * using Bilinear Interpolation and Nearest Neighbor algorithms, but might use a lot of | ||||
|      * memory for the drawing algorithms. | ||||
|      */ | ||||
|     void enableTextureMapperAll(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_RGB565 image format. This allows drawing L8_RGB565 | ||||
|      * images using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_RGB565_BilinearInterpolation, | ||||
|      *      enableTextureMapperL8_RGB565_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperL8_RGB565(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_RGB565 image format. This allows drawing L8_RGB565 | ||||
|      * images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_RGB565, enableTextureMapperL8_RGB565_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperL8_RGB565_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_RGB565 image format. This allows drawing L8_RGB565 | ||||
|      * images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_RGB565, enableTextureMapperL8_RGB565_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperL8_RGB565_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_RGB888 image format. This allows drawing L8_RGB888 | ||||
|      * images using Bilinear Interpolation and NearestNeighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_RGB888_BilinearInterpolation, | ||||
|      *      enableTextureMapperL8_RGB888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperL8_RGB888(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_RGB888 image format. This allows drawing L8_RGB888 | ||||
|      * images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_RGB888, enableTextureMapperL8_RGB888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperL8_RGB888_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_RGB888 image format. This allows drawing L8_RGB888 | ||||
|      * images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_RGB888, enableTextureMapperL8_RGB888_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperL8_RGB888_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_ARGB8888 image format. This allows drawing | ||||
|      * L8_ARGB8888 images using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_ARGB8888_BilinearInterpolation, | ||||
|      *      enableTextureMapperL8_ARGB8888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperL8_ARGB8888(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_ARGB8888 image format. This allows drawing | ||||
|      * L8_ARGB8888 images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_ARGB8888, enableTextureMapperL8_ARGB8888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperL8_ARGB8888_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_ARGB8888 image format. This allows drawing | ||||
|      * L8_ARGB8888 images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_ARGB8888, enableTextureMapperL8_ARGB8888_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperL8_ARGB8888_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for RGB565 image format. This allows drawing RGB565 | ||||
|      * images using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperRGB565_Opaque_BilinearInterpolation, | ||||
|      *      enableTextureMapperRGB565_Opaque_NearestNeighbor, | ||||
|      *      enableTextureMapperRGB565_NonOpaque_BilinearInterpolation, | ||||
|      *      enableTextureMapperRGB565_NonOpaque_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperRGB565(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for Opaque RGB565 image format. This allows drawing | ||||
|      * RGB565 images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperRGB565 | ||||
|      */ | ||||
|     void enableTextureMapperRGB565_Opaque_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for NonOpaque RGB565 image format. This allows drawing | ||||
|      * RGB565 images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperRGB565 | ||||
|      */ | ||||
|     void enableTextureMapperRGB565_NonOpaque_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for Opaque RGB565 image format. This allows drawing | ||||
|      * RGB565 images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperRGB565 | ||||
|      */ | ||||
|     void enableTextureMapperRGB565_Opaque_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for NonOpaque RGB565 image format. This allows drawing | ||||
|      * RGB565 images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperRGB565 | ||||
|      */ | ||||
|     void enableTextureMapperRGB565_NonOpaque_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ARGB8888 image format. This allows drawing ARGB8888 | ||||
|      * images using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperARGB8888_BilinearInterpolation, | ||||
|      *      enableTextureMapperARGB8888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperARGB8888(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ARGB8888 image format. This allows drawing ARGB8888 | ||||
|      * images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperARGB8888, enableTextureMapperARGB8888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperARGB8888_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ARGB8888 image format. This allows drawing ARGB8888 | ||||
|      * images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperARGB8888, enableTextureMapperARGB8888_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperARGB8888_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for A4 image format. This allows drawing A4 images using | ||||
|      * Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperA4_BilinearInterpolation, enableTextureMapperA4_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperA4(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for A4 image format. This allows drawing A4 images using | ||||
|      * Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperA4, enableTextureMapperA4_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperA4_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for A4 image format. This allows drawing A4 images using | ||||
|      * Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperA4, enableTextureMapperA4_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperA4_NearestNeighbor(); | ||||
|  | ||||
| protected: | ||||
|     virtual DrawTextureMapScanLineBase* getTextureMapperDrawScanLine(const TextureSurface& texture, RenderingVariant renderVariant, uint8_t alpha); | ||||
|  | ||||
|     FlashDataReader& flashReader; ///< Flash reader. Used by routines to read pixel data from the flash. | ||||
|  | ||||
|     /** | ||||
|      * Find out how much to advance in the display buffer to get to the next pixel. | ||||
|      * | ||||
|      * @param  rotatedDisplay Is the display running in portrait mode? | ||||
|      * @param  textRotation   Rotation to perform. | ||||
|      * | ||||
|      * @return How much to advance to get to the next pixel. | ||||
|      */ | ||||
|     static int nextPixel(bool rotatedDisplay, TextRotation textRotation); | ||||
|  | ||||
|     /** | ||||
|      * Find out how much to advance in the display buffer to get to the next line. | ||||
|      * | ||||
|      * @param  rotatedDisplay Is the display running in portrait mode? | ||||
|      * @param  textRotation   Rotation to perform. | ||||
|      * | ||||
|      * @return How much to advance to get to the next line. | ||||
|      */ | ||||
|     static int nextLine(bool rotatedDisplay, TextRotation textRotation); | ||||
|  | ||||
|     virtual void drawGlyph(uint16_t* wbuf16, Rect widgetArea, int16_t x, int16_t y, uint16_t offsetX, uint16_t offsetY, const Rect& invalidatedArea, const GlyphNode* glyph, const uint8_t* glyphData, uint8_t byteAlignRow, colortype color, uint8_t bitsPerPixel, uint8_t alpha, TextRotation rotation); | ||||
|  | ||||
|     /** | ||||
|      * Blits a 2D source-array to the framebuffer performing alpha-blending per pixel as | ||||
|      * specified. If ARGB8888 is not supported by the DMA a software blend is performed. | ||||
|      * | ||||
|      * @param  sourceData The source-array pointer (points to the beginning of the data). The | ||||
|      *                    sourceData must be stored as 32- bits ARGB8888 values. | ||||
|      * @param  source     The location and dimensions of the source. | ||||
|      * @param  blitRect   A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha      The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                    solid, no blending) | ||||
|      */ | ||||
|     void blitCopyARGB8888(const uint32_t* sourceData, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Blits a 2D indexed 8-bit source to the framebuffer performing alpha-blending per | ||||
|      * pixel as specified if indexed format is not supported by the DMA a software blend is | ||||
|      * performed. | ||||
|      * | ||||
|      * @param  sourceData The source-indexes pointer (points to the beginning of the data). The | ||||
|      *                    sourceData must be stored as 8- bits indexes. | ||||
|      * @param  clutData   The source-clut pointer (points to the beginning of the CLUT color | ||||
|      *                    format and size data followed by colors entries. | ||||
|      * @param  source     The location and dimensions of the source. | ||||
|      * @param  blitRect   A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha      The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                    solid, no blending) | ||||
|      */ | ||||
|     void blitCopyL8(const uint8_t* sourceData, const uint8_t* clutData, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Blits a 2D indexed 8-bit source to the framebuffer performing alpha-blending per | ||||
|      * pixel as specified if L8_ARGB8888 is not supported by the DMA a software blend is | ||||
|      * performed. | ||||
|      * | ||||
|      * @param  sourceData The source-indexes pointer (points to the beginning of the data). The | ||||
|      *                    sourceData must be stored as 8- bits indexes. | ||||
|      * @param  clutData   The source-clut pointer (points to the beginning of the CLUT color | ||||
|      *                    format and size data followed by colors entries stored as 32- | ||||
|      *                    bits (ARGB8888) format. | ||||
|      * @param  source     The location and dimensions of the source. | ||||
|      * @param  blitRect   A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha      The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                    solid, no blending) | ||||
|      */ | ||||
|     void blitCopyL8_ARGB8888(const uint8_t* sourceData, const uint8_t* clutData, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Blits a 2D indexed 8-bit source to the framebuffer performing alpha-blending per | ||||
|      * pixel as specified if L8_RGB565 is not supported by the DMA a software blend is | ||||
|      * performed. | ||||
|      * | ||||
|      * @param  sourceData The source-indexes pointer (points to the beginning of the data). The | ||||
|      *                    sourceData must be stored as 8- bits indexes. | ||||
|      * @param  clutData   The source-clut pointer points to the beginning of the CLUT color | ||||
|      *                    format and size data followed by colors entries stored as 16- | ||||
|      *                    bits (RGB565) format. If the source have per pixel alpha | ||||
|      *                    channel, then alpha channel data will be following the clut | ||||
|      *                    entries data. | ||||
|      * @param  source     The location and dimensions of the source. | ||||
|      * @param  blitRect   A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha      The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                    solid, no blending) | ||||
|      */ | ||||
|     void blitCopyL8_RGB565(const uint8_t* sourceData, const uint8_t* clutData, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
| private: | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB565_Opaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB888_Opaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB565_NonOpaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB565_Opaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB565_Opaque_NearestNeighbor_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB565_NonOpaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB565_Opaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB565_Opaque_BilinearInterpolation_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_A4_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_A4_NearestNeighbor_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_A4_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_A4_BilinearInterpolation_NoGA; | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t expandRgb565(uint16_t c) | ||||
|     { | ||||
|         return ((c & 0x07E0) << 16) | (c & ~0x07E0); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint16_t compactRgb565(uint32_t c) | ||||
|     { | ||||
|         return ((c >> 16) & 0x07E0) | (c & ~0x07E0); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint16_t bilinearInterpolate565(uint16_t c00, uint16_t c10, uint16_t c01, uint16_t c11, uint8_t x, uint8_t y) | ||||
|     { | ||||
|         assert(x < 16 && y < 16); | ||||
|         uint32_t a00 = expandRgb565(c00); | ||||
|         uint32_t a10 = expandRgb565(c10); | ||||
|         uint32_t a01 = expandRgb565(c01); | ||||
|         uint32_t a11 = expandRgb565(c11); | ||||
|  | ||||
|         uint8_t xy = (x * y) >> 3; | ||||
|         return compactRgb565((a00 * (32 - 2 * y - 2 * x + xy) + a10 * (2 * x - xy) + a01 * (2 * y - xy) + a11 * xy) >> 5); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint16_t bilinearInterpolate565(uint16_t c00, uint16_t c10, uint8_t x) | ||||
|     { | ||||
|         assert(x < 16); | ||||
|         uint32_t a00 = expandRgb565(c00); | ||||
|         uint32_t a10 = expandRgb565(c10); | ||||
|  | ||||
|         return compactRgb565((a00 * (32 - 2 * x) + a10 * (2 * x)) >> 5); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t bilinearInterpolate8(uint8_t c00, uint8_t c10, uint8_t x) | ||||
|     { | ||||
|         assert(x < 16); | ||||
|         uint16_t xy10 = 16 * x; | ||||
|         uint16_t xy00 = 256 - xy10; | ||||
|  | ||||
|         return (c00 * xy00 + c10 * xy10) >> 8; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t bilinearInterpolate8(uint8_t c00, uint8_t c10, uint8_t c01, uint8_t c11, uint8_t x, uint8_t y) | ||||
|     { | ||||
|         assert(x < 16 && y < 16); | ||||
|         uint16_t xy11 = x * y; | ||||
|         uint16_t xy10 = 16 * x - xy11; | ||||
|         uint16_t xy01 = 16 * y - xy11; | ||||
|         uint16_t xy00 = 256 - (xy11 + xy10 + xy01); | ||||
|  | ||||
|         return (c00 * xy00 + c10 * xy10 + c01 * xy01 + c11 * xy11) >> 8; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t bilinearInterpolate888(uint32_t c00, uint32_t c10, uint8_t x) | ||||
|     { | ||||
|         assert(x < 16); | ||||
|         uint16_t xy10 = 16 * x; | ||||
|         uint16_t xy00 = 256 - xy10; | ||||
|  | ||||
|         return ((((c00 & 0xFF00FF) * xy00 + (c10 & 0xFF00FF) * xy10) >> 8) & 0xFF00FF) | ||||
|                | ((((c00 & 0x00FF00) * xy00 + (c10 & 0x00FF00) * xy10) >> 8) & 0x00FF00); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t bilinearInterpolate888(uint32_t c00, uint32_t c10, uint32_t c01, uint32_t c11, uint8_t x, uint8_t y) | ||||
|     { | ||||
|         assert(x < 16 && y < 16); | ||||
|         uint16_t xy11 = x * y; | ||||
|         uint16_t xy10 = 16 * x - xy11; | ||||
|         uint16_t xy01 = 16 * y - xy11; | ||||
|         uint16_t xy00 = 256 - (xy11 + xy10 + xy01); | ||||
|  | ||||
|         return ((((c00 & 0xFF00FF) * xy00 + (c10 & 0xFF00FF) * xy10 + (c01 & 0xFF00FF) * xy01 + (c11 & 0xFF00FF) * xy11) >> 8) & 0xFF00FF) | ||||
|                | ((((c00 & 0x00FF00) * xy00 + (c10 & 0x00FF00) * xy10 + (c01 & 0x00FF00) * xy01 + (c11 & 0x00FF00) * xy11) >> 8) & 0x00FF00); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div255_888(uint32_t val, uint8_t factor) | ||||
|     { | ||||
|         return div255rb((val & 0xFF00FF) * factor) | div255g((val & 0x00FF00) * factor); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div255_888_FFcheck(uint32_t val, uint8_t factor) | ||||
|     { | ||||
|         return factor < 0xFF ? div255_888(val, factor) : val; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div31rb(uint16_t val, uint8_t factor) | ||||
|     { | ||||
|         uint32_t val32 = (val & 0xF81F) * (factor >> 3); | ||||
|         return ((val32 + 0x0801 + ((val32 >> 5) & 0xF81F)) >> 5) & 0xF81F; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div31g(uint16_t val, uint8_t factor) | ||||
|     { | ||||
|         uint32_t val32 = (val & 0x07E0) * factor; | ||||
|         return ((val32 + 0x0020 + (val32 >> 8)) >> 8) & 0x07E0; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div255_565(uint16_t val, uint8_t factor) | ||||
|     { | ||||
|         return div31rb(val, factor) | div31g(val, factor); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div255_565_FFcheck(uint16_t val, uint8_t factor) | ||||
|     { | ||||
|         return factor < 0xFF ? div31rb(val, factor) | div31g(val, factor) : val; | ||||
|     } | ||||
|  | ||||
|     class DrawTextureMapScanLineBase16 : public DrawTextureMapScanLineBase | ||||
|     { | ||||
|     protected: | ||||
|         FORCE_INLINE_FUNCTION bool overrunCheckNearestNeighbor(uint16_t*& destBits, int& pixelsToDraw, fixed16_16& U, fixed16_16& V, fixed16_16 deltaU, fixed16_16 deltaV, const int16_t maxWidth, const int16_t maxHeight); | ||||
|         FORCE_INLINE_FUNCTION bool overrunCheckBilinearInterpolation(uint16_t*& destBits, int& pixelsToDraw, fixed16_16& U, fixed16_16& V, fixed16_16 deltaU, fixed16_16 deltaV, const int16_t maxWidth, const int16_t maxHeight); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t* const textureBits8, const uint16_t* const palette16, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t* const textureBits8, const uint16_t* const palette16, const int16_t bitmapWidth, const int UInt, const int VInt); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t* const textureBits8, const uint16_t* const palette16, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint8_t* const textureBits8, const uint16_t* const palette16, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t* const textureBits8, const uint16_t* const palette16, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint8_t* const textureBits8, const uint16_t* const palette16, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t* const textureBits8, const uint8_t* const palette8, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t* const textureBits8, const uint8_t* const palette8, const int16_t bitmapWidth, const int UInt, const int VInt); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t* const textureBits8, const uint8_t* const palette8, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint8_t* const textureBits8, const uint8_t* const palette8, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t* const textureBits8, const uint8_t* const palette8, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint8_t* const textureBits8, const uint8_t* const palette8, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t* const textureBits8, const uint32_t* const palette32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t* const textureBits8, const uint32_t* const palette32, const int16_t bitmapWidth, const int UInt, const int VInt); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t* const textureBits8, const uint32_t* const palette32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint8_t* const textureBits8, const uint32_t* const palette32, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t* const textureBits8, const uint32_t* const palette32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint8_t* const textureBits8, const uint32_t* const palette32, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint16_t* const textureBits, const uint8_t* const alphaBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint16_t* const textureBits, const uint8_t* alphaBits, const int16_t bitmapWidth, const int UInt, const int VInt); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB565_Opaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint16_t* const textureBits, const uint8_t* const alphaBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint16_t* const textureBits, const uint8_t* const alphaBits, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t* const alphaBits, const uint16_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint8_t* const alphaBits, const uint16_t* const textureBits, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB565_Opaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int UInt, const int VInt); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_NearestNeighbor_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t a4, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_NearestNeighbor_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint8_t a); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_BilinearInterpolation_GA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint16_t* const textureBits, const uint32_t offset, const int16_t bitmapWidth, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapStride, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_BilinearInterpolation_NoGA : public DrawTextureMapScanLineBase16 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destBits, const uint16_t* const textureBits, const uint32_t offset, const int16_t bitmapWidth, const uint8_t UFrac, const uint8_t VFrac); | ||||
|         void writePixelOnEdge(uint16_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapStride, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|     }; | ||||
| }; | ||||
|  | ||||
| } // namespace touchgfx | ||||
|  | ||||
| #endif // LCD16BPPSERIALFLASH_HPP | ||||
| @@ -0,0 +1,339 @@ | ||||
| /** | ||||
|   ****************************************************************************** | ||||
|   * This file is part of the TouchGFX 4.16.1 distribution. | ||||
|   * | ||||
|   * <h2><center>© Copyright (c) 2021 STMicroelectronics. | ||||
|   * All rights reserved.</center></h2> | ||||
|   * | ||||
|   * This software component is licensed by ST under Ultimate Liberty license | ||||
|   * SLA0044, the "License"; You may not use this file except in compliance with | ||||
|   * the License. You may obtain a copy of the License at: | ||||
|   *                             www.st.com/SLA0044 | ||||
|   * | ||||
|   ****************************************************************************** | ||||
|   */ | ||||
|  | ||||
| /** | ||||
|  * @file platform/driver/lcd/LCD1bpp.hpp | ||||
|  * | ||||
|  * Declares the touchfgx::LCD1bpp and touchgfx::LCD1DebugPrinter classes. | ||||
|  */ | ||||
| #ifndef LCD1BPP_HPP | ||||
| #define LCD1BPP_HPP | ||||
|  | ||||
| #include <stdarg.h> | ||||
| #include <touchgfx/Bitmap.hpp> | ||||
| #include <touchgfx/Font.hpp> | ||||
| #include <touchgfx/TextProvider.hpp> | ||||
| #include <touchgfx/Unicode.hpp> | ||||
| #include <touchgfx/hal/HAL.hpp> | ||||
| #include <touchgfx/hal/Types.hpp> | ||||
| #include <touchgfx/lcd/LCD.hpp> | ||||
|  | ||||
| namespace touchgfx | ||||
| { | ||||
| #undef LCD | ||||
|  | ||||
| /** | ||||
|  * This class contains the various low-level drawing routines for drawing bitmaps, texts and | ||||
|  * rectangles on 1 bits per pixel displays. | ||||
|  * | ||||
|  * @see LCD | ||||
|  * | ||||
|  * @note All coordinates are expected to be in absolute coordinates! | ||||
|  */ | ||||
| class LCD1bpp : public LCD | ||||
| { | ||||
| public: | ||||
|     virtual void drawPartialBitmap(const Bitmap& bitmap, int16_t x, int16_t y, const Rect& rect, uint8_t alpha = 255, bool useOptimized = true); | ||||
|  | ||||
|     virtual void blitCopy(const uint16_t* sourceData, const Rect& source, const Rect& blitRect, uint8_t alpha, bool hasTransparentPixels); | ||||
|  | ||||
|     virtual void blitCopy(const uint8_t* sourceData, Bitmap::BitmapFormat sourceFormat, const Rect& source, const Rect& blitRect, uint8_t alpha, bool hasTransparentPixels); | ||||
|  | ||||
|     virtual uint16_t* copyFrameBufferRegionToMemory(const Rect& visRegion, const Rect& absRegion, const BitmapId bitmapId); | ||||
|  | ||||
|     virtual void fillRect(const Rect& rect, colortype color, uint8_t alpha = 255); | ||||
|  | ||||
|     virtual uint8_t bitDepth() const | ||||
|     { | ||||
|         return 1; | ||||
|     } | ||||
|  | ||||
|     virtual Bitmap::BitmapFormat framebufferFormat() const | ||||
|     { | ||||
|         return Bitmap::BW; | ||||
|     } | ||||
|  | ||||
|     virtual uint16_t framebufferStride() const | ||||
|     { | ||||
|         return getFramebufferStride(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Framebuffer stride in bytes. The distance (in bytes) from the start of one | ||||
|      * framebuffer row, to the next. | ||||
|      * | ||||
|      * @return The number of bytes in one framebuffer row. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint16_t getFramebufferStride() | ||||
|     { | ||||
|         assert(HAL::FRAME_BUFFER_WIDTH > 0 && "HAL has not been initialized yet"); | ||||
|         return (HAL::FRAME_BUFFER_WIDTH + 7) / 8; | ||||
|     } | ||||
|  | ||||
|     virtual colortype getColorFrom24BitRGB(uint8_t red, uint8_t green, uint8_t blue) const | ||||
|     { | ||||
|         return getColorFromRGB(red, green, blue); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Generates a color representation to be used on the LCD, based on 24 bit RGB values. | ||||
|      * | ||||
|      * @param  red   Value of the red part (0-255). | ||||
|      * @param  green Value of the green part (0-255). | ||||
|      * @param  blue  Value of the blue part (0-255). | ||||
|      * | ||||
|      * @return The color representation depending on LCD color format. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static colortype getColorFromRGB(uint8_t red, uint8_t green, uint8_t blue) | ||||
|     { | ||||
|         // Find the GRAY value (http://en.wikipedia.org/wiki/Luma_%28video%29) rounded to nearest integer | ||||
|         return (red * 54 + green * 183 + blue * 19) >> 15; | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getRedColor(colortype color) const | ||||
|     { | ||||
|         return getRedFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets red from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The red from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getRedFromColor(colortype color) | ||||
|     { | ||||
|         return (color & 0x1) * 0xFF; | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getGreenColor(colortype color) const | ||||
|     { | ||||
|         return getGreenFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets green from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The green from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getGreenFromColor(colortype color) | ||||
|     { | ||||
|         return (color & 0x1) * 0xFF; | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getBlueColor(colortype color) const | ||||
|     { | ||||
|         return getBlueFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets blue from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The blue from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getBlueFromColor(colortype color) | ||||
|     { | ||||
|         return (color & 0x1) * 0xFF; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for all image formats. Currently texture mapping is not | ||||
|      * supported on 1bpp displays, so this function does not do anything. It is merely | ||||
|      * included to allow function enableTextureMapperAll() to be called on any subclass of | ||||
|      * LCD. | ||||
|      */ | ||||
|     void enableTextureMapperAll(); | ||||
|  | ||||
| protected: | ||||
|     virtual void drawTextureMapScanLine(const DrawingSurface& dest, const Gradients& gradients, const Edge* leftEdge, const Edge* rightEdge, const TextureSurface& texture, const Rect& absoluteRect, const Rect& dirtyAreaAbsolute, RenderingVariant renderVariant, uint8_t alpha, uint16_t subDivisionSize) | ||||
|     { | ||||
|         assert(0 && "Texture mapping not supported for 1bpp"); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Find out how much to advance in the display buffer to get to the next pixel. | ||||
|      * | ||||
|      * @param  rotatedDisplay Is the display running in portrait mode? | ||||
|      * @param  textRotation   Rotation to perform. | ||||
|      * | ||||
|      * @return How much to advance to get to the next pixel. | ||||
|      */ | ||||
|     static int nextPixel(bool rotatedDisplay, TextRotation textRotation); | ||||
|  | ||||
|     /** | ||||
|      * Find out how much to advance in the display buffer to get to the next line. | ||||
|      * | ||||
|      * @param  rotatedDisplay Is the display running in portrait mode? | ||||
|      * @param  textRotation   Rotation to perform. | ||||
|      * | ||||
|      * @return How much to advance to get to the next line. | ||||
|      */ | ||||
|     static int nextLine(bool rotatedDisplay, TextRotation textRotation); | ||||
|  | ||||
|     virtual void drawGlyph(uint16_t* wbuf16, Rect widgetArea, int16_t x, int16_t y, uint16_t offsetX, uint16_t offsetY, const Rect& invalidatedArea, const GlyphNode* glyph, const uint8_t* glyphData, uint8_t byteAlignRow, colortype color, uint8_t bitsPerPixel, uint8_t alpha, TextRotation rotation); | ||||
|  | ||||
|     /** | ||||
|      * Fill memory efficiently. Try to get 32bit aligned or 16bit aligned and then copy as | ||||
|      * quickly as possible. | ||||
|      * | ||||
|      * @param [out] dst         Pointer to memory to fill. | ||||
|      * @param       color       Color to write to memory, either 0 => 0x00000000 or 1 => | ||||
|      *                          0xFFFFFFFF. | ||||
|      * @param       bytesToFill Number of bytes to fill. | ||||
|      */ | ||||
|     static void fillMemory(void* RESTRICT dst, colortype color, uint16_t bytesToFill); | ||||
|  | ||||
|     /** | ||||
|      * Blits a run-length encoded2D source-array to the framebuffer if alpha > zero. | ||||
|      * | ||||
|      * @param  _sourceData The source-array pointer (points to the beginning of the data). Data | ||||
|      *                     stored in RLE format, where each byte indicates number of | ||||
|      *                     pixels with certain color, alternating between black and | ||||
|      *                     white. First byte represents black. | ||||
|      * @param  source      The location and dimensions of the source. | ||||
|      * @param  blitRect    A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha       The alpha value to use for blending (0 = invisible, otherwise solid). | ||||
|      */ | ||||
|     virtual void blitCopyRLE(const uint16_t* _sourceData, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Copies a rectangular area from the framebuffer til a givene memory address, which is | ||||
|      * typically in the animation storage or a dynamic bitmap. | ||||
|      * | ||||
|      * @param      srcAddress     Source address (byte address). | ||||
|      * @param      srcStride      Source stride (number of bytes to advance to next line). | ||||
|      * @param      srcPixelOffset Source pixel offset (first pixel in first source byte). | ||||
|      * @param [in] dstAddress     If destination address (byte address). | ||||
|      * @param      dstStride      Destination stride (number of bytes to advance to next line). | ||||
|      * @param      dstPixelOffset Destination pixel offset (first pixel in destination byte). | ||||
|      * @param      width          The width of area (in pixels). | ||||
|      * @param      height         The height of area (in pixels). | ||||
|      */ | ||||
|     void copyRect(const uint8_t* srcAddress, uint16_t srcStride, uint8_t srcPixelOffset, uint8_t* RESTRICT dstAddress, uint16_t dstStride, uint8_t dstPixelOffset, uint16_t width, uint16_t height) const; | ||||
|  | ||||
| private: | ||||
|     class bwRLEdata | ||||
|     { | ||||
|     public: | ||||
|         bwRLEdata(const uint8_t* src = 0) | ||||
|             : data(src), thisHalfByte(0), nextHalfByte(0), rleByte(0), firstHalfByte(true), color(0), length(0) | ||||
|         { | ||||
|             init(src); | ||||
|         } | ||||
|         void init(const uint8_t* src) | ||||
|         { | ||||
|             data = src; | ||||
|             rleByte = 0; | ||||
|             firstHalfByte = true; | ||||
|             color = ~0; // Will be flipped to 0 by first call to getNextLength() below | ||||
|             if (src != 0) | ||||
|             { | ||||
|                 // Read two half-bytes ahead | ||||
|                 thisHalfByte = getNextHalfByte(); | ||||
|                 nextHalfByte = getNextHalfByte(); | ||||
|                 getNextLength(); | ||||
|             } | ||||
|         } | ||||
|         void skipNext(uint32_t skip) | ||||
|         { | ||||
|             for (;;) | ||||
|             { | ||||
|                 if (length > skip) // is the current length enough? | ||||
|                 { | ||||
|                     length -= skip; // Reduce the length | ||||
|                     skip = 0;       // No more to skip | ||||
|                     break;          // Done! | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     skip -= length;  // Skip the entire run | ||||
|                     getNextLength(); // Swap colors and Read length of next run | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         uint8_t getColor() const | ||||
|         { | ||||
|             return color; | ||||
|         } | ||||
|         uint32_t getLength() const | ||||
|         { | ||||
|             return length; | ||||
|         } | ||||
|  | ||||
|     private: | ||||
|         void getNextLength() | ||||
|         { | ||||
|             length = thisHalfByte; // Length is the next byte | ||||
|             // update read ahead buffer | ||||
|             thisHalfByte = nextHalfByte; | ||||
|             nextHalfByte = getNextHalfByte(); | ||||
|             color = ~color; // Update the color of next run | ||||
|             // If number after 'length' is 0 | ||||
|             while (thisHalfByte == 0) | ||||
|             { | ||||
|                 length <<= 4;           // Multiply length by 16 and | ||||
|                 length += nextHalfByte; // add the number after 0 | ||||
|                 // We have used the next two half bytes, read two new ones | ||||
|                 thisHalfByte = getNextHalfByte(); | ||||
|                 nextHalfByte = getNextHalfByte(); | ||||
|             } | ||||
|             if (length == 0) | ||||
|             { | ||||
|                 getNextLength(); | ||||
|             } | ||||
|         } | ||||
|         uint8_t getNextHalfByte() | ||||
|         { | ||||
|             if (firstHalfByte) // Start of new byte, read data from BW_RLE stream | ||||
|             { | ||||
|                 rleByte = *data++; | ||||
|             } | ||||
|             uint8_t length = rleByte & 0xF; // Read lower half | ||||
|             rleByte >>= 4;                  // Shift upper half down to make it ready | ||||
|             firstHalfByte = !firstHalfByte; // Toggle 'start of byte' | ||||
|             return length; | ||||
|         } | ||||
|         const uint8_t* data;  // Pointer to compressed data (BW_RLE) | ||||
|         uint8_t thisHalfByte; // The next half byte from the input | ||||
|         uint8_t nextHalfByte; // The next half byte after 'thisHalfByte' | ||||
|         uint8_t rleByte;      // Byte read from compressed data | ||||
|         bool firstHalfByte;   // Are we about to process first half byte of rleByte? | ||||
|         uint8_t color;        // Current color | ||||
|         uint32_t length;      // Number of pixels with the given color | ||||
|     }; | ||||
|  | ||||
|     friend class PainterBWBitmap; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * The class LCD1DebugPrinter implements the DebugPrinter interface for printing debug messages | ||||
|  * on top of 24bit framebuffer. | ||||
|  * | ||||
|  * @see DebugPrinter | ||||
|  */ | ||||
| class LCD1DebugPrinter : public DebugPrinter | ||||
| { | ||||
| public: | ||||
|     virtual void draw(const Rect& rect) const; | ||||
| }; | ||||
|  | ||||
| } // namespace touchgfx | ||||
|  | ||||
| #endif // LCD1BPP_HPP | ||||
| @@ -0,0 +1,672 @@ | ||||
| /** | ||||
|   ****************************************************************************** | ||||
|   * This file is part of the TouchGFX 4.16.1 distribution. | ||||
|   * | ||||
|   * <h2><center>© Copyright (c) 2021 STMicroelectronics. | ||||
|   * All rights reserved.</center></h2> | ||||
|   * | ||||
|   * This software component is licensed by ST under Ultimate Liberty license | ||||
|   * SLA0044, the "License"; You may not use this file except in compliance with | ||||
|   * the License. You may obtain a copy of the License at: | ||||
|   *                             www.st.com/SLA0044 | ||||
|   * | ||||
|   ****************************************************************************** | ||||
|   */ | ||||
|  | ||||
| /** | ||||
|  * @file platform/driver/lcd/LCD24bpp.hpp | ||||
|  * | ||||
|  * Declares the touchgfx::LCD24bpp and touchgfx::LCD24DebugPrinter classes. | ||||
|  */ | ||||
| #ifndef LCD24BPP_HPP | ||||
| #define LCD24BPP_HPP | ||||
|  | ||||
| #include <stdarg.h> | ||||
| #include <touchgfx/Bitmap.hpp> | ||||
| #include <touchgfx/Font.hpp> | ||||
| #include <touchgfx/TextProvider.hpp> | ||||
| #include <touchgfx/TextureMapTypes.hpp> | ||||
| #include <touchgfx/Unicode.hpp> | ||||
| #include <touchgfx/hal/HAL.hpp> | ||||
| #include <touchgfx/hal/Types.hpp> | ||||
| #include <touchgfx/lcd/LCD.hpp> | ||||
|  | ||||
| namespace touchgfx | ||||
| { | ||||
| #undef LCD | ||||
|  | ||||
| /** | ||||
|  * This class contains the various low-level drawing routines for drawing bitmaps, texts and | ||||
|  * rectangles on 16 bits per pixel displays. | ||||
|  * | ||||
|  * @see LCD | ||||
|  * | ||||
|  * @note All coordinates are expected to be in absolute coordinates! | ||||
|  */ | ||||
| class LCD24bpp : public LCD | ||||
| { | ||||
| public: | ||||
|     LCD24bpp(); | ||||
|  | ||||
|     virtual void drawPartialBitmap(const Bitmap& bitmap, int16_t x, int16_t y, const Rect& rect, uint8_t alpha = 255, bool useOptimized = true); | ||||
|  | ||||
|     virtual void blitCopy(const uint16_t* sourceData, const Rect& source, const Rect& blitRect, uint8_t alpha, bool hasTransparentPixels); | ||||
|  | ||||
|     virtual void blitCopy(const uint8_t* sourceData, Bitmap::BitmapFormat sourceFormat, const Rect& source, const Rect& blitRect, uint8_t alpha, bool hasTransparentPixels); | ||||
|  | ||||
|     virtual uint16_t* copyFrameBufferRegionToMemory(const Rect& visRegion, const Rect& absRegion, const BitmapId bitmapId); | ||||
|  | ||||
|     virtual void fillRect(const Rect& rect, colortype color, uint8_t alpha = 255); | ||||
|  | ||||
|     virtual uint8_t bitDepth() const | ||||
|     { | ||||
|         return 24; | ||||
|     } | ||||
|  | ||||
|     virtual Bitmap::BitmapFormat framebufferFormat() const | ||||
|     { | ||||
|         return Bitmap::RGB888; | ||||
|     } | ||||
|  | ||||
|     virtual uint16_t framebufferStride() const | ||||
|     { | ||||
|         return getFramebufferStride(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Framebuffer stride in bytes. The distance (in bytes) from the start of one | ||||
|      * framebuffer row, to the next. | ||||
|      * | ||||
|      * @return The number of bytes in one framebuffer row. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint16_t getFramebufferStride() | ||||
|     { | ||||
|         assert(HAL::FRAME_BUFFER_WIDTH > 0 && "HAL has not been initialized yet"); | ||||
|         return HAL::FRAME_BUFFER_WIDTH * 3; | ||||
|     } | ||||
|  | ||||
|     virtual colortype getColorFrom24BitRGB(uint8_t red, uint8_t green, uint8_t blue) const | ||||
|     { | ||||
|         return getColorFromRGB(red, green, blue); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets color from RGB. | ||||
|      * | ||||
|      * @param  red   The red. | ||||
|      * @param  green The green. | ||||
|      * @param  blue  The blue. | ||||
|      * | ||||
|      * @return The color from RGB. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static colortype getColorFromRGB(uint8_t red, uint8_t green, uint8_t blue) | ||||
|     { | ||||
|         return (red << 16) | (green << 8) | (blue); | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getRedColor(colortype color) const | ||||
|     { | ||||
|         return getRedFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets red from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The red from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getRedFromColor(colortype color) | ||||
|     { | ||||
|         return color >> 16; | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getGreenColor(colortype color) const | ||||
|     { | ||||
|         return getGreenFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets green from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The green from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getGreenFromColor(colortype color) | ||||
|     { | ||||
|         return color >> 8; | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getBlueColor(colortype color) const | ||||
|     { | ||||
|         return getBlueFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets blue from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The blue from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getBlueFromColor(colortype color) | ||||
|     { | ||||
|         return color; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for all image formats. This allows drawing any image | ||||
|      * using Bilinear Interpolation and Nearest Neighbor algorithms, but might use a lot of | ||||
|      * memory for the drawing algorithms. | ||||
|      */ | ||||
|     void enableTextureMapperAll(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_RGB888 image format. This allows drawing L8_RGB888 | ||||
|      * images using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_RGB888_BilinearInterpolation, | ||||
|      *      enableTextureMapperL8_RGB888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperL8_RGB888(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_RGB888 image format. This allows drawing L8_RGB888 | ||||
|      * images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_RGB888, enableTextureMapperL8_RGB888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperL8_RGB888_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_RGB888 image format. This allows drawing L8_RGB888 | ||||
|      * images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_RGB888, enableTextureMapperL8_RGB888_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperL8_RGB888_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_ARGB8888 image format. This allows drawing | ||||
|      * L8_ARGB8888 images using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_ARGB8888_BilinearInterpolation, | ||||
|      *      enableTextureMapperL8_ARGB8888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperL8_ARGB8888(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_ARGB8888 image format. This allows drawing | ||||
|      * L8_ARGB8888 images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_ARGB8888, enableTextureMapperL8_ARGB8888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperL8_ARGB8888_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_ARGB8888 image format. This allows drawing | ||||
|      * L8_ARGB8888 images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_ARGB8888, enableTextureMapperL8_ARGB8888_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperL8_ARGB8888_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for RGB888 image format. This allows drawing RGB888 | ||||
|      * images using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperRGB888_BilinearInterpolation, | ||||
|      *      enableTextureMapperRGB888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperRGB888(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for RGB888 image format. This allows drawing RGB888 | ||||
|      * images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperRGB888, enableTextureMapperRGB888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperRGB888_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for RGB888 image format. This allows drawing RGB888 | ||||
|      * images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperRGB888, enableTextureMapperRGB888_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperRGB888_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ARGB8888 image format. This allows drawing ARGB8888 | ||||
|      * images using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperARGB8888_BilinearInterpolation, | ||||
|      *      enableTextureMapperARGB8888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperARGB8888(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ARGB8888 image format. This allows drawing ARGB8888 | ||||
|      * images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperARGB8888, enableTextureMapperARGB8888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperARGB8888_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ARGB8888 image format. This allows drawing ARGB8888 | ||||
|      * images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperARGB8888, enableTextureMapperARGB8888_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperARGB8888_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for A4 image format. This allows drawing A4 images using | ||||
|      * Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperA4_BilinearInterpolation, enableTextureMapperA4_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperA4(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for A4 image format. This allows drawing A4 images using | ||||
|      * Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperA4, enableTextureMapperA4_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperA4_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for A4 image format. This allows drawing A4 images using | ||||
|      * Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperA4, enableTextureMapperA4_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperA4_NearestNeighbor(); | ||||
|  | ||||
| protected: | ||||
|     virtual DrawTextureMapScanLineBase* getTextureMapperDrawScanLine(const TextureSurface& texture, RenderingVariant renderVariant, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Find out how much to advance in the display buffer to get to the next pixel. | ||||
|      * | ||||
|      * @param  rotatedDisplay Is the display running in portrait mode? | ||||
|      * @param  textRotation   Rotation to perform. | ||||
|      * | ||||
|      * @return How much to advance to get to the next pixel. | ||||
|      */ | ||||
|     static int nextPixel(bool rotatedDisplay, TextRotation textRotation); | ||||
|  | ||||
|     /** | ||||
|      * Find out how much to advance in the display buffer to get to the next line. | ||||
|      * | ||||
|      * @param  rotatedDisplay Is the display running in portrait mode? | ||||
|      * @param  textRotation   Rotation to perform. | ||||
|      * | ||||
|      * @return How much to advance to get to the next line. | ||||
|      */ | ||||
|     static int nextLine(bool rotatedDisplay, TextRotation textRotation); | ||||
|  | ||||
|     virtual void drawGlyph(uint16_t* wbuf16, Rect widgetArea, int16_t x, int16_t y, uint16_t offsetX, uint16_t offsetY, const Rect& invalidatedArea, const GlyphNode* glyph, const uint8_t* glyphData, uint8_t byteAlignRow, colortype color, uint8_t bitsPerPixel, uint8_t alpha, TextRotation rotation); | ||||
|  | ||||
|     /** | ||||
|      * Blits a 2D source-array to the framebuffer. Per pixel alpha is not supported, only | ||||
|      * global alpha. | ||||
|      * | ||||
|      * @param  sourceData16 The source-array pointer (points to the beginning of the data). The | ||||
|      *                      sourceData must be stored as 16- bits RGB565 values. | ||||
|      * @param  source       The location and dimension of the source. | ||||
|      * @param  blitRect     A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha        The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                      solid, no blending) | ||||
|      */ | ||||
|     static void blitCopyRGB565(const uint16_t* sourceData16, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Blits a 2D source-array to the framebuffer performing alpha-blending per pixel as | ||||
|      * specified if ARGB8888 is not supported by the DMA a software blend is performed. | ||||
|      * | ||||
|      * @param  sourceData The source-array pointer (points to the beginning of the data). The | ||||
|      *                    sourceData must be stored as 32- bits ARGB8888 values. | ||||
|      * @param  source     The location and dimensions of the source. | ||||
|      * @param  blitRect   A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha      The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                    solid, no blending) | ||||
|      */ | ||||
|     static void blitCopyARGB8888(const uint32_t* sourceData, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Blits a 2D indexed 8-bit source to the framebuffer performing alpha-blending per | ||||
|      * pixel as specified if indexed format is not supported by the DMA a software blend is | ||||
|      * performed. | ||||
|      * | ||||
|      * @param  sourceData The source-indexes pointer (points to the beginning of the data). The | ||||
|      *                    sourceData must be stored as 8- bits indexes. | ||||
|      * @param  clutData   The source-clut pointer (points to the beginning of the CLUT color | ||||
|      *                    format and size data followed by colors entries. | ||||
|      * @param  source     The location and dimensions of the source. | ||||
|      * @param  blitRect   A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha      The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                    solid, no blending) | ||||
|      */ | ||||
|     static void blitCopyL8(const uint8_t* sourceData, const uint8_t* clutData, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Blits a 2D indexed 8-bit source to the framebuffer performing alpha-blending per | ||||
|      * pixel as specified if L8_ARGB8888 is not supported by the DMA a software blend is | ||||
|      * performed. | ||||
|      * | ||||
|      * @param  sourceData The source-indexes pointer (points to the beginning of the data). The | ||||
|      *                    sourceData must be stored as 8- bits indexes. | ||||
|      * @param  clutData   The source-clut pointer (points to the beginning of the CLUT color | ||||
|      *                    format and size data followed by colors entries stored as 32- | ||||
|      *                    bits (ARGB8888) format. | ||||
|      * @param  source     The location and dimensions of the source. | ||||
|      * @param  blitRect   A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha      The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                    solid, no blending) | ||||
|      */ | ||||
|     static void blitCopyL8_ARGB8888(const uint8_t* sourceData, const uint8_t* clutData, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Blits a 2D indexed 8-bit source to the framebuffer performing alpha-blending per | ||||
|      * pixel as specified if L8_RGB888 is not supported by the DMA a software blend is | ||||
|      * performed. | ||||
|      * | ||||
|      * @param  sourceData The source-indexes pointer (points to the beginning of the data). The | ||||
|      *                    sourceData must be stored as 8- bits indexes. | ||||
|      * @param  clutData   The source-clut pointer (points to the beginning of the CLUT color | ||||
|      *                    format and size data followed by colors entries stored as 32- | ||||
|      *                    bits (RGB888) format. | ||||
|      * @param  source     The location and dimensions of the source. | ||||
|      * @param  blitRect   A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha      The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                    solid, no blending) | ||||
|      */ | ||||
|     static void blitCopyL8_RGB888(const uint8_t* sourceData, const uint8_t* clutData, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
| private: | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB888_Opaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB888_Opaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB888_Opaque_NearestNeighbor_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB888_Opaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB888_Opaque_BilinearInterpolation_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_A4_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_A4_NearestNeighbor_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_A4_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_A4_BilinearInterpolation_NoGA; | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t bilinearInterpolate8(uint8_t c00, uint8_t c10, uint8_t x) | ||||
|     { | ||||
|         assert(x < 16); | ||||
|         return (c00 * (16 - x) + c10 * x) >> 4; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t bilinearInterpolate8(uint8_t c00, uint8_t c10, uint8_t c01, uint8_t c11, uint8_t x, uint8_t y) | ||||
|     { | ||||
|         assert(x < 16 && y < 16); | ||||
|         const uint16_t xy11 = x * y; | ||||
|         const uint16_t xy10 = 16 * x - xy11; | ||||
|         const uint16_t xy01 = 16 * y - xy11; | ||||
|         const uint16_t xy00 = 256 - (xy11 + xy10 + xy01); | ||||
|  | ||||
|         return (c00 * xy00 + c10 * xy10 + c01 * xy01 + c11 * xy11) >> 8; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t bilinearInterpolate888(uint32_t c00, uint32_t c10, uint8_t x) | ||||
|     { | ||||
|         assert(x < 16); | ||||
|         const uint16_t xy00 = 16 - x; | ||||
|  | ||||
|         return ((((c00 & 0xFF00FF) * xy00 + (c10 & 0xFF00FF) * x) >> 4) & 0xFF00FF) | ||||
|                | ((((c00 & 0x00FF00) * xy00 + (c10 & 0x00FF00) * x) >> 4) & 0x00FF00); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t bilinearInterpolate888(uint32_t c00, uint32_t c10, uint32_t c01, uint32_t c11, uint8_t x, uint8_t y) | ||||
|     { | ||||
|         assert(x < 16 && y < 16); | ||||
|         const uint16_t xy11 = x * y; | ||||
|         const uint16_t xy10 = 16 * x - xy11; | ||||
|         const uint16_t xy01 = 16 * y - xy11; | ||||
|         const uint16_t xy00 = 256 - (xy11 + xy10 + xy01); | ||||
|  | ||||
|         return ((((c00 & 0xFF00FF) * xy00 + (c10 & 0xFF00FF) * xy10 + (c01 & 0xFF00FF) * xy01 + (c11 & 0xFF00FF) * xy11) >> 8) & 0xFF00FF) | ||||
|                | ((((c00 & 0x00FF00) * xy00 + (c10 & 0x00FF00) * xy10 + (c01 & 0x00FF00) * xy01 + (c11 & 0x00FF00) * xy11) >> 8) & 0x00FF00); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div255_888(uint32_t val, uint8_t factor) | ||||
|     { | ||||
|         return div255rb((val & 0xFF00FF) * factor) | div255g((val & 0x00FF00) * factor); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div255_888_FFcheck(uint32_t val, uint8_t factor) | ||||
|     { | ||||
|         return factor < 0xFF ? div255_888(val, factor) : val; | ||||
|     } | ||||
|  | ||||
|     class DrawTextureMapScanLineBase24 : public DrawTextureMapScanLineBase | ||||
|     { | ||||
|     protected: | ||||
|         FORCE_INLINE_FUNCTION bool overrunCheckNearestNeighbor(uint8_t*& destBits, int& pixelsToDraw, fixed16_16& U, fixed16_16& V, fixed16_16 deltaU, fixed16_16 deltaV, const int16_t maxWidth, const int16_t maxHeight); | ||||
|         FORCE_INLINE_FUNCTION bool overrunCheckBilinearInterpolation(uint8_t*& destBits, int& pixelsToDraw, fixed16_16& U, fixed16_16& V, fixed16_16 deltaU, fixed16_16 deltaV, const int16_t maxWidth, const int16_t maxHeight); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase24 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint16_t* const textureBits, const uint8_t* const palette, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA : public DrawTextureMapScanLineBase24 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint16_t* const textureBits, const uint8_t* const palette, const int16_t bitmapWidth, const int UInt, const int VInt); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase24 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t* const textureBits8, const uint8_t* const palette8, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint8_t* const destBits, const uint8_t* const textureBits8, const uint8_t* const palette8, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA : public DrawTextureMapScanLineBase24 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t* const textureBits8, const uint8_t* const palette8, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|         void writePixelOnEdge(uint8_t* const destBits, const uint8_t* const textureBits8, const uint8_t* const palette8, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase24 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint16_t* const textureBits, const uint8_t* const palette, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_NoGA : public DrawTextureMapScanLineBase24 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint16_t* const textureBits, const uint8_t* const palette, const int16_t bitmapWidth, const int UInt, const int VInt); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase24 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t* const textureBits8, const uint32_t* const palette32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint8_t* const destBits, const uint8_t* const textureBits8, const uint32_t* const palette32, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_NoGA : public DrawTextureMapScanLineBase24 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t* const textureBits8, const uint32_t* const palette32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|         void writePixelOnEdge(uint8_t* const destBits, const uint8_t* const textureBits8, const uint32_t* const palette32, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB888_Opaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase24 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t* const textureBits8, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB888_Opaque_NearestNeighbor_NoGA : public DrawTextureMapScanLineBase24 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t* const textureBits8, const int16_t bitmapWidth, const int UInt, const int VInt); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB888_Opaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase24 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t* const textureBits8, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint8_t* const destBits, const uint8_t* const textureBits8, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB888_Opaque_BilinearInterpolation_NoGA : public DrawTextureMapScanLineBase24 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t* const textureBits8, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|         void writePixelOnEdge(uint8_t* const destBits, const uint8_t* const textureBits8, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase24 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_NoGA : public DrawTextureMapScanLineBase24 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int UInt, const int VInt); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase24 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint8_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_NoGA : public DrawTextureMapScanLineBase24 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|         void writePixelOnEdge(uint8_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_NearestNeighbor_GA : public DrawTextureMapScanLineBase24 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t a4, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_NearestNeighbor_NoGA : public DrawTextureMapScanLineBase24 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t a4); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_BilinearInterpolation_GA : public DrawTextureMapScanLineBase24 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapStride, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint8_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapStride, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_BilinearInterpolation_NoGA : public DrawTextureMapScanLineBase24 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapStride, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|         void writePixelOnEdge(uint8_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapStride, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|     }; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * The class LCD24DebugPrinter implements the DebugPrinter interface for printing debug messages | ||||
|  * on top of 24bit framebuffer. | ||||
|  * | ||||
|  * @see DebugPrinter | ||||
|  */ | ||||
| class LCD24DebugPrinter : public DebugPrinter | ||||
| { | ||||
| public: | ||||
|     virtual void draw(const Rect& rect) const; | ||||
| }; | ||||
|  | ||||
| } // namespace touchgfx | ||||
|  | ||||
| #endif // LCD24BPP_HPP | ||||
| @@ -0,0 +1,425 @@ | ||||
| /** | ||||
|   ****************************************************************************** | ||||
|   * This file is part of the TouchGFX 4.16.1 distribution. | ||||
|   * | ||||
|   * <h2><center>© Copyright (c) 2021 STMicroelectronics. | ||||
|   * All rights reserved.</center></h2> | ||||
|   * | ||||
|   * This software component is licensed by ST under Ultimate Liberty license | ||||
|   * SLA0044, the "License"; You may not use this file except in compliance with | ||||
|   * the License. You may obtain a copy of the License at: | ||||
|   *                             www.st.com/SLA0044 | ||||
|   * | ||||
|   ****************************************************************************** | ||||
|   */ | ||||
|  | ||||
| /** | ||||
|  * @file platform/driver/lcd/LCD2bpp.hpp | ||||
|  * | ||||
|  * Declares the touchgfx::LCD2bpp and touchgfx::LCD2DebugPrinter class. | ||||
|  */ | ||||
| #ifndef LCD2BPP_HPP | ||||
| #define LCD2BPP_HPP | ||||
|  | ||||
| #include <stdarg.h> | ||||
| #include <touchgfx/Bitmap.hpp> | ||||
| #include <touchgfx/Font.hpp> | ||||
| #include <touchgfx/TextProvider.hpp> | ||||
| #include <touchgfx/TextureMapTypes.hpp> | ||||
| #include <touchgfx/Unicode.hpp> | ||||
| #include <touchgfx/hal/HAL.hpp> | ||||
| #include <touchgfx/hal/Types.hpp> | ||||
| #include <touchgfx/lcd/LCD.hpp> | ||||
|  | ||||
| namespace touchgfx | ||||
| { | ||||
| #undef LCD | ||||
| #define USE_LSB | ||||
|  | ||||
| /** | ||||
|  * This class contains the various low-level drawing routines for drawing bitmaps, texts and | ||||
|  * rectangles on 2 bits per pixel grayscale displays. | ||||
|  * | ||||
|  * @see LCD | ||||
|  * | ||||
|  * @note All coordinates are expected to be in absolute coordinates! | ||||
|  */ | ||||
| class LCD2bpp : public LCD | ||||
| { | ||||
| public: | ||||
|     LCD2bpp(); | ||||
|  | ||||
|     virtual void drawPartialBitmap(const Bitmap& bitmap, int16_t x, int16_t y, const Rect& rect, uint8_t alpha = 255, bool useOptimized = true); | ||||
|  | ||||
|     virtual void blitCopy(const uint16_t* sourceData, const Rect& source, const Rect& blitRect, uint8_t alpha, bool hasTransparentPixels); | ||||
|  | ||||
|     virtual void blitCopy(const uint8_t* sourceData, Bitmap::BitmapFormat sourceFormat, const Rect& source, const Rect& blitRect, uint8_t alpha, bool hasTransparentPixels); | ||||
|  | ||||
|     virtual uint16_t* copyFrameBufferRegionToMemory(const Rect& visRegion, const Rect& absRegion, const BitmapId bitmapId); | ||||
|  | ||||
|     virtual void fillRect(const Rect& rect, colortype color, uint8_t alpha = 255); | ||||
|  | ||||
|     virtual uint8_t bitDepth() const | ||||
|     { | ||||
|         return 2; | ||||
|     } | ||||
|  | ||||
|     virtual Bitmap::BitmapFormat framebufferFormat() const | ||||
|     { | ||||
|         return Bitmap::GRAY2; | ||||
|     } | ||||
|  | ||||
|     virtual uint16_t framebufferStride() const | ||||
|     { | ||||
|         return getFramebufferStride(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Framebuffer stride in bytes. The distance (in bytes) from the start of one | ||||
|      * framebuffer row, to the next. | ||||
|      * | ||||
|      * @return The number of bytes in one framebuffer row. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint16_t getFramebufferStride() | ||||
|     { | ||||
|         assert(HAL::FRAME_BUFFER_WIDTH > 0 && "HAL has not been initialized yet"); | ||||
|         return (HAL::FRAME_BUFFER_WIDTH + 3) / 4; | ||||
|     } | ||||
|  | ||||
|     virtual colortype getColorFrom24BitRGB(uint8_t red, uint8_t green, uint8_t blue) const | ||||
|     { | ||||
|         return getColorFromRGB(red, green, blue); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Generates a color representation to be used on the LCD, based on 24 bit RGB values. | ||||
|      * | ||||
|      * @param  red   Value of the red part (0-255). | ||||
|      * @param  green Value of the green part (0-255). | ||||
|      * @param  blue  Value of the blue part (0-255). | ||||
|      * | ||||
|      * @return The color representation depending on LCD color format. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static colortype getColorFromRGB(uint8_t red, uint8_t green, uint8_t blue) | ||||
|     { | ||||
|         // Find the GRAY value (http://en.wikipedia.org/wiki/Luma_%28video%29) rounded to nearest integer | ||||
|         return (red * 54 + green * 183 + blue * 19) >> 14; | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getRedColor(colortype color) const | ||||
|     { | ||||
|         return getRedFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets red from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The red from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getRedFromColor(colortype color) | ||||
|     { | ||||
|         return (color & 0x3) * 0x55; | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getGreenColor(colortype color) const | ||||
|     { | ||||
|         return getGreenFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets green from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The green from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getGreenFromColor(colortype color) | ||||
|     { | ||||
|         return (color & 0x3) * 0x55; | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getBlueColor(colortype color) const | ||||
|     { | ||||
|         return getBlueFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets blue from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The blue from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getBlueFromColor(colortype color) | ||||
|     { | ||||
|         return (color & 0x3) * 0x55; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for all image formats. This allows drawing any image | ||||
|      * using Bilinear Interpolation and Nearest Neighbor algorithms, but might use a lot of | ||||
|      * memory for the drawing algorithms. | ||||
|      */ | ||||
|     void enableTextureMapperAll(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for GRAY2 image format. This allows drawing GRAY2 images | ||||
|      * using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperGRAY2_BilinearInterpolation, | ||||
|      *      enableTextureMapperGRAY2_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperGRAY2(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for GRAY2 image format. This allows drawing GRAY2 images | ||||
|      * using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperGRAY2, enableTextureMapperGRAY2_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperGRAY2_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for GRAY2 image format. This allows drawing GRAY2 images | ||||
|      * using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperGRAY2, enableTextureMapperGRAY2_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperGRAY2_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Shift value to get the right pixel in a byte. | ||||
|      * | ||||
|      * @param  offset The offset. | ||||
|      * | ||||
|      * @return The shift value. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static int shiftVal(int offset) | ||||
|     { | ||||
| #ifdef USE_LSB | ||||
|         return (offset & 3) << 1; | ||||
| #else | ||||
|         return (3 - (offset & 3)) << 1; | ||||
| #endif | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get pixel from buffer/image. | ||||
|      * | ||||
|      * @param  addr   The address. | ||||
|      * @param  offset The offset. | ||||
|      * | ||||
|      * @return The pixel value. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getPixel(const uint8_t* addr, int offset) | ||||
|     { | ||||
|         return (addr[offset >> 2] >> shiftVal(offset)) & 3; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get pixel from buffer/image. | ||||
|      * | ||||
|      * @param  addr   The address. | ||||
|      * @param  offset The offset. | ||||
|      * | ||||
|      * @return The pixel value. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getPixel(const uint16_t* addr, int offset) | ||||
|     { | ||||
|         return getPixel(reinterpret_cast<const uint8_t*>(addr), offset); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Set pixel in buffer. | ||||
|      * | ||||
|      * @param [in] addr   The address. | ||||
|      * @param      offset The offset. | ||||
|      * @param      value  The value. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static void setPixel(uint8_t* addr, int offset, uint8_t value) | ||||
|     { | ||||
|         int shift = shiftVal(offset); | ||||
|         addr[offset >> 2] = (addr[offset >> 2] & ~(3 << shift)) | ((value & 3) << shift); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Set pixel in buffer. | ||||
|      * | ||||
|      * @param [in] addr   The address. | ||||
|      * @param      offset The offset. | ||||
|      * @param      value  The value. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static void setPixel(uint16_t* addr, int offset, uint8_t value) | ||||
|     { | ||||
|         setPixel(reinterpret_cast<uint8_t*>(addr), offset, value); | ||||
|     } | ||||
|  | ||||
| protected: | ||||
|     static const uint8_t alphaTable2bpp[256]; ///< The alpha lookup table to avoid arithmetics when alpha blending | ||||
|  | ||||
|     virtual DrawTextureMapScanLineBase* getTextureMapperDrawScanLine(const TextureSurface& texture, RenderingVariant renderVariant, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Find out how much to advance in the display buffer to get to the next pixel. | ||||
|      * | ||||
|      * @param  rotatedDisplay Is the display running in portrait mode? | ||||
|      * @param  textRotation   Rotation to perform. | ||||
|      * | ||||
|      * @return How much to advance to get to the next pixel. | ||||
|      */ | ||||
|     static int nextPixel(bool rotatedDisplay, TextRotation textRotation); | ||||
|  | ||||
|     /** | ||||
|      * Find out how much to advance in the display buffer to get to the next line. | ||||
|      * | ||||
|      * @param  rotatedDisplay Is the display running in portrait mode? | ||||
|      * @param  textRotation   Rotation to perform. | ||||
|      * | ||||
|      * @return How much to advance to get to the next line. | ||||
|      */ | ||||
|     static int nextLine(bool rotatedDisplay, TextRotation textRotation); | ||||
|  | ||||
|     virtual void drawGlyph(uint16_t* wbuf16, Rect widgetArea, int16_t x, int16_t y, uint16_t offsetX, uint16_t offsetY, const Rect& invalidatedArea, const GlyphNode* glyph, const uint8_t* glyphData, uint8_t byteAlignRow, colortype color, uint8_t bitsPerPixel, uint8_t alpha, TextRotation rotation); | ||||
|  | ||||
|     /** | ||||
|      * Blit a 2D source-array to the framebuffer performing alpha-blending per pixel as | ||||
|      * specified Performs always a software blend. | ||||
|      * | ||||
|      * @param  sourceData16    The source-array pointer (points to the beginning of the | ||||
|      *                         data). The sourceData must be stored as 2bpp GRAY2 values. | ||||
|      * @param  sourceAlphaData The alpha channel array pointer (points to the beginning of | ||||
|      *                         the data) | ||||
|      * @param  source          The location and dimensions of the source. | ||||
|      * @param  blitRect        A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha           The alpha value to use for blending applied to the whole | ||||
|      *                         image (255 = solid, no blending) | ||||
|      */ | ||||
|     static void blitCopyAlphaPerPixel(const uint16_t* sourceData16, const uint8_t* sourceAlphaData, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Copies a rectangular area. | ||||
|      * | ||||
|      * @param      srcAddress     Source address (byte address). | ||||
|      * @param      srcStride      Source stride (number of bytes to advance to next line). | ||||
|      * @param      srcPixelOffset Source pixel offset (first pixel in first source byte). | ||||
|      * @param [in] dstAddress     If destination address (byte address). | ||||
|      * @param      dstStride      Destination stride (number of bytes to advance to next line). | ||||
|      * @param      dstPixelOffset Destination pixel offset (first pixel in destination byte). | ||||
|      * @param      width          The width of area (in pixels). | ||||
|      * @param      height         The height of area (in pixels). | ||||
|      */ | ||||
|     void copyRect(const uint8_t* srcAddress, uint16_t srcStride, uint8_t srcPixelOffset, uint8_t* RESTRICT dstAddress, uint16_t dstStride, uint8_t dstPixelOffset, uint16_t width, uint16_t height) const; | ||||
|  | ||||
| private: | ||||
|     DrawTextureMapScanLineBase* textureMapper_GRAY2_NonOpaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_GRAY2_Opaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_GRAY2_NonOpaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_GRAY2_Opaque_BilinearInterpolation_GA; | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t bilinearInterpolate8(uint8_t c00, uint8_t c10, uint8_t x) | ||||
|     { | ||||
|         assert(x < 16); | ||||
|         uint16_t xy10 = 16 * x; | ||||
|         uint16_t xy00 = 256 - xy10; | ||||
|  | ||||
|         return (c00 * xy00 + c10 * xy10) >> 8; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t bilinearInterpolate8(uint8_t c00, uint8_t c10, uint8_t c01, uint8_t c11, uint8_t x, uint8_t y) | ||||
|     { | ||||
|         assert(x < 16 && y < 16); | ||||
|         uint16_t xy11 = x * y; | ||||
|         uint16_t xy10 = 16 * x - xy11; | ||||
|         uint16_t xy01 = 16 * y - xy11; | ||||
|         uint16_t xy00 = 256 - (xy11 + xy10 + xy01); | ||||
|  | ||||
|         return (c00 * xy00 + c10 * xy10 + c01 * xy01 + c11 * xy11) >> 8; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t div255_2(uint16_t value) | ||||
|     { | ||||
|         return div255(value * 0x55) >> 6; | ||||
|     } | ||||
|  | ||||
|     class DrawTextureMapScanLineBase2 : public DrawTextureMapScanLineBase | ||||
|     { | ||||
|     protected: | ||||
|         FORCE_INLINE_FUNCTION bool overrunCheckBilinearInterpolation(uint32_t& destOffset, int& pixelsToDraw, fixed16_16& U, fixed16_16& V, fixed16_16 deltaU, fixed16_16 deltaV, const int16_t maxWidth, const int16_t maxHeight); | ||||
|         FORCE_INLINE_FUNCTION bool overrunCheckNearestNeighbor(uint32_t& destOffset, int& pixelsToDraw, fixed16_16& U, fixed16_16& V, fixed16_16 deltaU, fixed16_16 deltaV, const int16_t maxWidth, const int16_t maxHeight); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_GRAY2_NonOpaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase2 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* destAddress, uint32_t const destOffset, const uint16_t* const textureBits, const uint8_t* const alphaBits, const int16_t bitmapStride, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint16_t* destAddress, uint32_t const destOffset, const uint16_t* const textureBits, const uint8_t* const alphaBits, const int16_t bitmapStride, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_GRAY2_Opaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase2 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* destAddress, uint32_t const destOffset, const uint16_t* const textureBits, const int16_t bitmapStride, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint16_t* destAddress, uint32_t const destOffset, const uint16_t* const textureBits, const int16_t bitmapStride, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_GRAY2_NonOpaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase2 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* destAddress, uint32_t const destOffset, const uint16_t* const textureBits, const uint8_t* const alphaBits, const int16_t bitmapStride, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_GRAY2_Opaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase2 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* destAddress, uint32_t const destOffset, const uint16_t* const textureBits, const int16_t bitmapStride, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_NearestNeighbor_GA : public DrawTextureMapScanLineBase2 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destAddress, const uint32_t destOffset, const uint8_t a4, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_BilinearInterpolation_GA : public DrawTextureMapScanLineBase2 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destAddress, const uint32_t destOffset, const uint16_t* const textureBits, const uint32_t offset, const int16_t bitmapStride, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint16_t* const destAddress, const uint32_t destOffset, const uint16_t* const textureBits, const uint16_t bitmapStride, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * The class LCD2DebugPrinter implements the DebugPrinter interface for printing debug messages | ||||
|  * on top of 24bit framebuffer. | ||||
|  * | ||||
|  * @see DebugPrinter | ||||
|  */ | ||||
| class LCD2DebugPrinter : public DebugPrinter | ||||
| { | ||||
| public: | ||||
|     virtual void draw(const Rect& rect) const; | ||||
| }; | ||||
|  | ||||
| } // namespace touchgfx | ||||
|  | ||||
| #endif // LCD2BPP_HPP | ||||
| @@ -0,0 +1,931 @@ | ||||
| /** | ||||
|   ****************************************************************************** | ||||
|   * This file is part of the TouchGFX 4.16.1 distribution. | ||||
|   * | ||||
|   * <h2><center>© Copyright (c) 2021 STMicroelectronics. | ||||
|   * All rights reserved.</center></h2> | ||||
|   * | ||||
|   * This software component is licensed by ST under Ultimate Liberty license | ||||
|   * SLA0044, the "License"; You may not use this file except in compliance with | ||||
|   * the License. You may obtain a copy of the License at: | ||||
|   *                             www.st.com/SLA0044 | ||||
|   * | ||||
|   ****************************************************************************** | ||||
|   */ | ||||
|  | ||||
| /** | ||||
|  * @file platform/driver/lcd/LCD32bpp.hpp | ||||
|  * | ||||
|  * Declares the touchgfx::LCD32bpp and touchgfx::LCD32DebugPrinter classes. | ||||
|  */ | ||||
| #ifndef LCD32BPP_HPP | ||||
| #define LCD32BPP_HPP | ||||
|  | ||||
| #include <stdarg.h> | ||||
| #include <touchgfx/Bitmap.hpp> | ||||
| #include <touchgfx/Font.hpp> | ||||
| #include <touchgfx/TextProvider.hpp> | ||||
| #include <touchgfx/TextureMapTypes.hpp> | ||||
| #include <touchgfx/Unicode.hpp> | ||||
| #include <touchgfx/hal/HAL.hpp> | ||||
| #include <touchgfx/hal/Types.hpp> | ||||
| #include <touchgfx/lcd/LCD.hpp> | ||||
|  | ||||
| namespace touchgfx | ||||
| { | ||||
| #undef LCD | ||||
|  | ||||
| /** | ||||
|  * This class contains the various low-level drawing routines for drawing bitmaps, texts and | ||||
|  * rectangles on 16 bits per pixel displays. | ||||
|  * | ||||
|  * @see LCD | ||||
|  * | ||||
|  * @note All coordinates are expected to be in absolute coordinates! | ||||
|  */ | ||||
| class LCD32bpp : public LCD | ||||
| { | ||||
| public: | ||||
|     LCD32bpp(); | ||||
|  | ||||
|     virtual void drawPartialBitmap(const Bitmap& bitmap, int16_t x, int16_t y, const Rect& rect, uint8_t alpha = 255, bool useOptimized = true); | ||||
|  | ||||
|     virtual void blitCopy(const uint16_t* sourceData, const Rect& source, const Rect& blitRect, uint8_t alpha, bool hasTransparentPixels); | ||||
|  | ||||
|     virtual void blitCopy(const uint8_t* sourceData, Bitmap::BitmapFormat sourceFormat, const Rect& source, const Rect& blitRect, uint8_t alpha, bool hasTransparentPixels); | ||||
|  | ||||
|     virtual uint16_t* copyFrameBufferRegionToMemory(const Rect& visRegion, const Rect& absRegion, const BitmapId bitmapId); | ||||
|  | ||||
|     virtual void fillRect(const Rect& rect, colortype color, uint8_t alpha = 255); | ||||
|  | ||||
|     virtual uint8_t bitDepth() const | ||||
|     { | ||||
|         return 32; | ||||
|     } | ||||
|  | ||||
|     virtual Bitmap::BitmapFormat framebufferFormat() const | ||||
|     { | ||||
|         return Bitmap::ARGB8888; | ||||
|     } | ||||
|  | ||||
|     virtual uint16_t framebufferStride() const | ||||
|     { | ||||
|         return getFramebufferStride(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Framebuffer stride in bytes. The distance (in bytes) from the start of one | ||||
|      * framebuffer row, to the next. | ||||
|      * | ||||
|      * @return The number of bytes in one framebuffer row. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint16_t getFramebufferStride() | ||||
|     { | ||||
|         assert(HAL::FRAME_BUFFER_WIDTH > 0 && "HAL has not been initialized yet"); | ||||
|         return HAL::FRAME_BUFFER_WIDTH * 4; | ||||
|     } | ||||
|  | ||||
|     virtual colortype getColorFrom24BitRGB(uint8_t red, uint8_t green, uint8_t blue) const | ||||
|     { | ||||
|         return getColorFromRGB(red, green, blue); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Generates a color representation to be used on the LCD, based on 24 bit RGB values. | ||||
|      * | ||||
|      * @param  red   Value of the red part (0-255). | ||||
|      * @param  green Value of the green part (0-255). | ||||
|      * @param  blue  Value of the blue part (0-255). | ||||
|      * | ||||
|      * @return The color from RGB. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static colortype getColorFromRGB(uint8_t red, uint8_t green, uint8_t blue) | ||||
|     { | ||||
|         return 0xFF000000 | (red << 16) | (green << 8) | (blue); | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getRedColor(colortype color) const | ||||
|     { | ||||
|         return getRedFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets red from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The red from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getRedFromColor(colortype color) | ||||
|     { | ||||
|         return (color >> 16) & 0xFF; | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getGreenColor(colortype color) const | ||||
|     { | ||||
|         return getGreenFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets green from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The green from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getGreenFromColor(colortype color) | ||||
|     { | ||||
|         return (color >> 8) & 0xFF; | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getBlueColor(colortype color) const | ||||
|     { | ||||
|         return getBlueFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets blue from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The blue from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getBlueFromColor(colortype color) | ||||
|     { | ||||
|         return color & 0xFF; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for all image formats. This allows drawing any image | ||||
|      * using Bilinear Interpolation and Nearest Neighbor algorithms, but might use a lot of | ||||
|      * memory for the drawing algorithms. | ||||
|      */ | ||||
|     void enableTextureMapperAll(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_RGB565 image format. This allows drawing L8_RGB565 | ||||
|      * images using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_RGB565_BilinearInterpolation, | ||||
|      *      enableTextureMapperL8_RGB565_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperL8_RGB565(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_RGB565 image format. This allows drawing L8_RGB565 | ||||
|      * images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_RGB565, enableTextureMapperL8_RGB565_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperL8_RGB565_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_RGB565 image format. This allows drawing L8_RGB565 | ||||
|      * images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_RGB565, enableTextureMapperL8_RGB565_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperL8_RGB565_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_RGB888 image format. This allows drawing L8_RGB888 | ||||
|      * images using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_RGB888_BilinearInterpolation, | ||||
|      *      enableTextureMapperL8_RGB888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperL8_RGB888(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_RGB888 image format. This allows drawing L8_RGB888 | ||||
|      * images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_RGB888, enableTextureMapperL8_RGB888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperL8_RGB888_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_RGB888 image format. This allows drawing L8_RGB888 | ||||
|      * images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_RGB888, enableTextureMapperL8_RGB888_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperL8_RGB888_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_ARGB8888 image format. This allows drawing | ||||
|      * L8_ARGB8888 images using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_ARGB8888_BilinearInterpolation, | ||||
|      *      enableTextureMapperL8_ARGB8888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperL8_ARGB8888(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_ARGB8888 image format. This allows drawing | ||||
|      * L8_ARGB8888 images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_ARGB8888, enableTextureMapperL8_ARGB8888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperL8_ARGB8888_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for L8_ARGB8888 image format. This allows drawing | ||||
|      * L8_ARGB8888 images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperL8_ARGB8888, enableTextureMapperL8_ARGB8888_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperL8_ARGB8888_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for RGB565 image format. This allows drawing RGB565 | ||||
|      * images using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      */ | ||||
|     void enableTextureMapperRGB565(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for Opaque RGB565 image format. This allows drawing | ||||
|      * RGB565 images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperRGB565, enableTextureMapperRGB565_NonOpaque_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperRGB565_Opaque_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for NonOpaque RGB565 image format. This allows drawing | ||||
|      * RGB565 images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperRGB565, enableTextureMapperRGB565_Opaque_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperRGB565_NonOpaque_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for Opaque RGB565 image format. This allows drawing | ||||
|      * RGB565 images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperRGB565, enableTextureMapperRGB565_NonOpaque_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperRGB565_Opaque_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for NonOpaque RGB565 image format. This allows drawing | ||||
|      * RGB565 images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperRGB565, enableTextureMapperRGB565_Opaque_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperRGB565_NonOpaque_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for RGB888 image format. This allows drawing RGB888 | ||||
|      * images using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperRGB888_BilinearInterpolation, | ||||
|      *      enableTextureMapperRGB888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperRGB888(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for RGB888 image format. This allows drawing RGB888 | ||||
|      * images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperRGB888, enableTextureMapperRGB888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperRGB888_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for RGB888 image format. This allows drawing RGB888 | ||||
|      * images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperRGB888, enableTextureMapperRGB888_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperRGB888_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ARGB8888 image format. This allows drawing ARGB8888 | ||||
|      * images using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperARGB8888_BilinearInterpolation, | ||||
|      *      enableTextureMapperARGB8888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperARGB8888(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ARGB8888 image format. This allows drawing ARGB8888 | ||||
|      * images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperARGB8888, enableTextureMapperARGB8888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperARGB8888_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ARGB8888 image format. This allows drawing ARGB8888 | ||||
|      * images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperARGB8888, enableTextureMapperARGB8888_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperARGB8888_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for A4 image format. This allows drawing A4 images using | ||||
|      * Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperA4_BilinearInterpolation, enableTextureMapperA4_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperA4(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for A4 image format. This allows drawing A4 images using | ||||
|      * Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperA4, enableTextureMapperA4_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperA4_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for A4 image format. This allows drawing A4 images using | ||||
|      * Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperA4, enableTextureMapperA4_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperA4_NearestNeighbor(); | ||||
|  | ||||
| protected: | ||||
|     virtual DrawTextureMapScanLineBase* getTextureMapperDrawScanLine(const TextureSurface& texture, RenderingVariant renderVariant, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Find out how much to advance in the display buffer to get to the next pixel. | ||||
|      * | ||||
|      * @param  rotatedDisplay Is the display running in portrait mode? | ||||
|      * @param  textRotation   Rotation to perform. | ||||
|      * | ||||
|      * @return How much to advance to get to the next pixel. | ||||
|      */ | ||||
|     static int nextPixel(bool rotatedDisplay, TextRotation textRotation); | ||||
|  | ||||
|     /** | ||||
|      * Find out how much to advance in the display buffer to get to the next line. | ||||
|      * | ||||
|      * @param  rotatedDisplay Is the display running in portrait mode? | ||||
|      * @param  textRotation   Rotation to perform. | ||||
|      * | ||||
|      * @return How much to advance to get to the next line. | ||||
|      */ | ||||
|     static int nextLine(bool rotatedDisplay, TextRotation textRotation); | ||||
|  | ||||
|     virtual void drawGlyph(uint16_t* wbuf16, Rect widgetArea, int16_t x, int16_t y, uint16_t offsetX, uint16_t offsetY, const Rect& invalidatedArea, const GlyphNode* glyph, const uint8_t* glyphData, uint8_t byteAlignRow, colortype color, uint8_t bitsPerPixel, uint8_t alpha, TextRotation rotation); | ||||
|  | ||||
|     /** | ||||
|      * Blits a 2D source-array to the framebuffer performing alpha-blending per pixel as | ||||
|      * specified. If RGB888 is not supported by the DMA a software blend is performed. | ||||
|      * | ||||
|      * @param  sourceData16 The source-array pointer (points to the beginning of the data). The | ||||
|      *                      sourceData must be stored as 24- bits RGB888 values. | ||||
|      * @param  source       The location and dimensions of the source. | ||||
|      * @param  blitRect     A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha        The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                      solid, no blending) | ||||
|      */ | ||||
|     static void blitCopyRGB888(const uint16_t* sourceData16, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Blits a 2D source-array to the framebuffer performing alpha-blending per pixel as | ||||
|      * specified. If! RGB565 is not supported by the DMA a software blend is performed. | ||||
|      * | ||||
|      * @param  sourceData16 The source-array pointer (points to the beginning of the data). The | ||||
|      *                      sourceData must be stored as 16- bits RGB565 values. | ||||
|      * @param  source       The location and dimensions of the source. | ||||
|      * @param  blitRect     A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha        The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                      solid, no blending) | ||||
|      */ | ||||
|     static void blitCopyRGB565(const uint16_t* sourceData16, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Blits a 2D indexed 8-bit source to the framebuffer performing alpha-blending per | ||||
|      * pixel as specified if indexed format is not supported by the DMA a software blend is | ||||
|      * performed. | ||||
|      * | ||||
|      * @param  sourceData The source-indexes pointer (points to the beginning of the data). The | ||||
|      *                    sourceData must be stored as 8- bits indexes. | ||||
|      * @param  clutData   The source-clut pointer (points to the beginning of the CLUT color | ||||
|      *                    format and size data followed by colors entries. | ||||
|      * @param  source     The location and dimensions of the source. | ||||
|      * @param  blitRect   A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha      The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                    solid, no blending) | ||||
|      */ | ||||
|     static void blitCopyL8(const uint8_t* sourceData, const uint8_t* clutData, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Blits a 2D indexed 8-bit source to the framebuffer performing alpha-blending per | ||||
|      * pixel as specified if L8_ARGB8888 is not supported by the DMA a software blend is | ||||
|      * performed. | ||||
|      * | ||||
|      * @param  sourceData The source-indexes pointer (points to the beginning of the data). The | ||||
|      *                    sourceData must be stored as 8- bits indexes. | ||||
|      * @param  clutData   The source-clut pointer (points to the beginning of the CLUT color | ||||
|      *                    format and size data followed by colors entries stored as 32- | ||||
|      *                    bits (ARGB8888) format. | ||||
|      * @param  source     The location and dimensions of the source. | ||||
|      * @param  blitRect   A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha      The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                    solid, no blending) | ||||
|      */ | ||||
|     static void blitCopyL8_ARGB8888(const uint8_t* sourceData, const uint8_t* clutData, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Blits a 2D indexed 8-bit source to the framebuffer performing alpha-blending per | ||||
|      * pixel as specified if L8_RGB888 is not supported by the DMA a software blend is | ||||
|      * performed. | ||||
|      * | ||||
|      * @param  sourceData The source-indexes pointer (points to the beginning of the data). The | ||||
|      *                    sourceData must be stored as 8- bits indexes. | ||||
|      * @param  clutData   The source-clut pointer (points to the beginning of the CLUT color | ||||
|      *                    format and size data followed by colors entries stored as 32- | ||||
|      *                    bits (RGB888) format. | ||||
|      * @param  source     The location and dimensions of the source. | ||||
|      * @param  blitRect   A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha      The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                    solid, no blending) | ||||
|      */ | ||||
|     static void blitCopyL8_RGB888(const uint8_t* sourceData, const uint8_t* clutData, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Blits a 2D indexed 8-bit source to the framebuffer performing alpha-blending per | ||||
|      * pixel as specified if L8_RGB565 is not supported by the DMA a software blend is | ||||
|      * performed. | ||||
|      * | ||||
|      * @param  sourceData The source-indexes pointer (points to the beginning of the data). The | ||||
|      *                    sourceData must be stored as 8- bits indexes. | ||||
|      * @param  clutData   The source-clut pointer (points to the beginning of the CLUT color | ||||
|      *                    format and size data followed by colors entries stored as 16- | ||||
|      *                    bits (RGB565) format. | ||||
|      * @param  source     The location and dimensions of the source. | ||||
|      * @param  blitRect   A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha      The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                    solid, no blending) | ||||
|      */ | ||||
|     static void blitCopyL8_RGB565(const uint8_t* sourceData, const uint8_t* clutData, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
| private: | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB565_Opaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB888_Opaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB565_NonOpaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB565_Opaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB565_Opaque_NearestNeighbor_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB565_NonOpaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB565_Opaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB565_Opaque_BilinearInterpolation_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB888_Opaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB888_Opaque_NearestNeighbor_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB888_Opaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGB888_Opaque_BilinearInterpolation_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_A4_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_A4_NearestNeighbor_NoGA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_A4_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_A4_BilinearInterpolation_NoGA; | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t expandRgb565(uint16_t c) | ||||
|     { | ||||
|         return ((c & 0x07E0) << 16) | (c & ~0x07E0); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint16_t compactRgb565(uint32_t c) | ||||
|     { | ||||
|         return ((c >> 16) & 0x07E0) | (c & ~0x07E0); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t convertRgb565toArgb8888(uint16_t rgb565) | ||||
|     { | ||||
|         uint8_t r = (rgb565 & 0xF800) >> 8; | ||||
|         r |= r >> 5; | ||||
|         uint8_t g = (rgb565 & 0x07E0) >> 3; | ||||
|         g |= g >> 6; | ||||
|         uint8_t b = rgb565 << 3; | ||||
|         b |= b >> 5; | ||||
|         return (r << 16) | (g << 8) | b; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static void copy888(const uint8_t* const rgb888, uint8_t* const destBits) | ||||
|     { | ||||
|         destBits[0] = rgb888[0]; | ||||
|         destBits[1] = rgb888[1]; | ||||
|         destBits[2] = rgb888[2]; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static void alphaBlend888(const uint8_t r, const uint8_t g, const uint8_t b, uint8_t* const destBits, const uint8_t alpha, const uint8_t ialpha) | ||||
|     { | ||||
|         destBits[0] = div255(b * alpha + destBits[0] * ialpha); | ||||
|         destBits[1] = div255(g * alpha + destBits[1] * ialpha); | ||||
|         destBits[2] = div255(r * alpha + destBits[2] * ialpha); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static void alphaBlend888(const uint8_t* const rgb888, uint8_t* const destBits, const uint8_t alpha, const uint8_t ialpha) | ||||
|     { | ||||
|         alphaBlend888(rgb888[2], rgb888[1], rgb888[0], destBits, alpha, ialpha); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static void alphaBlend565(const uint16_t rgb565, uint8_t* const destBits, const uint8_t alpha, const uint8_t ialpha) | ||||
|     { | ||||
|         const uint8_t r = (rgb565 & 0xF800) >> 8; | ||||
|         const uint8_t g = (rgb565 & 0x07E0) >> 3; | ||||
|         const uint8_t b = rgb565 << 3; | ||||
|         alphaBlend888(r, g, b, destBits, alpha, ialpha); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint16_t bilinearInterpolate565(uint16_t c00, uint16_t c10, uint16_t c01, uint16_t c11, uint8_t x, uint8_t y) | ||||
|     { | ||||
|         assert(x < 16 && y < 16); | ||||
|         uint32_t a00 = expandRgb565(c00); | ||||
|         uint32_t a10 = expandRgb565(c10); | ||||
|         uint32_t a01 = expandRgb565(c01); | ||||
|         uint32_t a11 = expandRgb565(c11); | ||||
|  | ||||
|         uint8_t xy = (x * y) >> 3; | ||||
|         return compactRgb565((a00 * (32 - 2 * y - 2 * x + xy) + a10 * (2 * x - xy) + a01 * (2 * y - xy) + a11 * xy) >> 5); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint16_t bilinearInterpolate565(uint16_t c00, uint16_t c10, uint8_t x) | ||||
|     { | ||||
|         assert(x < 16); | ||||
|         uint32_t a00 = expandRgb565(c00); | ||||
|         uint32_t a10 = expandRgb565(c10); | ||||
|  | ||||
|         return compactRgb565((a00 * (32 - 2 * x) + a10 * (2 * x)) >> 5); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t bilinearInterpolate8(uint8_t c00, uint8_t c10, uint8_t x) | ||||
|     { | ||||
|         assert(x < 16); | ||||
|         uint16_t xy10 = 16 * x; | ||||
|         uint16_t xy00 = 256 - xy10; | ||||
|  | ||||
|         return (c00 * xy00 + c10 * xy10) >> 8; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t bilinearInterpolate8(uint8_t c00, uint8_t c10, uint8_t c01, uint8_t c11, uint8_t x, uint8_t y) | ||||
|     { | ||||
|         assert(x < 16 && y < 16); | ||||
|         uint16_t xy11 = x * y; | ||||
|         uint16_t xy10 = 16 * x - xy11; | ||||
|         uint16_t xy01 = 16 * y - xy11; | ||||
|         uint16_t xy00 = 256 - (xy11 + xy10 + xy01); | ||||
|  | ||||
|         return (c00 * xy00 + c10 * xy10 + c01 * xy01 + c11 * xy11) >> 8; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t bilinearInterpolate888(uint32_t c00, uint32_t c10, uint8_t x) | ||||
|     { | ||||
|         assert(x < 16); | ||||
|         uint16_t xy10 = 16 * x; | ||||
|         uint16_t xy00 = 256 - xy10; | ||||
|  | ||||
|         return ((((c00 & 0xFF00FF) * xy00 + (c10 & 0xFF00FF) * xy10) >> 8) & 0xFF00FF) | ||||
|                | ((((c00 & 0x00FF00) * xy00 + (c10 & 0x00FF00) * xy10) >> 8) & 0x00FF00); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t bilinearInterpolate888(uint32_t c00, uint32_t c10, uint32_t c01, uint32_t c11, uint8_t x, uint8_t y) | ||||
|     { | ||||
|         assert(x < 16 && y < 16); | ||||
|         uint16_t xy11 = x * y; | ||||
|         uint16_t xy10 = 16 * x - xy11; | ||||
|         uint16_t xy01 = 16 * y - xy11; | ||||
|         uint16_t xy00 = 256 - (xy11 + xy10 + xy01); | ||||
|  | ||||
|         return ((((c00 & 0xFF00FF) * xy00 + (c10 & 0xFF00FF) * xy10 + (c01 & 0xFF00FF) * xy01 + (c11 & 0xFF00FF) * xy11) >> 8) & 0xFF00FF) | ||||
|                | ((((c00 & 0x00FF00) * xy00 + (c10 & 0x00FF00) * xy10 + (c01 & 0x00FF00) * xy01 + (c11 & 0x00FF00) * xy11) >> 8) & 0x00FF00); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div255_888(uint32_t val, uint8_t factor) | ||||
|     { | ||||
|         return div255rb((val & 0xFF00FF) * factor) | div255g((val & 0x00FF00) * factor); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div255_888_FFcheck(uint32_t val, uint8_t factor) | ||||
|     { | ||||
|         return factor < 0xFF ? div255_888(val, factor) : val; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div31rb(uint16_t val, uint8_t factor) | ||||
|     { | ||||
|         uint32_t val32 = (val & 0xF81F) * (factor >> 3); | ||||
|         return ((val32 + 0x0801 + ((val32 >> 5) & 0xF81F)) >> 5) & 0xF81F; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div31g(uint16_t val, uint8_t factor) | ||||
|     { | ||||
|         uint32_t val32 = (val & 0x07E0) * factor; | ||||
|         return ((val32 + 0x0020 + (val32 >> 8)) >> 8) & 0x07E0; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div255_565(uint16_t val, uint8_t factor) | ||||
|     { | ||||
|         return div31rb(val, factor) | div31g(val, factor); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div255_565_FFcheck(uint16_t val, uint8_t factor) | ||||
|     { | ||||
|         return factor < 0xFF ? div31rb(val, factor) | div31g(val, factor) : val; | ||||
|     } | ||||
|  | ||||
|     class DrawTextureMapScanLineBase32 : public DrawTextureMapScanLineBase | ||||
|     { | ||||
|     protected: | ||||
|         FORCE_INLINE_FUNCTION bool overrunCheckNearestNeighbor(uint32_t*& destBits, int& pixelsToDraw, fixed16_16& U, fixed16_16& V, fixed16_16 deltaU, fixed16_16 deltaV, const int16_t maxWidth, const int16_t maxHeight); | ||||
|         FORCE_INLINE_FUNCTION bool overrunCheckBilinearInterpolation(uint32_t*& destBits, int& pixelsToDraw, fixed16_16& U, fixed16_16& V, fixed16_16 deltaU, fixed16_16 deltaV, const int16_t maxWidth, const int16_t maxHeight); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB565_Opaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint8_t* const textureBits8, const uint16_t* const palette16, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB565_Opaque_NearestNeighbor_NoGA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint8_t* const textureBits8, const uint16_t* const palette16, const int16_t bitmapWidth, const int UInt, const int VInt); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint8_t* const textureBits8, const uint16_t* const palette16, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint32_t* const destBits, const uint8_t* const textureBits8, const uint16_t* const palette16, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB565_Opaque_BilinearInterpolation_NoGA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint8_t* const textureBits8, const uint16_t* const palette16, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|         void writePixelOnEdge(uint32_t* const destBits, const uint8_t* const textureBits8, const uint16_t* const palette16, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB888_Opaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint8_t* const textureBits8, const uint8_t* const palette8, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB888_Opaque_NearestNeighbor_NoGA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint8_t* const textureBits8, const uint8_t* const palette8, const int16_t bitmapWidth, const int UInt, const int VInt); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint8_t* const textureBits8, const uint8_t* const palette8, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint32_t* const destBits, const uint8_t* const textureBits8, const uint8_t* const palette8, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_RGB888_Opaque_BilinearInterpolation_NoGA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint8_t* const textureBits8, const uint8_t* const palette8, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|         void writePixelOnEdge(uint32_t* const destBits, const uint8_t* const textureBits8, const uint8_t* const palette8, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_ARGB8888_NonOpaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint8_t* const textureBits8, const uint32_t* const palette32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_L8_ARGB8888_NonOpaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint8_t* const textureBits8, const uint32_t* const palette32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint32_t* const destBits, const uint8_t* const textureBits8, const uint32_t* const palette32, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB565_NonOpaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint16_t* const textureBits, const uint8_t* alphaBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB565_NonOpaque_NearestNeighbor_NoGA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint16_t* const textureBits, const uint8_t* alphaBits, const int16_t bitmapWidth, const int UInt, const int VInt); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB565_NonOpaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint16_t* const textureBits, const uint8_t* alphaBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint32_t* const destBits, const uint16_t* const textureBits, const uint8_t* alphaBits, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB565_NonOpaque_BilinearInterpolation_NoGA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint16_t* const textureBits, const uint8_t* alphaBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|         void writePixelOnEdge(uint32_t* const destBits, const uint16_t* const textureBits, const uint8_t* alphaBits, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB565_Opaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB565_Opaque_NearestNeighbor_NoGA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB565_Opaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint32_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB565_Opaque_BilinearInterpolation_NoGA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|         void writePixelOnEdge(uint32_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB888_Opaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint8_t* const textureBits8, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB888_Opaque_NearestNeighbor_NoGA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint8_t* const textureBits8, const int16_t bitmapWidth, const int UInt, const int VInt); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB888_Opaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint8_t* const textureBits8, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint32_t* const destBits, const uint8_t* const textureBits8, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGB888_Opaque_BilinearInterpolation_NoGA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint8_t* const textureBits8, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|         void writePixelOnEdge(uint32_t* const destBits, const uint8_t* const textureBits8, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint32_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_NearestNeighbor_GA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint8_t a4, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_NearestNeighbor_NoGA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint8_t a4); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_BilinearInterpolation_GA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapStride, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint32_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapStride, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_BilinearInterpolation_NoGA : public DrawTextureMapScanLineBase32 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint32_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapStride, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|         void writePixelOnEdge(uint32_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapStride, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac); | ||||
|     }; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * The class LCD32DebugPrinter implements the DebugPrinter interface for printing debug messages | ||||
|  * on top of 32bit framebuffer. | ||||
|  * | ||||
|  * @see DebugPrinter | ||||
|  */ | ||||
| class LCD32DebugPrinter : public DebugPrinter | ||||
| { | ||||
| public: | ||||
|     virtual void draw(const Rect& rect) const; | ||||
| }; | ||||
|  | ||||
| } // namespace touchgfx | ||||
|  | ||||
| #endif // LCD32BPP_HPP | ||||
| @@ -0,0 +1,442 @@ | ||||
| /** | ||||
|   ****************************************************************************** | ||||
|   * This file is part of the TouchGFX 4.16.1 distribution. | ||||
|   * | ||||
|   * <h2><center>© Copyright (c) 2021 STMicroelectronics. | ||||
|   * All rights reserved.</center></h2> | ||||
|   * | ||||
|   * This software component is licensed by ST under Ultimate Liberty license | ||||
|   * SLA0044, the "License"; You may not use this file except in compliance with | ||||
|   * the License. You may obtain a copy of the License at: | ||||
|   *                             www.st.com/SLA0044 | ||||
|   * | ||||
|   ****************************************************************************** | ||||
|   */ | ||||
|  | ||||
| /** | ||||
|  * @file platform/driver/lcd/LCD4bpp.hpp | ||||
|  * | ||||
|  * Declares the touchgfx::LCD4bpp and touchgfx::LCD4DebugPrinter classes. | ||||
|  */ | ||||
| #ifndef LCD4BPP_HPP | ||||
| #define LCD4BPP_HPP | ||||
|  | ||||
| #include <stdarg.h> | ||||
| #include <touchgfx/Bitmap.hpp> | ||||
| #include <touchgfx/Font.hpp> | ||||
| #include <touchgfx/TextProvider.hpp> | ||||
| #include <touchgfx/TextureMapTypes.hpp> | ||||
| #include <touchgfx/Unicode.hpp> | ||||
| #include <touchgfx/hal/HAL.hpp> | ||||
| #include <touchgfx/hal/Types.hpp> | ||||
| #include <touchgfx/lcd/LCD.hpp> | ||||
|  | ||||
| namespace touchgfx | ||||
| { | ||||
| #undef LCD | ||||
| #define USE_LSB | ||||
|  | ||||
| /** | ||||
|  * This class contains the various low-level drawing routines for drawing bitmaps, texts and | ||||
|  * rectangles on 4 bits per pixel grayscale displays. | ||||
|  * | ||||
|  * @see LCD | ||||
|  * | ||||
|  * @note All coordinates are expected to be in absolute coordinates! | ||||
|  */ | ||||
| class LCD4bpp : public LCD | ||||
| { | ||||
| public: | ||||
|     LCD4bpp(); | ||||
|  | ||||
|     virtual void drawPartialBitmap(const Bitmap& bitmap, int16_t x, int16_t y, const Rect& rect, uint8_t alpha = 255, bool useOptimized = true); | ||||
|  | ||||
|     virtual void blitCopy(const uint16_t* sourceData, const Rect& source, const Rect& blitRect, uint8_t alpha, bool hasTransparentPixels); | ||||
|  | ||||
|     virtual void blitCopy(const uint8_t* sourceData, Bitmap::BitmapFormat sourceFormat, const Rect& source, const Rect& blitRect, uint8_t alpha, bool hasTransparentPixels); | ||||
|  | ||||
|     virtual uint16_t* copyFrameBufferRegionToMemory(const Rect& visRegion, const Rect& absRegion, const BitmapId bitmapId); | ||||
|  | ||||
|     virtual void fillRect(const Rect& rect, colortype color, uint8_t alpha = 255); | ||||
|  | ||||
|     virtual uint8_t bitDepth() const | ||||
|     { | ||||
|         return 4; | ||||
|     } | ||||
|  | ||||
|     virtual Bitmap::BitmapFormat framebufferFormat() const | ||||
|     { | ||||
|         return Bitmap::GRAY4; | ||||
|     } | ||||
|  | ||||
|     virtual uint16_t framebufferStride() const | ||||
|     { | ||||
|         return getFramebufferStride(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Framebuffer stride in bytes. The distance (in bytes) from the start of one | ||||
|      * framebuffer row, to the next. | ||||
|      * | ||||
|      * @return The number of bytes in one framebuffer row. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint16_t getFramebufferStride() | ||||
|     { | ||||
|         assert(HAL::FRAME_BUFFER_WIDTH > 0 && "HAL has not been initialized yet"); | ||||
|         return (HAL::FRAME_BUFFER_WIDTH + 1) / 2; | ||||
|     } | ||||
|  | ||||
|     virtual colortype getColorFrom24BitRGB(uint8_t red, uint8_t green, uint8_t blue) const | ||||
|     { | ||||
|         return getColorFromRGB(red, green, blue); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Generates a color representation to be used on the LCD, based on 24 bit RGB values. | ||||
|      * | ||||
|      * @param  red   Value of the red part (0-255). | ||||
|      * @param  green Value of the green part (0-255). | ||||
|      * @param  blue  Value of the blue part (0-255). | ||||
|      * | ||||
|      * @return The color representation depending on LCD color format. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static colortype getColorFromRGB(uint8_t red, uint8_t green, uint8_t blue) | ||||
|     { | ||||
|         // Find the GRAY value (http://en.wikipedia.org/wiki/Luma_%28video%29) rounded to nearest integer | ||||
|         return (red * 54 + green * 183 + blue * 19) >> 12; | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getRedColor(colortype color) const | ||||
|     { | ||||
|         return getRedFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets red from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The red from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getRedFromColor(colortype color) | ||||
|     { | ||||
|         return (color & 0xF) * 0x11; | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getGreenColor(colortype color) const | ||||
|     { | ||||
|         return getGreenFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets green from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The green from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getGreenFromColor(colortype color) | ||||
|     { | ||||
|         return (color & 0xF) * 0x11; | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getBlueColor(colortype color) const | ||||
|     { | ||||
|         return getBlueFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets blue from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The blue from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getBlueFromColor(colortype color) | ||||
|     { | ||||
|         return (color & 0xF) * 0x11; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for all image formats. This allows drawing any image | ||||
|      * using Bilinear Interpolation and Nearest Neighbor algorithms, but might use a lot of | ||||
|      * memory for the drawing algorithms. | ||||
|      */ | ||||
|     void enableTextureMapperAll(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for GRAY4 image format. This allows drawing GRAY4 images | ||||
|      * using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperGRAY4_BilinearInterpolation, | ||||
|      *      enableTextureMapperGRAY4_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperGRAY4(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for GRAY4 image format. This allows drawing GRAY4 images | ||||
|      * using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperGRAY4, enableTextureMapperGRAY4_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperGRAY4_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for GRAY4 image format. This allows drawing GRAY4 images | ||||
|      * using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperGRAY4, enableTextureMapperGRAY4_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperGRAY4_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for A4 image format. This allows drawing A4 images using | ||||
|      * Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperA4_BilinearInterpolation, enableTextureMapperA4_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperA4(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for A4 image format. This allows drawing A4 images using | ||||
|      * Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperA4, enableTextureMapperA4_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperA4_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for A4 image format. This allows drawing A4 images using | ||||
|      * Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperA4, enableTextureMapperA4_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperA4_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Get pixel from buffer/image. | ||||
|      * | ||||
|      * @param  addr   The address. | ||||
|      * @param  offset The offset. | ||||
|      * | ||||
|      * @return The pixel value. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getPixel(const uint8_t* addr, int offset) | ||||
|     { | ||||
|         uint8_t data = addr[offset / 2]; | ||||
| #ifdef USE_LSB | ||||
|         return (offset & 1) ? data >> 4 : data & 0xF; | ||||
| #else | ||||
|         return (offset & 1) ? data & 0xF : data >> 4; | ||||
| #endif | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get pixel from buffer/image. | ||||
|      * | ||||
|      * @param  addr   The address. | ||||
|      * @param  offset The offset. | ||||
|      * | ||||
|      * @return The pixel value. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getPixel(const uint16_t* addr, int offset) | ||||
|     { | ||||
|         return getPixel(reinterpret_cast<const uint8_t*>(addr), offset); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Set pixel in buffer. | ||||
|      * | ||||
|      * @param [in] addr   The address. | ||||
|      * @param      offset The offset. | ||||
|      * @param      value  The value. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static void setPixel(uint8_t* addr, int offset, uint8_t value) | ||||
|     { | ||||
|         uint8_t data = addr[offset / 2]; | ||||
| #ifdef USE_LSB | ||||
|         addr[offset / 2] = (offset & 1) ? (data & 0x0F) | (value << 4) : (data & 0xF0) | value; | ||||
| #else | ||||
|         addr[offset / 2] = (offset & 1) ? (data & 0xF0) | value : (data & 0x0F) | (value << 4); | ||||
| #endif | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Set pixel in buffer. | ||||
|      * | ||||
|      * @param [in] addr   The address. | ||||
|      * @param      offset The offset. | ||||
|      * @param      value  The value. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static void setPixel(uint16_t* addr, int offset, uint8_t value) | ||||
|     { | ||||
|         setPixel(reinterpret_cast<uint8_t*>(addr), offset, value); | ||||
|     } | ||||
|  | ||||
| protected: | ||||
|     virtual DrawTextureMapScanLineBase* getTextureMapperDrawScanLine(const TextureSurface& texture, RenderingVariant renderVariant, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Find out how much to advance in the display buffer to get to the next pixel. | ||||
|      * | ||||
|      * @param  rotatedDisplay Is the display running in portrait mode? | ||||
|      * @param  textRotation   Rotation to perform. | ||||
|      * | ||||
|      * @return How much to advance to get to the next pixel. | ||||
|      */ | ||||
|     static int nextPixel(bool rotatedDisplay, TextRotation textRotation); | ||||
|  | ||||
|     /** | ||||
|      * Find out how much to advance in the display buffer to get to the next line. | ||||
|      * | ||||
|      * @param  rotatedDisplay Is the display running in portrait mode? | ||||
|      * @param  textRotation   Rotation to perform. | ||||
|      * | ||||
|      * @return How much to advance to get to the next line. | ||||
|      */ | ||||
|     static int nextLine(bool rotatedDisplay, TextRotation textRotation); | ||||
|  | ||||
|     virtual void drawGlyph(uint16_t* wbuf16, Rect widgetArea, int16_t x, int16_t y, uint16_t offsetX, uint16_t offsetY, const Rect& invalidatedArea, const GlyphNode* glyph, const uint8_t* glyphData, uint8_t byteAlignRow, colortype color, uint8_t bitsPerPixel, uint8_t alpha, TextRotation rotation); | ||||
|  | ||||
|     /** | ||||
|      * Blit a 2D source-array to the framebuffer performing alpha-blending per pixel as | ||||
|      * specified Performs always a software blend. | ||||
|      * | ||||
|      * @param  sourceData16    The source-array pointer (points to the beginning of the | ||||
|      *                         data). The sourceData must be stored as 4bpp GRAY4 values. | ||||
|      * @param  sourceAlphaData The alpha channel array pointer (points to the beginning of | ||||
|      *                         the data) | ||||
|      * @param  source          The location and dimensions of the source. | ||||
|      * @param  blitRect        A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha           The alpha value to use for blending applied to the whole | ||||
|      *                         image (255 = solid, no blending) | ||||
|      */ | ||||
|     static void blitCopyAlphaPerPixel(const uint16_t* sourceData16, const uint8_t* sourceAlphaData, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Copies a rectangular area. | ||||
|      * | ||||
|      * @param      srcAddress     Source address (byte address). | ||||
|      * @param      srcStride      Source stride (number of bytes to advance to next line). | ||||
|      * @param      srcPixelOffset Source pixel offset (first pixel in first source byte). | ||||
|      * @param [in] dstAddress     If destination address (byte address). | ||||
|      * @param      dstStride      Destination stride (number of bytes to advance to next line). | ||||
|      * @param      dstPixelOffset Destination pixel offset (first pixel in destination byte). | ||||
|      * @param      width          The width of area (in pixels). | ||||
|      * @param      height         The height of area (in pixels). | ||||
|      */ | ||||
|     void copyRect(const uint8_t* srcAddress, uint16_t srcStride, uint8_t srcPixelOffset, uint8_t* RESTRICT dstAddress, uint16_t dstStride, uint8_t dstPixelOffset, uint16_t width, uint16_t height) const; | ||||
|  | ||||
| private: | ||||
|     DrawTextureMapScanLineBase* textureMapper_GRAY4_NonOpaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_GRAY4_Opaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_GRAY4_NonOpaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_GRAY4_Opaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_A4_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_A4_BilinearInterpolation_GA; | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t bilinearInterpolate8(uint8_t c00, uint8_t c10, uint8_t x) | ||||
|     { | ||||
|         assert(x < 16); | ||||
|         uint16_t xy10 = 16 * x; | ||||
|         uint16_t xy00 = 256 - xy10; | ||||
|  | ||||
|         return (c00 * xy00 + c10 * xy10) >> 8; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t bilinearInterpolate8(uint8_t c00, uint8_t c10, uint8_t c01, uint8_t c11, uint8_t x, uint8_t y) | ||||
|     { | ||||
|         assert(x < 16 && y < 16); | ||||
|         uint16_t xy11 = x * y; | ||||
|         uint16_t xy10 = 16 * x - xy11; | ||||
|         uint16_t xy01 = 16 * y - xy11; | ||||
|         uint16_t xy00 = 256 - (xy11 + xy10 + xy01); | ||||
|  | ||||
|         return (c00 * xy00 + c10 * xy10 + c01 * xy01 + c11 * xy11) >> 8; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t div255_4(uint16_t value) | ||||
|     { | ||||
|         return div255(value * 0x11) >> 4; | ||||
|     } | ||||
|  | ||||
|     class DrawTextureMapScanLineBase4 : public DrawTextureMapScanLineBase | ||||
|     { | ||||
|     protected: | ||||
|         FORCE_INLINE_FUNCTION bool overrunCheckBilinearInterpolation(uint32_t& destOffset, int& pixelsToDraw, fixed16_16& U, fixed16_16& V, fixed16_16 deltaU, fixed16_16 deltaV, const int16_t maxWidth, const int16_t maxHeight); | ||||
|         FORCE_INLINE_FUNCTION bool overrunCheckNearestNeighbor(uint32_t& destOffset, int& pixelsToDraw, fixed16_16& U, fixed16_16& V, fixed16_16 deltaU, fixed16_16 deltaV, const int16_t maxWidth, const int16_t maxHeight); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_GRAY4_NonOpaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase4 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* destAddress, uint32_t const destOffset, const uint16_t* const textureBits, const uint8_t* const alphaBits, const int16_t bitmapStride, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint16_t* destAddress, uint32_t const destOffset, const uint16_t* const textureBits, const uint8_t* const alphaBits, const int16_t bitmapStride, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_GRAY4_Opaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase4 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* destAddress, uint32_t const destOffset, const uint16_t* const textureBits, const int16_t bitmapStride, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint16_t* destAddress, uint32_t const destOffset, const uint16_t* const textureBits, const int16_t bitmapStride, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_GRAY4_NonOpaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase4 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* destAddress, uint32_t const destOffset, const uint16_t* const textureBits, const uint8_t* const alphaBits, const int16_t bitmapStride, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_GRAY4_Opaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase4 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* destAddress, uint32_t const destOffset, const uint16_t* const textureBits, const int16_t bitmapStride, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_NearestNeighbor_GA : public DrawTextureMapScanLineBase4 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destAddress, const uint32_t destOffset, const uint8_t a4, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_BilinearInterpolation_GA : public DrawTextureMapScanLineBase4 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint16_t* const destAddress, const uint32_t destOffset, const uint16_t* const textureBits, const int16_t bitmapStride, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint16_t* const destAddress, const uint32_t destOffset, const uint16_t* const textureBits, const uint16_t bitmapStride, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * The class LCD4DebugPrinter implements the DebugPrinter interface for printing debug messages | ||||
|  * on top of 8bit framebuffer. | ||||
|  * | ||||
|  * @see DebugPrinter | ||||
|  */ | ||||
| class LCD4DebugPrinter : public DebugPrinter | ||||
| { | ||||
| public: | ||||
|     virtual void draw(const Rect& rect) const; | ||||
| }; | ||||
|  | ||||
| } // namespace touchgfx | ||||
|  | ||||
| #endif // LCD4BPP_HPP | ||||
| @@ -0,0 +1,463 @@ | ||||
| /** | ||||
|   ****************************************************************************** | ||||
|   * This file is part of the TouchGFX 4.16.1 distribution. | ||||
|   * | ||||
|   * <h2><center>© Copyright (c) 2021 STMicroelectronics. | ||||
|   * All rights reserved.</center></h2> | ||||
|   * | ||||
|   * This software component is licensed by ST under Ultimate Liberty license | ||||
|   * SLA0044, the "License"; You may not use this file except in compliance with | ||||
|   * the License. You may obtain a copy of the License at: | ||||
|   *                             www.st.com/SLA0044 | ||||
|   * | ||||
|   ****************************************************************************** | ||||
|   */ | ||||
|  | ||||
| /** | ||||
|  * @file platform/driver/lcd/LCD8bpp_ABGR2222.hpp | ||||
|  * | ||||
|  * Declares the touchgfx::LCD8bpp_ABGR2222 and touchgfx::LCD8ABGR2222DebugPrinter classes. | ||||
|  */ | ||||
| #ifndef LCD8BPP_ABGR2222_HPP | ||||
| #define LCD8BPP_ABGR2222_HPP | ||||
|  | ||||
| #include <stdarg.h> | ||||
| #include <touchgfx/Bitmap.hpp> | ||||
| #include <touchgfx/Font.hpp> | ||||
| #include <touchgfx/TextProvider.hpp> | ||||
| #include <touchgfx/TextureMapTypes.hpp> | ||||
| #include <touchgfx/Unicode.hpp> | ||||
| #include <touchgfx/hal/HAL.hpp> | ||||
| #include <touchgfx/hal/Types.hpp> | ||||
| #include <touchgfx/lcd/LCD.hpp> | ||||
|  | ||||
| namespace touchgfx | ||||
| { | ||||
| #undef LCD | ||||
|  | ||||
| /** | ||||
|  * This class contains the various low-level drawing routines for drawing bitmaps, texts and | ||||
|  * rectangles on 16 bits per pixel displays. | ||||
|  * | ||||
|  * @see LCD | ||||
|  * | ||||
|  * @note All coordinates are expected to be in absolute coordinates! | ||||
|  */ | ||||
| class LCD8bpp_ABGR2222 : public LCD | ||||
| { | ||||
| public: | ||||
|     LCD8bpp_ABGR2222(); | ||||
|  | ||||
|     virtual void drawPartialBitmap(const Bitmap& bitmap, int16_t x, int16_t y, const Rect& rect, uint8_t alpha = 255, bool useOptimized = true); | ||||
|  | ||||
|     virtual void blitCopy(const uint16_t* sourceData, const Rect& source, const Rect& blitRect, uint8_t alpha, bool hasTransparentPixels); | ||||
|  | ||||
|     virtual void blitCopy(const uint8_t* sourceData, Bitmap::BitmapFormat sourceFormat, const Rect& source, const Rect& blitRect, uint8_t alpha, bool hasTransparentPixels); | ||||
|  | ||||
|     virtual uint16_t* copyFrameBufferRegionToMemory(const Rect& visRegion, const Rect& absRegion, const BitmapId bitmapId); | ||||
|  | ||||
|     virtual void fillRect(const Rect& rect, colortype color, uint8_t alpha = 255); | ||||
|  | ||||
|     virtual uint8_t bitDepth() const | ||||
|     { | ||||
|         return 8; | ||||
|     } | ||||
|  | ||||
|     virtual Bitmap::BitmapFormat framebufferFormat() const | ||||
|     { | ||||
|         return Bitmap::ABGR2222; | ||||
|     } | ||||
|  | ||||
|     virtual uint16_t framebufferStride() const | ||||
|     { | ||||
|         return getFramebufferStride(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Framebuffer stride in bytes. The distance (in bytes) from the start of one | ||||
|      * framebuffer row, to the next. | ||||
|      * | ||||
|      * @return The number of bytes in one framebuffer row. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint16_t getFramebufferStride() | ||||
|     { | ||||
|         assert(HAL::FRAME_BUFFER_WIDTH > 0 && "HAL has not been initialized yet"); | ||||
|         return HAL::FRAME_BUFFER_WIDTH; | ||||
|     } | ||||
|  | ||||
|     virtual colortype getColorFrom24BitRGB(uint8_t red, uint8_t green, uint8_t blue) const | ||||
|     { | ||||
|         return getColorFromRGB(red, green, blue); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets color from RGB. | ||||
|      * | ||||
|      * @param  red   The red. | ||||
|      * @param  green The green. | ||||
|      * @param  blue  The blue. | ||||
|      * | ||||
|      * @return The color from RGB. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static colortype getColorFromRGB(uint8_t red, uint8_t green, uint8_t blue) | ||||
|     { | ||||
|         return ((red & 0xC0) >> 6) | ((green & 0xC0) >> 4) | ((blue & 0xC0) >> 2); | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getRedColor(colortype color) const | ||||
|     { | ||||
|         return getRedFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets red from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The red from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getRedFromColor(colortype color) | ||||
|     { | ||||
|         return (color & 0x03) * 0x55; | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getGreenColor(colortype color) const | ||||
|     { | ||||
|         return getGreenFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets green from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The green from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getGreenFromColor(colortype color) | ||||
|     { | ||||
|         return ((color & 0x0C) >> 2) * 0x55; | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getBlueColor(colortype color) const | ||||
|     { | ||||
|         return getBlueFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets blue from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The blue from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getBlueFromColor(colortype color) | ||||
|     { | ||||
|         return ((color & 0x30) >> 4) * 0x55; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for all image formats. This allows drawing any image | ||||
|      * using Bilinear Interpolation and Nearest Neighbor algorithms, but might use a lot of | ||||
|      * memory for the drawing algorithms. | ||||
|      */ | ||||
|     void enableTextureMapperAll(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ABGR2222 image format. This allows drawing ABGR2222 | ||||
|      * images using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperABGR2222_BilinearInterpolation, | ||||
|      *      enableTextureMapperABGR2222_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperABGR2222(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ABGR2222 image format. This allows drawing ABGR2222 | ||||
|      * images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperABGR2222, enableTextureMapperABGR2222_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperABGR2222_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ABGR2222 image format. This allows drawing ABGR2222 | ||||
|      * images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperABGR2222, enableTextureMapperABGR2222_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperABGR2222_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ARGB8888 image format. This allows drawing ARGB8888 | ||||
|      * images using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperARGB8888_BilinearInterpolation, | ||||
|      *      enableTextureMapperARGB8888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperARGB8888(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ARGB8888 image format. This allows drawing ARGB8888 | ||||
|      * images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperARGB8888, enableTextureMapperARGB8888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperARGB8888_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ARGB8888 image format. This allows drawing ARGB8888 | ||||
|      * images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperARGB8888, enableTextureMapperARGB8888_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperARGB8888_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for A4 image format. This allows drawing A4 images using | ||||
|      * Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperA4_BilinearInterpolation, enableTextureMapperA4_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperA4(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for A4 image format. This allows drawing A4 images using | ||||
|      * Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperA4, enableTextureMapperA4_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperA4_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for A4 image format. This allows drawing A4 images using | ||||
|      * Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperA4, enableTextureMapperA4_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperA4_NearestNeighbor(); | ||||
|  | ||||
| protected: | ||||
|     virtual DrawTextureMapScanLineBase* getTextureMapperDrawScanLine(const TextureSurface& texture, RenderingVariant renderVariant, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Find out how much to advance in the display buffer to get to the next pixel. | ||||
|      * | ||||
|      * @param  rotatedDisplay Is the display running in portrait mode? | ||||
|      * @param  textRotation   Rotation to perform. | ||||
|      * | ||||
|      * @return How much to advance to get to the next pixel. | ||||
|      */ | ||||
|     static int nextPixel(bool rotatedDisplay, TextRotation textRotation); | ||||
|  | ||||
|     /** | ||||
|      * Find out how much to advance in the display buffer to get to the next line. | ||||
|      * | ||||
|      * @param  rotatedDisplay Is the display running in portrait mode? | ||||
|      * @param  textRotation   Rotation to perform. | ||||
|      * | ||||
|      * @return How much to advance to get to the next line. | ||||
|      */ | ||||
|     static int nextLine(bool rotatedDisplay, TextRotation textRotation); | ||||
|  | ||||
|     virtual void drawGlyph(uint16_t* wbuf16, Rect widgetArea, int16_t x, int16_t y, uint16_t offsetX, uint16_t offsetY, const Rect& invalidatedArea, const GlyphNode* glyph, const uint8_t* glyphData, uint8_t byteAlignRow, colortype color, uint8_t bitsPerPixel, uint8_t alpha, TextRotation rotation); | ||||
|  | ||||
|     /** | ||||
|      * Blit a 2D source-array to the framebuffer performing alpha-blending per pixel as | ||||
|      * specified if ARGB8888 is not supported by the DMA a software blend is performed. | ||||
|      * | ||||
|      * @param  sourceData The source-array pointer (points to the beginning of the data). The | ||||
|      *                    sourceData must be stored as 32- bits ARGB8888 values. | ||||
|      * @param  source     The location and dimensions of the source. | ||||
|      * @param  blitRect   A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha      The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                    solid, no blending) | ||||
|      */ | ||||
|     static void blitCopyARGB8888(const uint32_t* sourceData, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Blit a 2D source-array to the framebuffer performing alpha-blending per pixel as | ||||
|      * specified Performs always a software blend. | ||||
|      * | ||||
|      * @param  sourceData16 The source-array pointer (points to the beginning of the data). The | ||||
|      *                      sourceData must be stored as 8-bits ABGR2222 values. | ||||
|      * @param  source       The location and dimensions of the source. | ||||
|      * @param  blitRect     A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha        The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                      solid, no blending) | ||||
|      */ | ||||
|     static void blitCopyAlphaPerPixel(const uint16_t* sourceData16, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
| private: | ||||
|     DrawTextureMapScanLineBase* textureMapper_ABGR2222_NonOpaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ABGR2222_Opaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ABGR2222_NonOpaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ABGR2222_Opaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_Opaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_Opaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_A4_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_A4_BilinearInterpolation_GA; | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t bilinearInterpolate8(uint8_t c00, uint8_t c10, uint8_t x) | ||||
|     { | ||||
|         assert(x < 16); | ||||
|         const uint16_t xy10 = 16 * x; | ||||
|         const uint16_t xy00 = 256 - xy10; | ||||
|  | ||||
|         return (c00 * xy00 + c10 * xy10) >> 8; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t bilinearInterpolate8(uint8_t c00, uint8_t c10, uint8_t c01, uint8_t c11, uint8_t x, uint8_t y) | ||||
|     { | ||||
|         assert(x < 16 && y < 16); | ||||
|         const uint16_t xy11 = x * y; | ||||
|         const uint16_t xy10 = 16 * x - xy11; | ||||
|         const uint16_t xy01 = 16 * y - xy11; | ||||
|         const uint16_t xy00 = 256 - (xy11 + xy10 + xy01); | ||||
|  | ||||
|         return (c00 * xy00 + c10 * xy10 + c01 * xy01 + c11 * xy11) >> 8; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION uint32_t convertABGR2222toARGB8888(colortype col) const | ||||
|     { | ||||
|         return (((col & 0xC0) << 18) | ((col & 0x03) << 16) | ((col & 0x0C) << 6) | ((col & 0x30) >> 4)) * 0x55; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t convertABGR2222toRGB888(uint8_t val) | ||||
|     { | ||||
|         return (((val & 0x03) << 16) | ((val & 0x0C) << 6) | ((val & 0x30) >> 4)) * 0x55; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t convertRGB888toXBGR2222(uint32_t val) | ||||
|     { | ||||
|         val &= 0xC0C0C0; | ||||
|         return (val >> 2) | (val >> 12) | (val >> 22); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t bilinearInterpolate888(uint32_t c00, uint32_t c10, uint32_t c01, uint32_t c11, uint8_t x, uint8_t y) | ||||
|     { | ||||
|         assert(x < 16 && y < 16); | ||||
|         const uint16_t xy11 = x * y; | ||||
|         const uint16_t xy10 = 16 * x - xy11; | ||||
|         const uint16_t xy01 = 16 * y - xy11; | ||||
|         const uint16_t xy00 = 256 - (xy11 + xy10 + xy01); | ||||
|  | ||||
|         return ((((c00 & 0xFF00FF) * xy00 + (c10 & 0xFF00FF) * xy10 + (c01 & 0xFF00FF) * xy01 + (c11 & 0xFF00FF) * xy11) >> 8) & 0xFF00FF) | ||||
|                | ((((c00 & 0x00FF00) * xy00 + (c10 & 0x00FF00) * xy10 + (c01 & 0x00FF00) * xy01 + (c11 & 0x00FF00) * xy11) >> 8) & 0x00FF00); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div255_888(uint32_t val, uint8_t factor) | ||||
|     { | ||||
|         return div255rb((val & 0xFF00FF) * factor) | div255g((val & 0x00FF00) * factor); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div255_888_FFcheck(uint32_t val, uint8_t factor) | ||||
|     { | ||||
|         return factor < 0xFF ? div255_888(val, factor) : val; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t alphaBlend(const uint8_t r, const uint8_t g, const uint8_t b, const uint8_t alpha, const uint8_t fbr, const uint8_t fbg, const uint8_t fbb, const uint8_t ialpha) | ||||
|     { | ||||
|         return getColorFromRGB(div255(r * alpha + fbr * ialpha), div255(g * alpha + fbg * ialpha), div255(b * alpha + fbb * ialpha)); | ||||
|     } | ||||
|  | ||||
|     class DrawTextureMapScanLineBase8 : public DrawTextureMapScanLineBase | ||||
|     { | ||||
|     protected: | ||||
|         FORCE_INLINE_FUNCTION bool overrunCheckNearestNeighbor(uint8_t*& destBits, int& pixelsToDraw, fixed16_16& U, fixed16_16& V, fixed16_16 deltaU, fixed16_16 deltaV, const int16_t maxWidth, const int16_t maxHeight); | ||||
|         FORCE_INLINE_FUNCTION bool overrunCheckBilinearInterpolation(uint8_t*& destBits, int& pixelsToDraw, fixed16_16& U, fixed16_16& V, fixed16_16 deltaU, fixed16_16 deltaV, const int16_t maxWidth, const int16_t maxHeight); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ABGR2222_NonOpaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ABGR2222_Opaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ABGR2222_NonOpaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint8_t* const destBits, const uint8_t* const textureBits, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ABGR2222_Opaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint8_t* const destBits, const uint8_t* const textureBits, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint8_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_NearestNeighbor_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t a4, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_BilinearInterpolation_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapStride, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint8_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapStride, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * The class LCD8ABGR2222DebugPrinter implements the DebugPrinter interface for printing debug | ||||
|  * messages on top of 8bit framebuffer. | ||||
|  * | ||||
|  * @see DebugPrinter | ||||
|  */ | ||||
| class LCD8ABGR2222DebugPrinter : public DebugPrinter | ||||
| { | ||||
| public: | ||||
|     virtual void draw(const Rect& rect) const; | ||||
| }; | ||||
|  | ||||
| } // namespace touchgfx | ||||
|  | ||||
| #endif // LCD8BPP_ABGR2222_HPP | ||||
| @@ -0,0 +1,463 @@ | ||||
| /** | ||||
|   ****************************************************************************** | ||||
|   * This file is part of the TouchGFX 4.16.1 distribution. | ||||
|   * | ||||
|   * <h2><center>© Copyright (c) 2021 STMicroelectronics. | ||||
|   * All rights reserved.</center></h2> | ||||
|   * | ||||
|   * This software component is licensed by ST under Ultimate Liberty license | ||||
|   * SLA0044, the "License"; You may not use this file except in compliance with | ||||
|   * the License. You may obtain a copy of the License at: | ||||
|   *                             www.st.com/SLA0044 | ||||
|   * | ||||
|   ****************************************************************************** | ||||
|   */ | ||||
|  | ||||
| /** | ||||
|  * @file platform/driver/lcd/LCD8bpp_ARGB2222.hpp | ||||
|  * | ||||
|  * Declares the touchgfx::LCD8bpp_ARGB2222 and touchgfx::LCD8ARGB2222DebugPrinter classes. | ||||
|  */ | ||||
| #ifndef LCD8BPP_ARGB2222_HPP | ||||
| #define LCD8BPP_ARGB2222_HPP | ||||
|  | ||||
| #include <stdarg.h> | ||||
| #include <touchgfx/Bitmap.hpp> | ||||
| #include <touchgfx/Font.hpp> | ||||
| #include <touchgfx/TextProvider.hpp> | ||||
| #include <touchgfx/TextureMapTypes.hpp> | ||||
| #include <touchgfx/Unicode.hpp> | ||||
| #include <touchgfx/hal/HAL.hpp> | ||||
| #include <touchgfx/hal/Types.hpp> | ||||
| #include <touchgfx/lcd/LCD.hpp> | ||||
|  | ||||
| namespace touchgfx | ||||
| { | ||||
| #undef LCD | ||||
|  | ||||
| /** | ||||
|  * This class contains the various low-level drawing routines for drawing bitmaps, texts and | ||||
|  * rectangles on 16 bits per pixel displays. | ||||
|  * | ||||
|  * @see LCD | ||||
|  * | ||||
|  * @note All coordinates are expected to be in absolute coordinates! | ||||
|  */ | ||||
| class LCD8bpp_ARGB2222 : public LCD | ||||
| { | ||||
| public: | ||||
|     LCD8bpp_ARGB2222(); | ||||
|  | ||||
|     virtual void drawPartialBitmap(const Bitmap& bitmap, int16_t x, int16_t y, const Rect& rect, uint8_t alpha = 255, bool useOptimized = true); | ||||
|  | ||||
|     virtual void blitCopy(const uint16_t* sourceData, const Rect& source, const Rect& blitRect, uint8_t alpha, bool hasTransparentPixels); | ||||
|  | ||||
|     virtual void blitCopy(const uint8_t* sourceData, Bitmap::BitmapFormat sourceFormat, const Rect& source, const Rect& blitRect, uint8_t alpha, bool hasTransparentPixels); | ||||
|  | ||||
|     virtual uint16_t* copyFrameBufferRegionToMemory(const Rect& visRegion, const Rect& absRegion, const BitmapId bitmapId); | ||||
|  | ||||
|     virtual void fillRect(const Rect& rect, colortype color, uint8_t alpha = 255); | ||||
|  | ||||
|     virtual uint8_t bitDepth() const | ||||
|     { | ||||
|         return 8; | ||||
|     } | ||||
|  | ||||
|     virtual Bitmap::BitmapFormat framebufferFormat() const | ||||
|     { | ||||
|         return Bitmap::ARGB2222; | ||||
|     } | ||||
|  | ||||
|     virtual uint16_t framebufferStride() const | ||||
|     { | ||||
|         return getFramebufferStride(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Framebuffer stride in bytes. The distance (in bytes) from the start of one | ||||
|      * framebuffer row, to the next. | ||||
|      * | ||||
|      * @return The number of bytes in one framebuffer row. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint16_t getFramebufferStride() | ||||
|     { | ||||
|         assert(HAL::FRAME_BUFFER_WIDTH > 0 && "HAL has not been initialized yet"); | ||||
|         return HAL::FRAME_BUFFER_WIDTH; | ||||
|     } | ||||
|  | ||||
|     virtual colortype getColorFrom24BitRGB(uint8_t red, uint8_t green, uint8_t blue) const | ||||
|     { | ||||
|         return getColorFromRGB(red, green, blue); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets color from RGB. | ||||
|      * | ||||
|      * @param  red   The red. | ||||
|      * @param  green The green. | ||||
|      * @param  blue  The blue. | ||||
|      * | ||||
|      * @return The color from RGB. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static colortype getColorFromRGB(uint8_t red, uint8_t green, uint8_t blue) | ||||
|     { | ||||
|         return ((red & 0xC0) >> 2) | ((green & 0xC0) >> 4) | ((blue & 0xC0) >> 6); | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getRedColor(colortype color) const | ||||
|     { | ||||
|         return getRedFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets red from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The red from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getRedFromColor(colortype color) | ||||
|     { | ||||
|         return ((color & 0x30) >> 4) * 0x55; | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getGreenColor(colortype color) const | ||||
|     { | ||||
|         return getGreenFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets green from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The green from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getGreenFromColor(colortype color) | ||||
|     { | ||||
|         return ((color & 0x0C) >> 2) * 0x55; | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getBlueColor(colortype color) const | ||||
|     { | ||||
|         return getBlueFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets blue from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The blue from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getBlueFromColor(colortype color) | ||||
|     { | ||||
|         return (color & 0x03) * 0x55; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for all image formats. This allows drawing any image | ||||
|      * using Bilinear Interpolation and Nearest Neighbor algorithms, but might use a lot of | ||||
|      * memory for the drawing algorithms. | ||||
|      */ | ||||
|     void enableTextureMapperAll(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ARGB2222 image format. This allows drawing ARGB2222 | ||||
|      * images using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperARGB2222_BilinearInterpolation, | ||||
|      *      enableTextureMapperARGB2222_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperARGB2222(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ARGB2222 image format. This allows drawing ARGB2222 | ||||
|      * images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperARGB2222, enableTextureMapperARGB2222_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperARGB2222_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ARGB2222 image format. This allows drawing ARGB2222 | ||||
|      * images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperARGB2222, enableTextureMapperARGB2222_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperARGB2222_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ARGB8888 image format. This allows drawing ARGB8888 | ||||
|      * images using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperARGB8888_BilinearInterpolation, | ||||
|      *      enableTextureMapperARGB8888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperARGB8888(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ARGB8888 image format. This allows drawing ARGB8888 | ||||
|      * images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperARGB8888, enableTextureMapperARGB8888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperARGB8888_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ARGB8888 image format. This allows drawing ARGB8888 | ||||
|      * images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperARGB8888, enableTextureMapperARGB8888_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperARGB8888_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for A4 image format. This allows drawing A4 images using | ||||
|      * Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperA4_BilinearInterpolation, enableTextureMapperA4_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperA4(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for A4 image format. This allows drawing A4 images using | ||||
|      * Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperA4, enableTextureMapperA4_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperA4_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for A4 image format. This allows drawing A4 images using | ||||
|      * Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperA4, enableTextureMapperA4_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperA4_NearestNeighbor(); | ||||
|  | ||||
| protected: | ||||
|     virtual DrawTextureMapScanLineBase* getTextureMapperDrawScanLine(const TextureSurface& texture, RenderingVariant renderVariant, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Find out how much to advance in the display buffer to get to the next pixel. | ||||
|      * | ||||
|      * @param  rotatedDisplay Is the display running in portrait mode? | ||||
|      * @param  textRotation   Rotation to perform. | ||||
|      * | ||||
|      * @return How much to advance to get to the next pixel. | ||||
|      */ | ||||
|     static int nextPixel(bool rotatedDisplay, TextRotation textRotation); | ||||
|  | ||||
|     /** | ||||
|      * Find out how much to advance in the display buffer to get to the next line. | ||||
|      * | ||||
|      * @param  rotatedDisplay Is the display running in portrait mode? | ||||
|      * @param  textRotation   Rotation to perform. | ||||
|      * | ||||
|      * @return How much to advance to get to the next line. | ||||
|      */ | ||||
|     static int nextLine(bool rotatedDisplay, TextRotation textRotation); | ||||
|  | ||||
|     virtual void drawGlyph(uint16_t* wbuf16, Rect widgetArea, int16_t x, int16_t y, uint16_t offsetX, uint16_t offsetY, const Rect& invalidatedArea, const GlyphNode* glyph, const uint8_t* glyphData, uint8_t byteAlignRow, colortype color, uint8_t bitsPerPixel, uint8_t alpha, TextRotation rotation); | ||||
|  | ||||
|     /** | ||||
|      * Blit a 2D source-array to the framebuffer performing alpha-blending per pixel as | ||||
|      * specified if ARGB8888 is not supported by the DMA a software blend is performed. | ||||
|      * | ||||
|      * @param  sourceData The source-array pointer (points to the beginning of the data). The | ||||
|      *                    sourceData must be stored as 32- bits ARGB8888 values. | ||||
|      * @param  source     The location and dimensions of the source. | ||||
|      * @param  blitRect   A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha      The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                    solid, no blending) | ||||
|      */ | ||||
|     static void blitCopyARGB8888(const uint32_t* sourceData, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Blit a 2D source-array to the framebuffer performing alpha-blending per pixel as | ||||
|      * specified Performs always a software blend. | ||||
|      * | ||||
|      * @param  sourceData16 The source-array pointer (points to the beginning of the data). The | ||||
|      *                      sourceData must be stored as 8-bits ARGB2222 values. | ||||
|      * @param  source       The location and dimensions of the source. | ||||
|      * @param  blitRect     A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha        The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                      solid, no blending) | ||||
|      */ | ||||
|     static void blitCopyAlphaPerPixel(const uint16_t* sourceData16, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
| private: | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB2222_NonOpaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB2222_Opaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB2222_NonOpaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB2222_Opaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_Opaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_Opaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_A4_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_A4_BilinearInterpolation_GA; | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t bilinearInterpolate8(uint8_t c00, uint8_t c10, uint8_t x) | ||||
|     { | ||||
|         assert(x < 16); | ||||
|         const uint16_t xy10 = 16 * x; | ||||
|         const uint16_t xy00 = 256 - xy10; | ||||
|  | ||||
|         return (c00 * xy00 + c10 * xy10) >> 8; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t bilinearInterpolate8(uint8_t c00, uint8_t c10, uint8_t c01, uint8_t c11, uint8_t x, uint8_t y) | ||||
|     { | ||||
|         assert(x < 16 && y < 16); | ||||
|         const uint16_t xy11 = x * y; | ||||
|         const uint16_t xy10 = 16 * x - xy11; | ||||
|         const uint16_t xy01 = 16 * y - xy11; | ||||
|         const uint16_t xy00 = 256 - (xy11 + xy10 + xy01); | ||||
|  | ||||
|         return (c00 * xy00 + c10 * xy10 + c01 * xy01 + c11 * xy11) >> 8; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION uint32_t convertARGB2222toARGB8888(colortype col) const | ||||
|     { | ||||
|         return (((col & 0xC0) << 18) | ((col & 0x30) << 12) | ((col & 0x0C) << 6) | (col & 0x03)) * 0x55; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t convertARGB2222toRGB888(uint8_t val) | ||||
|     { | ||||
|         return (((val & 0x30) << 12) | ((val & 0x0C) << 6) | (val & 0x03)) * 0x55; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t convertRGB888toXRGB2222(uint32_t val) | ||||
|     { | ||||
|         val &= 0xC0C0C0; | ||||
|         return (val >> 6) | (val >> 12) | (val >> 18); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t bilinearInterpolate888(uint32_t c00, uint32_t c10, uint32_t c01, uint32_t c11, uint8_t x, uint8_t y) | ||||
|     { | ||||
|         assert(x < 16 && y < 16); | ||||
|         const uint16_t xy11 = x * y; | ||||
|         const uint16_t xy10 = 16 * x - xy11; | ||||
|         const uint16_t xy01 = 16 * y - xy11; | ||||
|         const uint16_t xy00 = 256 - (xy11 + xy10 + xy01); | ||||
|  | ||||
|         return ((((c00 & 0xFF00FF) * xy00 + (c10 & 0xFF00FF) * xy10 + (c01 & 0xFF00FF) * xy01 + (c11 & 0xFF00FF) * xy11) >> 8) & 0xFF00FF) | ||||
|                | ((((c00 & 0x00FF00) * xy00 + (c10 & 0x00FF00) * xy10 + (c01 & 0x00FF00) * xy01 + (c11 & 0x00FF00) * xy11) >> 8) & 0x00FF00); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div255_888(uint32_t val, uint8_t factor) | ||||
|     { | ||||
|         return div255rb((val & 0xFF00FF) * factor) | div255g((val & 0x00FF00) * factor); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div255_888_FFcheck(uint32_t val, uint8_t factor) | ||||
|     { | ||||
|         return factor < 0xFF ? div255_888(val, factor) : val; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t alphaBlend(const uint8_t r, const uint8_t g, const uint8_t b, const uint8_t alpha, const uint8_t fbr, const uint8_t fbg, const uint8_t fbb, const uint8_t ialpha) | ||||
|     { | ||||
|         return getColorFromRGB(div255(r * alpha + fbr * ialpha), div255(g * alpha + fbg * ialpha), div255(b * alpha + fbb * ialpha)); | ||||
|     } | ||||
|  | ||||
|     class DrawTextureMapScanLineBase8 : public DrawTextureMapScanLineBase | ||||
|     { | ||||
|     protected: | ||||
|         FORCE_INLINE_FUNCTION bool overrunCheckNearestNeighbor(uint8_t*& destBits, int& pixelsToDraw, fixed16_16& U, fixed16_16& V, fixed16_16 deltaU, fixed16_16 deltaV, const int16_t maxWidth, const int16_t maxHeight); | ||||
|         FORCE_INLINE_FUNCTION bool overrunCheckBilinearInterpolation(uint8_t*& destBits, int& pixelsToDraw, fixed16_16& U, fixed16_16& V, fixed16_16 deltaU, fixed16_16 deltaV, const int16_t maxWidth, const int16_t maxHeight); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ARGB2222_NonOpaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ARGB2222_Opaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ARGB2222_NonOpaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint8_t* const destBits, const uint8_t* const textureBits, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ARGB2222_Opaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint8_t* const destBits, const uint8_t* const textureBits, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint8_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_NearestNeighbor_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t a4, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_BilinearInterpolation_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapStride, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint8_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapStride, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * The class LCD8ARGB2222DebugPrinter implements the DebugPrinter interface for printing debug | ||||
|  * messages on top of 8bit framebuffer. | ||||
|  * | ||||
|  * @see DebugPrinter | ||||
|  */ | ||||
| class LCD8ARGB2222DebugPrinter : public DebugPrinter | ||||
| { | ||||
| public: | ||||
|     virtual void draw(const Rect& rect) const; | ||||
| }; | ||||
|  | ||||
| } // namespace touchgfx | ||||
|  | ||||
| #endif // LCD8BPP_ARGB2222_HPP | ||||
| @@ -0,0 +1,464 @@ | ||||
| /** | ||||
|   ****************************************************************************** | ||||
|   * This file is part of the TouchGFX 4.16.1 distribution. | ||||
|   * | ||||
|   * <h2><center>© Copyright (c) 2021 STMicroelectronics. | ||||
|   * All rights reserved.</center></h2> | ||||
|   * | ||||
|   * This software component is licensed by ST under Ultimate Liberty license | ||||
|   * SLA0044, the "License"; You may not use this file except in compliance with | ||||
|   * the License. You may obtain a copy of the License at: | ||||
|   *                             www.st.com/SLA0044 | ||||
|   * | ||||
|   ****************************************************************************** | ||||
|   */ | ||||
|  | ||||
| /** | ||||
|  * @file platform/driver/lcd/LCD8bpp_BGRA2222.hpp | ||||
|  * | ||||
|  * Declares the touchgfx::LCD8bpp_BGRA2222 and touchgfx::LCD8BGRA2222DebugPrinter classes. | ||||
|  */ | ||||
| #ifndef LCD8BPP_BGRA2222_HPP | ||||
| #define LCD8BPP_BGRA2222_HPP | ||||
|  | ||||
| #include <stdarg.h> | ||||
| #include <touchgfx/Bitmap.hpp> | ||||
| #include <touchgfx/Font.hpp> | ||||
| #include <touchgfx/TextProvider.hpp> | ||||
| #include <touchgfx/TextureMapTypes.hpp> | ||||
| #include <touchgfx/Unicode.hpp> | ||||
| #include <touchgfx/hal/HAL.hpp> | ||||
| #include <touchgfx/hal/Types.hpp> | ||||
| #include <touchgfx/lcd/LCD.hpp> | ||||
|  | ||||
| namespace touchgfx | ||||
| { | ||||
| #undef LCD | ||||
|  | ||||
| /** | ||||
|  * This class contains the various low-level drawing routines for drawing bitmaps, texts and | ||||
|  * rectangles on 16 bits per pixel displays. | ||||
|  * | ||||
|  * @see LCD | ||||
|  * | ||||
|  * @note All coordinates are expected to be in absolute coordinates! | ||||
|  */ | ||||
| class LCD8bpp_BGRA2222 : public LCD | ||||
| { | ||||
| public: | ||||
|     LCD8bpp_BGRA2222(); | ||||
|  | ||||
|     virtual void drawPartialBitmap(const Bitmap& bitmap, int16_t x, int16_t y, const Rect& rect, uint8_t alpha = 255, bool useOptimized = true); | ||||
|  | ||||
|     virtual void blitCopy(const uint16_t* sourceData, const Rect& source, const Rect& blitRect, uint8_t alpha, bool hasTransparentPixels); | ||||
|  | ||||
|     virtual void blitCopy(const uint8_t* sourceData, Bitmap::BitmapFormat sourceFormat, const Rect& source, const Rect& blitRect, uint8_t alpha, bool hasTransparentPixels); | ||||
|  | ||||
|     virtual uint16_t* copyFrameBufferRegionToMemory(const Rect& visRegion, const Rect& absRegion, const BitmapId bitmapId); | ||||
|  | ||||
|     virtual void fillRect(const Rect& rect, colortype color, uint8_t alpha = 255); | ||||
|  | ||||
|     virtual uint8_t bitDepth() const | ||||
|     { | ||||
|         return 8; | ||||
|     } | ||||
|  | ||||
|     virtual Bitmap::BitmapFormat framebufferFormat() const | ||||
|     { | ||||
|         return Bitmap::BGRA2222; | ||||
|     } | ||||
|  | ||||
|     virtual uint16_t framebufferStride() const | ||||
|     { | ||||
|         return getFramebufferStride(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Framebuffer stride in bytes. The distance (in bytes) from the start of one | ||||
|      * framebuffer row, to the next. | ||||
|      * | ||||
|      * @return The number of bytes in one framebuffer row. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint16_t getFramebufferStride() | ||||
|     { | ||||
|         assert(HAL::FRAME_BUFFER_WIDTH > 0 && "HAL has not been initialized yet"); | ||||
|         return HAL::FRAME_BUFFER_WIDTH; | ||||
|     } | ||||
|  | ||||
|     virtual colortype getColorFrom24BitRGB(uint8_t red, uint8_t green, uint8_t blue) const | ||||
|     { | ||||
|         return getColorFromRGB(red, green, blue); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets color from RGB. | ||||
|      * | ||||
|      * @param  red   The red. | ||||
|      * @param  green The green. | ||||
|      * @param  blue  The blue. | ||||
|      * | ||||
|      * @return The color from RGB. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static colortype getColorFromRGB(uint8_t red, uint8_t green, uint8_t blue) | ||||
|     { | ||||
|         return ((red & 0xC0) >> 4) | ((green & 0xC0) >> 2) | (blue & 0xC0); | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getRedColor(colortype color) const | ||||
|     { | ||||
|         return getRedFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets red from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The red from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getRedFromColor(colortype color) | ||||
|     { | ||||
|         return ((color & 0x0C) >> 2) * 0x55; | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getGreenColor(colortype color) const | ||||
|     { | ||||
|         return getGreenFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets green from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The green from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getGreenFromColor(colortype color) | ||||
|     { | ||||
|         return ((color & 0x30) >> 4) * 0x55; | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getBlueColor(colortype color) const | ||||
|     { | ||||
|         return getBlueFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets blue from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The blue from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getBlueFromColor(colortype color) | ||||
|     { | ||||
|         return ((color & 0xC0) >> 6) * 0x55; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for all image formats. This allows drawing any image | ||||
|      * using Bilinear Interpolation and Nearest Neighbor algorithms, but might use a lot of | ||||
|      * memory for the drawing algorithms. | ||||
|      */ | ||||
|     void enableTextureMapperAll(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for BGRA2222 image format. This allows drawing BGRA2222 | ||||
|      * images using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperBGRA2222_BilinearInterpolation, | ||||
|      *      enableTextureMapperBGRA2222_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperBGRA2222(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for BGRA2222 image format. This allows drawing BGRA2222 | ||||
|      * images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperBGRA2222, enableTextureMapperBGRA2222_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperBGRA2222_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for BGRA2222 image format. This allows drawing BGRA2222 | ||||
|      * images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperBGRA2222, enableTextureMapperBGRA2222_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperBGRA2222_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ARGB8888 image format. This allows drawing ARGB8888 | ||||
|      * images using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperARGB8888_BilinearInterpolation, | ||||
|      *      enableTextureMapperARGB8888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperARGB8888(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ARGB8888 image format. This allows drawing ARGB8888 | ||||
|      * images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperARGB8888, enableTextureMapperARGB8888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperARGB8888_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ARGB8888 image format. This allows drawing ARGB8888 | ||||
|      * images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperARGB8888, enableTextureMapperARGB8888_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperARGB8888_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for A4 image format. This allows drawing A4 images using | ||||
|      * Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperA4_BilinearInterpolation, enableTextureMapperA4_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperA4(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for A4 image format. This allows drawing A4 images using | ||||
|      * Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperA4, enableTextureMapperA4_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperA4_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for A4 image format. This allows drawing A4 images using | ||||
|      * Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperA4, enableTextureMapperA4_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperA4_NearestNeighbor(); | ||||
|  | ||||
| protected: | ||||
|     virtual DrawTextureMapScanLineBase* getTextureMapperDrawScanLine(const TextureSurface& texture, RenderingVariant renderVariant, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Find out how much to advance in the display buffer to get to the next pixel. | ||||
|      * | ||||
|      * @param  rotatedDisplay Is the display running in portrait mode? | ||||
|      * @param  textRotation   Rotation to perform. | ||||
|      * | ||||
|      * @return How much to advance to get to the next pixel. | ||||
|      */ | ||||
|     static int nextPixel(bool rotatedDisplay, TextRotation textRotation); | ||||
|  | ||||
|     /** | ||||
|      * Find out how much to advance in the display buffer to get to the next line. | ||||
|      * | ||||
|      * @param  rotatedDisplay Is the display running in portrait mode? | ||||
|      * @param  textRotation   Rotation to perform. | ||||
|      * | ||||
|      * @return How much to advance to get to the next line. | ||||
|      */ | ||||
|     static int nextLine(bool rotatedDisplay, TextRotation textRotation); | ||||
|  | ||||
|     virtual void drawGlyph(uint16_t* wbuf16, Rect widgetArea, int16_t x, int16_t y, uint16_t offsetX, uint16_t offsetY, const Rect& invalidatedArea, const GlyphNode* glyph, const uint8_t* glyphData, uint8_t byteAlignRow, colortype color, uint8_t bitsPerPixel, uint8_t alpha, TextRotation rotation); | ||||
|  | ||||
|     /** | ||||
|      * Blit a 2D source-array to the framebuffer performing alpha-blending per pixel as | ||||
|      * specified if ARGB8888 is not supported by the DMA a software blend is performed. | ||||
|      * | ||||
|      * @param  sourceData The source-array pointer (points to the beginning of the data). The | ||||
|      *                    sourceData must be stored as 32- bits ARGB8888 values. | ||||
|      * @param  source     The location and dimensions of the source. | ||||
|      * @param  blitRect   A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha      The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                    solid, no blending) | ||||
|      */ | ||||
|     static void blitCopyARGB8888(const uint32_t* sourceData, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Blit a 2D source-array to the framebuffer performing alpha-blending per pixel as | ||||
|      * specified Performs always a software blend. | ||||
|      * | ||||
|      * @param  sourceData16 The source-array pointer (points to the beginning of the data). The | ||||
|      *                      sourceData must be stored as 8-bits BGRA2222 values. | ||||
|      * @param  source       The location and dimensions of the source. | ||||
|      * @param  blitRect     A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha        The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                      solid, no blending) | ||||
|      */ | ||||
|     static void blitCopyAlphaPerPixel(const uint16_t* sourceData16, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
| private: | ||||
|     DrawTextureMapScanLineBase* textureMapper_BGRA2222_NonOpaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_BGRA2222_Opaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_BGRA2222_NonOpaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_BGRA2222_Opaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_Opaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_Opaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_A4_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_A4_BilinearInterpolation_GA; | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t bilinearInterpolate8(uint8_t c00, uint8_t c10, uint8_t x) | ||||
|     { | ||||
|         assert(x < 16); | ||||
|         const uint16_t xy10 = 16 * x; | ||||
|         const uint16_t xy00 = 256 - xy10; | ||||
|  | ||||
|         return (c00 * xy00 + c10 * xy10) >> 8; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t bilinearInterpolate8(uint8_t c00, uint8_t c10, uint8_t c01, uint8_t c11, uint8_t x, uint8_t y) | ||||
|     { | ||||
|         assert(x < 16 && y < 16); | ||||
|         const uint16_t xy11 = x * y; | ||||
|         const uint16_t xy10 = 16 * x - xy11; | ||||
|         const uint16_t xy01 = 16 * y - xy11; | ||||
|         const uint16_t xy00 = 256 - (xy11 + xy10 + xy01); | ||||
|  | ||||
|         return (c00 * xy00 + c10 * xy10 + c01 * xy01 + c11 * xy11) >> 8; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION uint32_t convertBGRA2222toARGB8888(colortype col) const | ||||
|     { | ||||
|         return (((col & 0x03) << 24) | ((col & 0x0C) << 14) | ((col & 0x30) << 4) | ((col & 0xC0) >> 6)) * 0x55; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t convertBGRA2222toRGB888(uint8_t val) | ||||
|     { | ||||
|         return (((val & 0x0C) << 14) | ((val & 0x30) << 4) | ((val & 0xC0) >> 6)) * 0x55; | ||||
|         ; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t convertRGB888toBGRX2222(uint32_t val) | ||||
|     { | ||||
|         val &= 0xC0C0C0; | ||||
|         return (val) | (val >> 10) | (val >> 20); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t bilinearInterpolate888(uint32_t c00, uint32_t c10, uint32_t c01, uint32_t c11, uint8_t x, uint8_t y) | ||||
|     { | ||||
|         assert(x < 16 && y < 16); | ||||
|         const uint16_t xy11 = x * y; | ||||
|         const uint16_t xy10 = 16 * x - xy11; | ||||
|         const uint16_t xy01 = 16 * y - xy11; | ||||
|         const uint16_t xy00 = 256 - (xy11 + xy10 + xy01); | ||||
|  | ||||
|         return ((((c00 & 0xFF00FF) * xy00 + (c10 & 0xFF00FF) * xy10 + (c01 & 0xFF00FF) * xy01 + (c11 & 0xFF00FF) * xy11) >> 8) & 0xFF00FF) | ||||
|                | ((((c00 & 0x00FF00) * xy00 + (c10 & 0x00FF00) * xy10 + (c01 & 0x00FF00) * xy01 + (c11 & 0x00FF00) * xy11) >> 8) & 0x00FF00); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div255_888(uint32_t val, uint8_t factor) | ||||
|     { | ||||
|         return div255rb((val & 0xFF00FF) * factor) | div255g((val & 0x00FF00) * factor); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div255_888_FFcheck(uint32_t val, uint8_t factor) | ||||
|     { | ||||
|         return factor < 0xFF ? div255_888(val, factor) : val; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t alphaBlend(const uint8_t r, const uint8_t g, const uint8_t b, const uint8_t alpha, const uint8_t fbr, const uint8_t fbg, const uint8_t fbb, const uint8_t ialpha) | ||||
|     { | ||||
|         return getColorFromRGB(div255(r * alpha + fbr * ialpha), div255(g * alpha + fbg * ialpha), div255(b * alpha + fbb * ialpha)); | ||||
|     } | ||||
|  | ||||
|     class DrawTextureMapScanLineBase8 : public DrawTextureMapScanLineBase | ||||
|     { | ||||
|     protected: | ||||
|         FORCE_INLINE_FUNCTION bool overrunCheckNearestNeighbor(uint8_t*& destBits, int& pixelsToDraw, fixed16_16& U, fixed16_16& V, fixed16_16 deltaU, fixed16_16 deltaV, const int16_t maxWidth, const int16_t maxHeight); | ||||
|         FORCE_INLINE_FUNCTION bool overrunCheckBilinearInterpolation(uint8_t*& destBits, int& pixelsToDraw, fixed16_16& U, fixed16_16& V, fixed16_16 deltaU, fixed16_16 deltaV, const int16_t maxWidth, const int16_t maxHeight); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_BGRA2222_NonOpaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_BGRA2222_Opaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_BGRA2222_NonOpaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint8_t* const destBits, const uint8_t* const textureBits, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_BGRA2222_Opaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint8_t* const destBits, const uint8_t* const textureBits, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint8_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_NearestNeighbor_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t a4, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_BilinearInterpolation_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapStride, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint8_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapStride, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * The class LCD8BGRA2222DebugPrinter implements the DebugPrinter interface for printing debug | ||||
|  * messages on top of 8bit framebuffer. | ||||
|  * | ||||
|  * @see DebugPrinter | ||||
|  */ | ||||
| class LCD8BGRA2222DebugPrinter : public DebugPrinter | ||||
| { | ||||
| public: | ||||
|     virtual void draw(const Rect& rect) const; | ||||
| }; | ||||
|  | ||||
| } // namespace touchgfx | ||||
|  | ||||
| #endif // LCD8BPP_BGRA2222_HPP | ||||
| @@ -0,0 +1,463 @@ | ||||
| /** | ||||
|   ****************************************************************************** | ||||
|   * This file is part of the TouchGFX 4.16.1 distribution. | ||||
|   * | ||||
|   * <h2><center>© Copyright (c) 2021 STMicroelectronics. | ||||
|   * All rights reserved.</center></h2> | ||||
|   * | ||||
|   * This software component is licensed by ST under Ultimate Liberty license | ||||
|   * SLA0044, the "License"; You may not use this file except in compliance with | ||||
|   * the License. You may obtain a copy of the License at: | ||||
|   *                             www.st.com/SLA0044 | ||||
|   * | ||||
|   ****************************************************************************** | ||||
|   */ | ||||
|  | ||||
| /** | ||||
|  * @file platform/driver/lcd/LCD8bpp_RGBA2222.hpp | ||||
|  * | ||||
|  * Declares the touchgfx::LCD8bppRGBA2222 and touchgfx::LCD8RGBA2222DebugPrinter classes. | ||||
|  */ | ||||
| #ifndef LCD8BPP_RGBA2222_HPP | ||||
| #define LCD8BPP_RGBA2222_HPP | ||||
|  | ||||
| #include <stdarg.h> | ||||
| #include <touchgfx/Bitmap.hpp> | ||||
| #include <touchgfx/Font.hpp> | ||||
| #include <touchgfx/TextProvider.hpp> | ||||
| #include <touchgfx/TextureMapTypes.hpp> | ||||
| #include <touchgfx/Unicode.hpp> | ||||
| #include <touchgfx/hal/HAL.hpp> | ||||
| #include <touchgfx/hal/Types.hpp> | ||||
| #include <touchgfx/lcd/LCD.hpp> | ||||
|  | ||||
| namespace touchgfx | ||||
| { | ||||
| #undef LCD | ||||
|  | ||||
| /** | ||||
|  * This class contains the various low-level drawing routines for drawing bitmaps, texts and | ||||
|  * rectangles on 16 bits per pixel displays. | ||||
|  * | ||||
|  * @see LCD | ||||
|  * | ||||
|  * @note All coordinates are expected to be in absolute coordinates! | ||||
|  */ | ||||
| class LCD8bpp_RGBA2222 : public LCD | ||||
| { | ||||
| public: | ||||
|     LCD8bpp_RGBA2222(); | ||||
|  | ||||
|     virtual void drawPartialBitmap(const Bitmap& bitmap, int16_t x, int16_t y, const Rect& rect, uint8_t alpha = 255, bool useOptimized = true); | ||||
|  | ||||
|     virtual void blitCopy(const uint16_t* sourceData, const Rect& source, const Rect& blitRect, uint8_t alpha, bool hasTransparentPixels); | ||||
|  | ||||
|     virtual void blitCopy(const uint8_t* sourceData, Bitmap::BitmapFormat sourceFormat, const Rect& source, const Rect& blitRect, uint8_t alpha, bool hasTransparentPixels); | ||||
|  | ||||
|     virtual uint16_t* copyFrameBufferRegionToMemory(const Rect& visRegion, const Rect& absRegion, const BitmapId bitmapId); | ||||
|  | ||||
|     virtual void fillRect(const Rect& rect, colortype color, uint8_t alpha = 255); | ||||
|  | ||||
|     virtual uint8_t bitDepth() const | ||||
|     { | ||||
|         return 8; | ||||
|     } | ||||
|  | ||||
|     virtual Bitmap::BitmapFormat framebufferFormat() const | ||||
|     { | ||||
|         return Bitmap::RGBA2222; | ||||
|     } | ||||
|  | ||||
|     virtual uint16_t framebufferStride() const | ||||
|     { | ||||
|         return getFramebufferStride(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Framebuffer stride in bytes. The distance (in bytes) from the start of one | ||||
|      * framebuffer row, to the next. | ||||
|      * | ||||
|      * @return The number of bytes in one framebuffer row. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint16_t getFramebufferStride() | ||||
|     { | ||||
|         assert(HAL::FRAME_BUFFER_WIDTH > 0 && "HAL has not been initialized yet"); | ||||
|         return HAL::FRAME_BUFFER_WIDTH; | ||||
|     } | ||||
|  | ||||
|     virtual colortype getColorFrom24BitRGB(uint8_t red, uint8_t green, uint8_t blue) const | ||||
|     { | ||||
|         return getColorFromRGB(red, green, blue); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets color from RGB. | ||||
|      * | ||||
|      * @param  red   The red. | ||||
|      * @param  green The green. | ||||
|      * @param  blue  The blue. | ||||
|      * | ||||
|      * @return The color from RGB. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static colortype getColorFromRGB(uint8_t red, uint8_t green, uint8_t blue) | ||||
|     { | ||||
|         return (red & 0xC0) | ((green & 0xC0) >> 2) | ((blue & 0xC0) >> 4); | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getRedColor(colortype color) const | ||||
|     { | ||||
|         return getRedFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets red from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The red from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getRedFromColor(colortype color) | ||||
|     { | ||||
|         return ((color & 0xC0) >> 6) * 0x55; | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getGreenColor(colortype color) const | ||||
|     { | ||||
|         return getGreenFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets green from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The green from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getGreenFromColor(colortype color) | ||||
|     { | ||||
|         return ((color & 0x30) >> 4) * 0x55; | ||||
|     } | ||||
|  | ||||
|     virtual uint8_t getBlueColor(colortype color) const | ||||
|     { | ||||
|         return getBlueFromColor(color); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Gets blue from color. | ||||
|      * | ||||
|      * @param  color The color. | ||||
|      * | ||||
|      * @return The blue from color. | ||||
|      */ | ||||
|     FORCE_INLINE_FUNCTION static uint8_t getBlueFromColor(colortype color) | ||||
|     { | ||||
|         return ((color & 0x0C) >> 2) * 0x55; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for all image formats. This allows drawing any image | ||||
|      * using Bilinear Interpolation and Nearest Neighbor algorithms, but might use a lot of | ||||
|      * memory for the drawing algorithms. | ||||
|      */ | ||||
|     void enableTextureMapperAll(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for RGBA2222 image format. This allows drawing RGBA2222 | ||||
|      * images using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperRGBA2222_BilinearInterpolation, | ||||
|      *      enableTextureMapperRGBA2222_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperRGBA2222(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for RGBA2222 image format. This allows drawing RGBA2222 | ||||
|      * images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperRGBA2222, enableTextureMapperRGBA2222_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperRGBA2222_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for RGBA2222 image format. This allows drawing RGBA2222 | ||||
|      * images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperRGBA2222, enableTextureMapperRGBA2222_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperRGBA2222_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ARGB8888 image format. This allows drawing ARGB8888 | ||||
|      * images using Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperARGB8888_BilinearInterpolation, | ||||
|      *      enableTextureMapperARGB8888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperARGB8888(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ARGB8888 image format. This allows drawing ARGB8888 | ||||
|      * images using Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperARGB8888, enableTextureMapperARGB8888_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperARGB8888_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for ARGB8888 image format. This allows drawing ARGB8888 | ||||
|      * images using Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperARGB8888, enableTextureMapperARGB8888_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperARGB8888_NearestNeighbor(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for A4 image format. This allows drawing A4 images using | ||||
|      * Bilinear Interpolation and Nearest Neighbor algorithms. | ||||
|      * | ||||
|      * @see enableTextureMapperA4_BilinearInterpolation, enableTextureMapperA4_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperA4(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for A4 image format. This allows drawing A4 images using | ||||
|      * Bilinear Interpolation algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperA4, enableTextureMapperA4_NearestNeighbor | ||||
|      */ | ||||
|     void enableTextureMapperA4_BilinearInterpolation(); | ||||
|  | ||||
|     /** | ||||
|      * Enables the texture mappers for A4 image format. This allows drawing A4 images using | ||||
|      * Nearest Neighbor algorithm. | ||||
|      * | ||||
|      * @see enableTextureMapperA4, enableTextureMapperA4_BilinearInterpolation | ||||
|      */ | ||||
|     void enableTextureMapperA4_NearestNeighbor(); | ||||
|  | ||||
| protected: | ||||
|     virtual DrawTextureMapScanLineBase* getTextureMapperDrawScanLine(const TextureSurface& texture, RenderingVariant renderVariant, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Find out how much to advance in the display buffer to get to the next pixel. | ||||
|      * | ||||
|      * @param  rotatedDisplay Is the display running in portrait mode? | ||||
|      * @param  textRotation   Rotation to perform. | ||||
|      * | ||||
|      * @return How much to advance to get to the next pixel. | ||||
|      */ | ||||
|     static int nextPixel(bool rotatedDisplay, TextRotation textRotation); | ||||
|  | ||||
|     /** | ||||
|      * Find out how much to advance in the display buffer to get to the next line. | ||||
|      * | ||||
|      * @param  rotatedDisplay Is the display running in portrait mode? | ||||
|      * @param  textRotation   Rotation to perform. | ||||
|      * | ||||
|      * @return How much to advance to get to the next line. | ||||
|      */ | ||||
|     static int nextLine(bool rotatedDisplay, TextRotation textRotation); | ||||
|  | ||||
|     virtual void drawGlyph(uint16_t* wbuf16, Rect widgetArea, int16_t x, int16_t y, uint16_t offsetX, uint16_t offsetY, const Rect& invalidatedArea, const GlyphNode* glyph, const uint8_t* glyphData, uint8_t byteAlignRow, colortype color, uint8_t bitsPerPixel, uint8_t alpha, TextRotation rotation); | ||||
|  | ||||
|     /** | ||||
|      * Blit a 2D source-array to the framebuffer performing alpha-blending per pixel as | ||||
|      * specified if ARGB8888 is not supported by the DMA a software blend is performed. | ||||
|      * | ||||
|      * @param  sourceData The source-array pointer (points to the beginning of the data). The | ||||
|      *                    sourceData must be stored as 32- bits ARGB8888 values. | ||||
|      * @param  source     The location and dimensions of the source. | ||||
|      * @param  blitRect   A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha      The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                    solid, no blending) | ||||
|      */ | ||||
|     static void blitCopyARGB8888(const uint32_t* sourceData, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
|     /** | ||||
|      * Blit a 2D source-array to the framebuffer performing alpha-blending per pixel as | ||||
|      * specified Performs always a software blend. | ||||
|      * | ||||
|      * @param  sourceData16 The source-array pointer (points to the beginning of the data). The | ||||
|      *                      sourceData must be stored as 8-bit RGBA2222 values. | ||||
|      * @param  source       The location and dimensions of the source. | ||||
|      * @param  blitRect     A rectangle describing what region is to be drawn. | ||||
|      * @param  alpha        The alpha value to use for blending applied to the whole image (255 = | ||||
|      *                      solid, no blending) | ||||
|      */ | ||||
|     static void blitCopyAlphaPerPixel(const uint16_t* sourceData16, const Rect& source, const Rect& blitRect, uint8_t alpha); | ||||
|  | ||||
| private: | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGBA2222_NonOpaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGBA2222_Opaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGBA2222_NonOpaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_RGBA2222_Opaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_Opaque_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_ARGB8888_Opaque_BilinearInterpolation_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_A4_NearestNeighbor_GA; | ||||
|     DrawTextureMapScanLineBase* textureMapper_A4_BilinearInterpolation_GA; | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t bilinearInterpolate8(uint8_t c00, uint8_t c10, uint8_t x) | ||||
|     { | ||||
|         assert(x < 16); | ||||
|         const uint16_t xy10 = 16 * x; | ||||
|         const uint16_t xy00 = 256 - xy10; | ||||
|  | ||||
|         return (c00 * xy00 + c10 * xy10) >> 8; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t bilinearInterpolate8(uint8_t c00, uint8_t c10, uint8_t c01, uint8_t c11, uint8_t x, uint8_t y) | ||||
|     { | ||||
|         assert(x < 16 && y < 16); | ||||
|         const uint16_t xy11 = x * y; | ||||
|         const uint16_t xy10 = 16 * x - xy11; | ||||
|         const uint16_t xy01 = 16 * y - xy11; | ||||
|         const uint16_t xy00 = 256 - (xy11 + xy10 + xy01); | ||||
|  | ||||
|         return (c00 * xy00 + c10 * xy10 + c01 * xy01 + c11 * xy11) >> 8; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION uint32_t convertRGBA2222toARGB8888(colortype col) const | ||||
|     { | ||||
|         return (((col & 0x03) << 24) | ((col & 0xC0) << 10) | ((col & 0x30) << 4) | ((col & 0x0C) >> 2)) * 0x55; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t convertRGBA2222toRGB888(uint8_t val) | ||||
|     { | ||||
|         return (((val & 0xC0) << 10) | ((val & 0x30) << 4) | ((val & 0x0C) >> 2)) * 0x55; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t convertRGB888toRGBX2222(uint32_t val) | ||||
|     { | ||||
|         val &= 0xC0C0C0; | ||||
|         return (val >> 4) | (val >> 10) | (val >> 16); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t bilinearInterpolate888(uint32_t c00, uint32_t c10, uint32_t c01, uint32_t c11, uint8_t x, uint8_t y) | ||||
|     { | ||||
|         assert(x < 16 && y < 16); | ||||
|         const uint16_t xy11 = x * y; | ||||
|         const uint16_t xy10 = 16 * x - xy11; | ||||
|         const uint16_t xy01 = 16 * y - xy11; | ||||
|         const uint16_t xy00 = 256 - (xy11 + xy10 + xy01); | ||||
|  | ||||
|         return ((((c00 & 0xFF00FF) * xy00 + (c10 & 0xFF00FF) * xy10 + (c01 & 0xFF00FF) * xy01 + (c11 & 0xFF00FF) * xy11) >> 8) & 0xFF00FF) | ||||
|                | ((((c00 & 0x00FF00) * xy00 + (c10 & 0x00FF00) * xy10 + (c01 & 0x00FF00) * xy01 + (c11 & 0x00FF00) * xy11) >> 8) & 0x00FF00); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div255_888(uint32_t val, uint8_t factor) | ||||
|     { | ||||
|         return div255rb((val & 0xFF00FF) * factor) | div255g((val & 0x00FF00) * factor); | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint32_t div255_888_FFcheck(uint32_t val, uint8_t factor) | ||||
|     { | ||||
|         return factor < 0xFF ? div255_888(val, factor) : val; | ||||
|     } | ||||
|  | ||||
|     FORCE_INLINE_FUNCTION static uint8_t alphaBlend(const uint8_t r, const uint8_t g, const uint8_t b, const uint8_t alpha, const uint8_t fbr, const uint8_t fbg, const uint8_t fbb, const uint8_t ialpha) | ||||
|     { | ||||
|         return getColorFromRGB(div255(r * alpha + fbr * ialpha), div255(g * alpha + fbg * ialpha), div255(b * alpha + fbb * ialpha)); | ||||
|     } | ||||
|  | ||||
|     class DrawTextureMapScanLineBase8 : public DrawTextureMapScanLineBase | ||||
|     { | ||||
|     protected: | ||||
|         FORCE_INLINE_FUNCTION bool overrunCheckNearestNeighbor(uint8_t*& destBits, int& pixelsToDraw, fixed16_16& U, fixed16_16& V, fixed16_16 deltaU, fixed16_16 deltaV, const int16_t maxWidth, const int16_t maxHeight); | ||||
|         FORCE_INLINE_FUNCTION bool overrunCheckBilinearInterpolation(uint8_t*& destBits, int& pixelsToDraw, fixed16_16& U, fixed16_16& V, fixed16_16 deltaU, fixed16_16 deltaV, const int16_t maxWidth, const int16_t maxHeight); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGBA2222_NonOpaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGBA2222_Opaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGBA2222_NonOpaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint8_t* const destBits, const uint8_t* const textureBits, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_RGBA2222_Opaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t* const textureBits, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint8_t* const destBits, const uint8_t* const textureBits, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ARGB8888_NonOpaque_NearestNeighbor_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_ARGB8888_NonOpaque_BilinearInterpolation_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint8_t* const destBits, const uint32_t* const textureBits32, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_NearestNeighbor_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint8_t a4, const uint8_t alpha); | ||||
|     }; | ||||
|  | ||||
|     class TextureMapper_A4_BilinearInterpolation_GA : public DrawTextureMapScanLineBase8 | ||||
|     { | ||||
|     public: | ||||
|         virtual void drawTextureMapScanLineSubdivisions(int subdivisions, const int widthModLength, int pixelsToDraw, const int affineLength, float oneOverZRight, float UOverZRight, float VOverZRight, fixed16_16 U, fixed16_16 V, fixed16_16 deltaU, fixed16_16 deltaV, float ULeft, float VLeft, float URight, float VRight, float ZRight, const DrawingSurface& dest, const int destX, const int destY, const TextureSurface& texture, uint8_t alpha, const float dOneOverZdXAff, const float dUOverZdXAff, const float dVOverZdXAff); | ||||
|  | ||||
|     private: | ||||
|         FORCE_INLINE_FUNCTION void writePixel(uint8_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapStride, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|         void writePixelOnEdge(uint8_t* const destBits, const uint16_t* const textureBits, const int16_t bitmapStride, const int16_t bitmapWidth, const int16_t bitmapHeight, const int UInt, const int VInt, const uint8_t UFrac, const uint8_t VFrac, const uint8_t alpha); | ||||
|     }; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * The class LCD8RGBA2222DebugPrinter implements the DebugPrinter interface for printing debug | ||||
|  * messages on top of 8bit framebuffer. | ||||
|  * | ||||
|  * @see DebugPrinter | ||||
|  */ | ||||
| class LCD8RGBA2222DebugPrinter : public DebugPrinter | ||||
| { | ||||
| public: | ||||
|     virtual void draw(const Rect& rect) const; | ||||
| }; | ||||
|  | ||||
| } // namespace touchgfx | ||||
|  | ||||
| #endif // LCD8BPP_RGBA2222_HPP | ||||
| @@ -0,0 +1,63 @@ | ||||
| /** | ||||
|   ****************************************************************************** | ||||
|   * This file is part of the TouchGFX 4.16.1 distribution. | ||||
|   * | ||||
|   * <h2><center>© Copyright (c) 2021 STMicroelectronics. | ||||
|   * All rights reserved.</center></h2> | ||||
|   * | ||||
|   * This software component is licensed by ST under Ultimate Liberty license | ||||
|   * SLA0044, the "License"; You may not use this file except in compliance with | ||||
|   * the License. You may obtain a copy of the License at: | ||||
|   *                             www.st.com/SLA0044 | ||||
|   * | ||||
|   ****************************************************************************** | ||||
|   */ | ||||
|  | ||||
| /** | ||||
|  * @file platform/driver/touch/I2CTouchController.hpp | ||||
|  * | ||||
|  * Declares the touchgfx::I2CTouchController interface class. | ||||
|  */ | ||||
| #ifndef I2CTOUCHCONTROLLER_HPP | ||||
| #define I2CTOUCHCONTROLLER_HPP | ||||
|  | ||||
| #include <platform/driver/i2c/I2C.hpp> | ||||
| #include <platform/driver/touch/TouchController.hpp> | ||||
| #include <touchgfx/hal/Types.hpp> | ||||
|  | ||||
| namespace touchgfx | ||||
| { | ||||
| /** | ||||
|  * Specific I2C-enabled type of Touch Controller. | ||||
|  * | ||||
|  * @see TouchController | ||||
|  */ | ||||
| class I2CTouchController : public TouchController | ||||
| { | ||||
| public: | ||||
|     /** | ||||
|      * Constructor. Initializes I2C driver. | ||||
|      * | ||||
|      * @param [in] i2c I2C driver. | ||||
|      */ | ||||
|     I2CTouchController(I2C& i2c) | ||||
|         : i2c(i2c) | ||||
|     { | ||||
|         i2c.init(); | ||||
|     } | ||||
|  | ||||
|     virtual ~I2CTouchController() | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     virtual void init() = 0; | ||||
|  | ||||
|     virtual bool sampleTouch(int32_t& x, int32_t& y) = 0; | ||||
|  | ||||
| protected: | ||||
|     I2C& i2c; ///< I2C driver | ||||
| }; | ||||
|  | ||||
| } // namespace touchgfx | ||||
|  | ||||
| #endif // I2CTOUCHCONTROLLER_HPP | ||||
| @@ -0,0 +1,47 @@ | ||||
| /** | ||||
|   ****************************************************************************** | ||||
|   * This file is part of the TouchGFX 4.16.1 distribution. | ||||
|   * | ||||
|   * <h2><center>© Copyright (c) 2021 STMicroelectronics. | ||||
|   * All rights reserved.</center></h2> | ||||
|   * | ||||
|   * This software component is licensed by ST under Ultimate Liberty license | ||||
|   * SLA0044, the "License"; You may not use this file except in compliance with | ||||
|   * the License. You may obtain a copy of the License at: | ||||
|   *                             www.st.com/SLA0044 | ||||
|   * | ||||
|   ****************************************************************************** | ||||
|   */ | ||||
|  | ||||
| /** | ||||
|  * @file platform/driver/touch/NoTouchController.hpp | ||||
|  * | ||||
|  * Declares the touchgfx::NoTouchController class. | ||||
|  */ | ||||
| #ifndef NOTOUCHCONTROLLER_HPP | ||||
| #define NOTOUCHCONTROLLER_HPP | ||||
|  | ||||
| #include <platform/driver/touch/TouchController.hpp> | ||||
|  | ||||
| namespace touchgfx | ||||
| { | ||||
| /** | ||||
|  * Empty TouchController implementation which does nothing. Use this if your display does not | ||||
|  * have touch input capabilities. | ||||
|  */ | ||||
| class NoTouchController : public TouchController | ||||
| { | ||||
| public: | ||||
|     virtual void init() | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     virtual bool sampleTouch(int32_t& x, int32_t& y) | ||||
|     { | ||||
|         return false; | ||||
|     } | ||||
| }; | ||||
|  | ||||
| } // namespace touchgfx | ||||
|  | ||||
| #endif // NOTOUCHCONTROLLER_HPP | ||||
| @@ -0,0 +1,43 @@ | ||||
| /** | ||||
|   ****************************************************************************** | ||||
|   * This file is part of the TouchGFX 4.16.1 distribution. | ||||
|   * | ||||
|   * <h2><center>© Copyright (c) 2021 STMicroelectronics. | ||||
|   * All rights reserved.</center></h2> | ||||
|   * | ||||
|   * This software component is licensed by ST under Ultimate Liberty license | ||||
|   * SLA0044, the "License"; You may not use this file except in compliance with | ||||
|   * the License. You may obtain a copy of the License at: | ||||
|   *                             www.st.com/SLA0044 | ||||
|   * | ||||
|   ****************************************************************************** | ||||
|   */ | ||||
|  | ||||
| /** | ||||
|  * @file platform/driver/touch/SDL2TouchController.hpp | ||||
|  * | ||||
|  * Declares the touchgfx::SDL2TouchController class. | ||||
|  */ | ||||
| #ifndef SDL2TOUCHCONTROLLER_HPP | ||||
| #define SDL2TOUCHCONTROLLER_HPP | ||||
|  | ||||
| #include <platform/driver/touch/TouchController.hpp> | ||||
|  | ||||
| namespace touchgfx | ||||
| { | ||||
| /** | ||||
|  * TouchController for the simulator. | ||||
|  * | ||||
|  * @see TouchController | ||||
|  */ | ||||
| class SDL2TouchController : public TouchController | ||||
| { | ||||
| public: | ||||
|     virtual void init(); | ||||
|  | ||||
|     virtual bool sampleTouch(int32_t& x, int32_t& y); | ||||
| }; | ||||
|  | ||||
| } // namespace touchgfx | ||||
|  | ||||
| #endif // SDL2TOUCHCONTROLLER_HPP | ||||
| @@ -0,0 +1,45 @@ | ||||
| /** | ||||
|   ****************************************************************************** | ||||
|   * This file is part of the TouchGFX 4.16.1 distribution. | ||||
|   * | ||||
|   * <h2><center>© Copyright (c) 2021 STMicroelectronics. | ||||
|   * All rights reserved.</center></h2> | ||||
|   * | ||||
|   * This software component is licensed by ST under Ultimate Liberty license | ||||
|   * SLA0044, the "License"; You may not use this file except in compliance with | ||||
|   * the License. You may obtain a copy of the License at: | ||||
|   *                             www.st.com/SLA0044 | ||||
|   * | ||||
|   ****************************************************************************** | ||||
|   */ | ||||
|  | ||||
| /** | ||||
|  * @file platform/driver/touch/SDLTouchController.hpp | ||||
|  * | ||||
|  * Declares the touchgfx::SDLTouchController class. | ||||
|  */ | ||||
| #ifndef SDLTOUCHCONTROLLER_HPP | ||||
| #define SDLTOUCHCONTROLLER_HPP | ||||
|  | ||||
| #include <platform/driver/touch/TouchController.hpp> | ||||
|  | ||||
| namespace touchgfx | ||||
| { | ||||
| /** | ||||
|  * TouchController for the simulator. | ||||
|  * | ||||
|  * @see TouchController | ||||
|  * | ||||
|  * @deprecated Use SDL2TouchController | ||||
|  */ | ||||
| class SDLTouchController : public TouchController | ||||
| { | ||||
| public: | ||||
|     virtual void init(); | ||||
|  | ||||
|     virtual bool sampleTouch(int32_t& x, int32_t& y); | ||||
| }; | ||||
|  | ||||
| } // namespace touchgfx | ||||
|  | ||||
| #endif // SDLTOUCHCONTROLLER_HPP | ||||
| @@ -0,0 +1,53 @@ | ||||
| /** | ||||
|   ****************************************************************************** | ||||
|   * This file is part of the TouchGFX 4.16.1 distribution. | ||||
|   * | ||||
|   * <h2><center>© Copyright (c) 2021 STMicroelectronics. | ||||
|   * All rights reserved.</center></h2> | ||||
|   * | ||||
|   * This software component is licensed by ST under Ultimate Liberty license | ||||
|   * SLA0044, the "License"; You may not use this file except in compliance with | ||||
|   * the License. You may obtain a copy of the License at: | ||||
|   *                             www.st.com/SLA0044 | ||||
|   * | ||||
|   ****************************************************************************** | ||||
|   */ | ||||
|  | ||||
| /** | ||||
|  * @file platform/driver/touch/TouchController.hpp | ||||
|  * | ||||
|  * Declares the touchgfx::TouchController interface class. | ||||
|  */ | ||||
| #ifndef TOUCHCONTROLLER_HPP | ||||
| #define TOUCHCONTROLLER_HPP | ||||
|  | ||||
| #include <touchgfx/hal/Types.hpp> | ||||
|  | ||||
| namespace touchgfx | ||||
| { | ||||
| /** Basic Touch Controller interface. */ | ||||
| class TouchController | ||||
| { | ||||
| public: | ||||
|     /** Finalizes an instance of the TouchController class. */ | ||||
|     virtual ~TouchController() | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     /** Initializes touch controller. */ | ||||
|     virtual void init() = 0; | ||||
|  | ||||
|     /** | ||||
|      * Checks whether the touch screen is being touched, and if so, what coordinates. | ||||
|      * | ||||
|      * @param [out] x The x position of the touch. | ||||
|      * @param [out] y The y position of the touch. | ||||
|      * | ||||
|      * @return True if a touch has been detected, otherwise false. | ||||
|      */ | ||||
|     virtual bool sampleTouch(int32_t& x, int32_t& y) = 0; | ||||
| }; | ||||
|  | ||||
| } // namespace touchgfx | ||||
|  | ||||
| #endif // TOUCHCONTROLLER_HPP | ||||
| @@ -0,0 +1,476 @@ | ||||
| /** | ||||
|   ****************************************************************************** | ||||
|   * This file is part of the TouchGFX 4.16.1 distribution. | ||||
|   * | ||||
|   * <h2><center>© Copyright (c) 2021 STMicroelectronics. | ||||
|   * All rights reserved.</center></h2> | ||||
|   * | ||||
|   * This software component is licensed by ST under Ultimate Liberty license | ||||
|   * SLA0044, the "License"; You may not use this file except in compliance with | ||||
|   * the License. You may obtain a copy of the License at: | ||||
|   *                             www.st.com/SLA0044 | ||||
|   * | ||||
|   ****************************************************************************** | ||||
|   */ | ||||
|  | ||||
| /** | ||||
|  * @file platform/hal/simulator/sdl2/HALSDL2.hpp | ||||
|  * | ||||
|  * Declares the touchgfx::HALSDL2 class. | ||||
|  */ | ||||
| #ifndef HALSDL2_HPP | ||||
| #define HALSDL2_HPP | ||||
|  | ||||
| #include <SDL2/SDL_render.h> | ||||
| #include <SDL2/SDL_video.h> | ||||
| #include <platform/driver/touch/TouchController.hpp> | ||||
| #include <touchgfx/hal/HAL.hpp> | ||||
| #include <touchgfx/lcd/LCD.hpp> | ||||
|  | ||||
| namespace touchgfx | ||||
| { | ||||
| /** Simulator enable stdio. */ | ||||
| void simulator_enable_stdio(); | ||||
|  | ||||
| /** | ||||
|  * Simulator printf. | ||||
|  * | ||||
|  * @param  format Describes the format to use. | ||||
|  * @param  pArg   The argument list. | ||||
|  */ | ||||
| void simulator_printf(const char* format, va_list pArg); | ||||
|  | ||||
| /** | ||||
|  * HAL implementation for the TouchGFX simulator. This particular simulator HAL implementation | ||||
|  * uses SDL2 to show the content of the framebuffer in a window. | ||||
|  * | ||||
|  * @see HAL | ||||
|  */ | ||||
| class HALSDL2 : public HAL | ||||
| { | ||||
| public: | ||||
|     /** | ||||
|      * Initializes a new instance of the HALSDL2 class. | ||||
|      * | ||||
|      * @param [in] dma       Reference to DMA interface. | ||||
|      * @param [in] lcd       Reference to the LCD. | ||||
|      * @param [in] touchCtrl Reference to Touch Controller driver. | ||||
|      * @param      width     Width of the display. | ||||
|      * @param      height    Height of the display. | ||||
|      */ | ||||
|     HALSDL2(DMA_Interface& dma, LCD& lcd, TouchController& touchCtrl, uint16_t width, uint16_t height) | ||||
|         : HAL(dma, lcd, touchCtrl, width, height), | ||||
|           portraitSkin(), | ||||
|           landscapeSkin(), | ||||
|           currentSkin(0), | ||||
|           isSkinActive(true), | ||||
|           isWindowBorderless(false), | ||||
|           isWindowVisible(true), | ||||
|           isConsoleVisible(true), | ||||
|           windowDrag(false) | ||||
|     { | ||||
|         setVsyncInterval(30.f); // Simulate 20Hz per default for backward compatibility | ||||
|         updateCurrentSkin(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Main event loop. Will wait for VSYNC signal, and then process next frame. Call this | ||||
|      * function from your GUI task. | ||||
|      * | ||||
|      * @note This function never returns! | ||||
|      */ | ||||
|     virtual void taskEntry(); | ||||
|  | ||||
|     /** | ||||
|      * Sample key event from keyboard. | ||||
|      * | ||||
|      * @param [out] key Output parameter that will be set to the key value if a key press was | ||||
|      *                  detected. | ||||
|      * | ||||
|      * @return True if a key press was detected and the "key" parameter is set to a value. | ||||
|      */ | ||||
|     virtual bool sampleKey(uint8_t& key); | ||||
|  | ||||
|     /** | ||||
|      * This function is called whenever the framework has performed a complete draw. | ||||
|      * | ||||
|      * On some platforms, a local framebuffer needs to be pushed to the display through a | ||||
|      * SPI channel or similar. Implement that functionality here. This function is called | ||||
|      * whenever the framework has performed a complete draw. | ||||
|      */ | ||||
|     virtual void flushFrameBuffer(); | ||||
|  | ||||
|     /** | ||||
|      * This function is called whenever the framework has performed a partial draw. | ||||
|      * | ||||
|      * @param  rect The area of the screen that has been drawn, expressed in absolute coordinates. | ||||
|      */ | ||||
|     virtual void flushFrameBuffer(const Rect& rect); | ||||
|  | ||||
|     /** | ||||
|      * This function performs a platform-specific memcpy, if supported by the hardware. | ||||
|      * | ||||
|      * @param [out] dest     Pointer to destination memory. | ||||
|      * @param       src      Pointer to source memory. | ||||
|      * @param       numBytes Number of bytes to copy. | ||||
|      * | ||||
|      * @return true if the copy succeeded, false if copy was not performed. | ||||
|      */ | ||||
|     virtual bool blockCopy(void* RESTRICT dest, const void* RESTRICT src, uint32_t numBytes); | ||||
|  | ||||
|     /** | ||||
|      * Sets vsync interval for simulating same tick speed as the real hardware. Due to | ||||
|      * limitations in the granularity of SDL, the generated ticks in the simulator might not | ||||
|      * occur at the exact time, but accumulated over several ticks, the precision is very | ||||
|      * good. | ||||
|      * | ||||
|      * @param  ms The milliseconds between ticks. | ||||
|      * | ||||
|      * @note That you can also use HAL::setFrameRateCompensation() in the simulator. The effect of | ||||
|      *       this can easily be demonstrated by dragging the console output window of the | ||||
|      *       simulator (when running from Visual Studio) as this will pause the SDL and | ||||
|      *       generate a lot of ticks when the console window is released. Beware that | ||||
|      *       since the missed vsyncs are accumulated in an 8 bit counter, only up to 255 | ||||
|      *       ticks may be missed, so at VsyncInterval = 16.6667, dragging the windows for | ||||
|      *       more than 255 * 16.6667ms = 4250ms | ||||
|      *       = 4.25s will not generate all the ticks that were actually missed. This | ||||
|      *       situation is, however, not very realistic, as normally just a couple of | ||||
|      *       vsyncs are skipped. | ||||
|      */ | ||||
|     void setVsyncInterval(float ms); | ||||
|  | ||||
|     /** | ||||
|      * Samples the position of the mouse cursor. | ||||
|      * | ||||
|      * @param [out] x The x coordinate. | ||||
|      * @param [out] y The y coordinate. | ||||
|      * | ||||
|      * @return True if touch detected, false otherwise. | ||||
|      */ | ||||
|     bool doSampleTouch(int32_t& x, int32_t& y) const; | ||||
|  | ||||
|     /** | ||||
|      * Initializes SDL. | ||||
|      * | ||||
|      * @param      argcount Number of arguments. | ||||
|      * @param [in] args     Arguments. | ||||
|      * | ||||
|      * @return True if init went well, false otherwise. | ||||
|      */ | ||||
|     virtual bool sdl_init(int argcount, char** args); | ||||
|  | ||||
|     /** | ||||
|      * Sets window title. | ||||
|      * | ||||
|      * Sets window title of the TouchGFX simulator. | ||||
|      * | ||||
|      * @param  title The title, if null the original "TouchGFX simulator" will be used. | ||||
|      * | ||||
|      * @see getWindowTitle | ||||
|      */ | ||||
|     static void setWindowTitle(const char* title); | ||||
|  | ||||
|     /** | ||||
|      * Gets window title. | ||||
|      * | ||||
|      * @return null "TouchGFX simulator" unless set to something else using setWindowTitle(). | ||||
|      * | ||||
|      * @see setWindowTitle | ||||
|      */ | ||||
|     static const char* getWindowTitle(); | ||||
|  | ||||
|     /** | ||||
|      * Loads a skin for a given display orientation that will be rendered in the simulator | ||||
|      * window with the the TouchGFX framebuffer placed inside the bitmap at the given | ||||
|      * coordinates. Different bitmaps can be loaded in landscape and portrait mode. If the | ||||
|      * provided bitmap cannot be loaded, the TouchGFX framebuffer will be displayed as | ||||
|      * normal. If the png files contain areas with alpha | ||||
|      * < 255, this will be used to create a shaped window. | ||||
|      * | ||||
|      * @param  orientation The orientation. | ||||
|      * @param  x           The x coordinate. | ||||
|      * @param  y           The y coordinate. | ||||
|      * | ||||
|      * @note The skins must be named "portrait.png" and "landscape.png" and placed inside the | ||||
|      *       "simulator/" folder. The build process of the simulator will automatically | ||||
|      *       copy the skins to the folder where the executable simulator is generated. | ||||
|      * @note When as skin is set, the entire framebuffer is rendered through SDL whenever there is | ||||
|      *       a change. Without a skin, only the areas with changes is rendered through SDL. | ||||
|      */ | ||||
|     void loadSkin(DisplayOrientation orientation, int x, int y); | ||||
|  | ||||
|     /** Saves a screenshot to the default folder and default filename. */ | ||||
|     void saveScreenshot(); | ||||
|  | ||||
|     /** | ||||
|      * Copy the next N screenshots to disk. On each screen update, the new screen is saved | ||||
|      * to disk. | ||||
|      * | ||||
|      * @param  n Number of screenshots to save. These are added to any ongoing amount of | ||||
|      *           screenshots in queue. | ||||
|      */ | ||||
|     virtual void saveNextScreenshots(int n); | ||||
|  | ||||
|     /** | ||||
|      * Saves a screenshot. | ||||
|      * | ||||
|      * @param [in] folder   Folder name to place the screenshot in. | ||||
|      * @param [in] filename Filename to save the screenshot to. | ||||
|      */ | ||||
|     virtual void saveScreenshot(char* folder, char* filename); | ||||
|  | ||||
|     /** Copies the screenshot to clipboard. */ | ||||
|     virtual void copyScreenshotToClipboard(); | ||||
|  | ||||
|     /** | ||||
|      * Single stepping enable/disable. When single stepping is enabled, F10 will execute one | ||||
|      * tick and F9 will disable single stepping. | ||||
|      * | ||||
|      * @param  singleStepping (Optional) True to pause the simulation and start single stepping. | ||||
|      * | ||||
|      * @see isSingleStepping | ||||
|      */ | ||||
|     static void setSingleStepping(bool singleStepping = true); | ||||
|  | ||||
|     /** | ||||
|      * Is single stepping. | ||||
|      * | ||||
|      * @return True if single stepping, false if not. | ||||
|      * | ||||
|      * @see setSingleStepping | ||||
|      */ | ||||
|     static bool isSingleStepping(); | ||||
|  | ||||
|     /** | ||||
|      * Single step a number of steps. Only works if single stepping is already enabled. | ||||
|      * | ||||
|      * @param  steps (Optional) The steps Default is 1 step. | ||||
|      * | ||||
|      * @see setSingleStepping, isSingleStepping | ||||
|      */ | ||||
|     static void singleStep(uint16_t steps = 1); | ||||
|  | ||||
| #ifndef __linux__ | ||||
|     /** | ||||
|      * Gets the argc and argv for a Windows program. | ||||
|      * | ||||
|      * @param [in,out] argc Pointer to where to store number of arguments. | ||||
|      * | ||||
|      * @return The argv list of arguments. | ||||
|      */ | ||||
|     static char** getArgv(int* argc); | ||||
| #endif | ||||
|  | ||||
|     /** | ||||
|      * Scale framebuffer to 24bpp. The format of the framebuffer (src) is given in parameter | ||||
|      * format. The result is placed in the pre-allocated memory pointed to by parameter dst. | ||||
|      * If the frambebuffer is in format Bitmap::RGB888, parameter dst is not used and the | ||||
|      * parameter src is simply returned. | ||||
|      * | ||||
|      * @param [out] dst    Destination for the framebuffer. must be non-null unless format is | ||||
|      *                     Bitmap::RGB888. | ||||
|      * @param [in]  src    The framebuffer. | ||||
|      * @param       format Describes the format of the framebuffer (lcd().framebufferFormat()). | ||||
|      * | ||||
|      * @return Null if it fails, else a pointer to an uint8_t. | ||||
|      */ | ||||
|     static uint8_t* scaleTo24bpp(uint8_t* dst, uint16_t* src, Bitmap::BitmapFormat format); | ||||
|  | ||||
|     /** | ||||
|      * Rotates a framebuffer if the display is rotated. | ||||
|      * | ||||
|      * @param [out] dst Destination for the rotated framebuffer. must be non-null if the | ||||
|      *                  screen is rotated. | ||||
|      * @param [in]  src The framebuffer. | ||||
|      * | ||||
|      * @return Null if it fails, else a pointer to an uint8_t. | ||||
|      */ | ||||
|     static uint8_t* doRotate(uint8_t* dst, uint8_t* src); | ||||
|  | ||||
|     /** | ||||
|      * Change visibility of window (hidden vs. shown) as well as (due to | ||||
|      * backward compatibility) the visibility of the console window. | ||||
|      * | ||||
|      * @param  visible      Should the window be visible? | ||||
|      * @param  redrawWindow (Optional) Should the window be redrawn? Default is true. | ||||
|      * | ||||
|      * @see getWindowVisible, setConsoleVisible | ||||
|      */ | ||||
|     void setWindowVisible(bool visible, bool redrawWindow = true) | ||||
|     { | ||||
|         isWindowVisible = visible; | ||||
|         isConsoleVisible = visible; | ||||
|         if (redrawWindow) | ||||
|         { | ||||
|             recreateWindow(); | ||||
|             simulator_enable_stdio(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Is the window visible? | ||||
|      * | ||||
|      * @return True if it is visible, false if it is hidden. | ||||
|      * | ||||
|      * @see setWindowVisible, getConsoleVisible | ||||
|      */ | ||||
|     bool getWindowVisible() const | ||||
|     { | ||||
|         return isWindowVisible; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Change visibility of console window (hidden vs. shown). | ||||
|      * | ||||
|      * @param  visible      Should the window be visible? | ||||
|      * @param  redrawWindow (Optional) Should the window be redrawn? Default is true. | ||||
|      * | ||||
|      * @see setWindowVisible, getConsoleVisible | ||||
|      */ | ||||
|     void setConsoleVisible(bool visible, bool redrawWindow = true) | ||||
|     { | ||||
|         isConsoleVisible = visible; | ||||
|         if (redrawWindow) | ||||
|         { | ||||
|             recreateWindow(); | ||||
|             touchgfx::simulator_enable_stdio(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Is console window visible? | ||||
|      * | ||||
|      * @return True if it is visible, false if it is hidden. | ||||
|      * | ||||
|      * @see setConsoleVisible, getWindowVisible | ||||
|      */ | ||||
|     bool getConsoleVisible() const | ||||
|     { | ||||
|         return isConsoleVisible; | ||||
|     } | ||||
|  | ||||
| protected: | ||||
|     /** | ||||
|      * Gets TFT framebuffer. | ||||
|      * | ||||
|      * @return null if it fails, else the TFT framebuffer. | ||||
|      */ | ||||
|     virtual uint16_t* getTFTFrameBuffer() const; | ||||
|  | ||||
|     /** | ||||
|      * Sets TFT framebuffer. | ||||
|      * | ||||
|      * @param [in] addr The address of the TFT framebuffer. | ||||
|      */ | ||||
|     void setTFTFrameBuffer(uint16_t* addr); | ||||
|  | ||||
|     /** | ||||
|      * Update framebuffer using an SDL Surface. | ||||
|      * | ||||
|      * @param      _rectToUpdate Area to update. | ||||
|      * @param [in] frameBuffer   Target framebuffer. | ||||
|      */ | ||||
|     virtual void renderLCD_FrameBufferToMemory(const Rect& _rectToUpdate, uint8_t* frameBuffer); | ||||
|  | ||||
|     /** Disables the DMA and LCD interrupts. */ | ||||
|     virtual void disableInterrupts() | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     /** Enables the DMA and LCD interrupts. */ | ||||
|     virtual void enableInterrupts() | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     /** Configures LCD interrupt. */ | ||||
|     virtual void configureLCDInterrupt() | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     /** Enables the LCD interrupt. */ | ||||
|     virtual void enableLCDControllerInterrupt() | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Configures the interrupts relevant for TouchGFX. This primarily entails setting the | ||||
|      * interrupt priorities for the DMA and LCD interrupts. | ||||
|      */ | ||||
|     virtual void configureInterrupts() | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     /** Perform the actual display orientation change. */ | ||||
|     void performDisplayOrientationChange(); | ||||
|  | ||||
| private: | ||||
|     void recreateWindow(bool updateContent = true); | ||||
|     void pushTouch(bool down) const; | ||||
|     bool popTouch() const; | ||||
|     static void updateTitle(int32_t x, int32_t y); | ||||
|     void alphaChannelCheck(SDL_Surface* surface, bool& isOpaque, bool& hasSemiTransparency); | ||||
|     void updateCurrentSkin(); | ||||
|     int getCurrentSkinX() const; | ||||
|     int getCurrentSkinY() const; | ||||
|  | ||||
|     static bool debugInfoEnabled; | ||||
|  | ||||
|     float msBetweenTicks; | ||||
|     float msPassed; | ||||
|  | ||||
|     static uint16_t icon[]; | ||||
|     static const char* customTitle; | ||||
|  | ||||
|     class SkinInfo | ||||
|     { | ||||
|     public: | ||||
|         SDL_Surface* surface; | ||||
|         bool isOpaque; | ||||
|         bool hasSemiTransparency; | ||||
|         int offsetX; | ||||
|         int offsetY; | ||||
|         SkinInfo() | ||||
|             : surface(0), isOpaque(true), hasSemiTransparency(false), offsetX(0), offsetY(0) | ||||
|         { | ||||
|         } | ||||
|         virtual ~SkinInfo() | ||||
|         { | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|     char programPath[300]; | ||||
|     SkinInfo portraitSkin; | ||||
|     SkinInfo landscapeSkin; | ||||
|     SkinInfo* currentSkin; | ||||
|     bool isSkinActive; | ||||
|     bool isWindowBorderless; | ||||
|     bool isWindowVisible; | ||||
|     bool isConsoleVisible; | ||||
|     static bool flashInvalidatedRect; | ||||
|  | ||||
|     bool windowDrag; | ||||
|     int windowDragX; | ||||
|     int windowDragY; | ||||
|  | ||||
|     static int32_t _xMouse; | ||||
|     static int32_t _yMouse; | ||||
|     static int32_t _x; | ||||
|     static int32_t _y; | ||||
|     static bool isWindowBeingDragged; | ||||
|     static int initialWindowX; | ||||
|     static int initialWindowY; | ||||
|     static int initialMouseX; | ||||
|     static int initialMouseY; | ||||
|     static bool _lastTouch; | ||||
|     static bool _touches[5]; | ||||
|     static int _numTouches; | ||||
|  | ||||
|     static uint8_t keyPressed; | ||||
|  | ||||
|     static bool singleSteppingEnabled; | ||||
|     static uint16_t singleSteppingSteps; | ||||
| }; | ||||
|  | ||||
| } // namespace touchgfx | ||||
|  | ||||
| #endif // HALSDL2_HPP | ||||
| @@ -0,0 +1,132 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL.h | ||||
|  * | ||||
|  *  Main include header for the SDL library | ||||
|  */ | ||||
|  | ||||
|  | ||||
| #ifndef _SDL_H | ||||
| #define _SDL_H | ||||
|  | ||||
| #include "SDL_main.h" | ||||
| #include "SDL_stdinc.h" | ||||
| #include "SDL_assert.h" | ||||
| #include "SDL_atomic.h" | ||||
| #include "SDL_audio.h" | ||||
| #include "SDL_clipboard.h" | ||||
| #include "SDL_cpuinfo.h" | ||||
| #include "SDL_endian.h" | ||||
| #include "SDL_error.h" | ||||
| #include "SDL_events.h" | ||||
| #include "SDL_filesystem.h" | ||||
| #include "SDL_joystick.h" | ||||
| #include "SDL_gamecontroller.h" | ||||
| #include "SDL_haptic.h" | ||||
| #include "SDL_hints.h" | ||||
| #include "SDL_loadso.h" | ||||
| #include "SDL_log.h" | ||||
| #include "SDL_messagebox.h" | ||||
| #include "SDL_mutex.h" | ||||
| #include "SDL_power.h" | ||||
| #include "SDL_render.h" | ||||
| #include "SDL_rwops.h" | ||||
| #include "SDL_system.h" | ||||
| #include "SDL_thread.h" | ||||
| #include "SDL_timer.h" | ||||
| #include "SDL_version.h" | ||||
| #include "SDL_video.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /* As of version 0.5, SDL is loaded dynamically into the application */ | ||||
|  | ||||
| /** | ||||
|  *  \name SDL_INIT_* | ||||
|  * | ||||
|  *  These are the flags which may be passed to SDL_Init().  You should | ||||
|  *  specify the subsystems which you will be using in your application. | ||||
|  */ | ||||
| /* @{ */ | ||||
| #define SDL_INIT_TIMER          0x00000001 | ||||
| #define SDL_INIT_AUDIO          0x00000010 | ||||
| #define SDL_INIT_VIDEO          0x00000020  /**< SDL_INIT_VIDEO implies SDL_INIT_EVENTS */ | ||||
| #define SDL_INIT_JOYSTICK       0x00000200  /**< SDL_INIT_JOYSTICK implies SDL_INIT_EVENTS */ | ||||
| #define SDL_INIT_HAPTIC         0x00001000 | ||||
| #define SDL_INIT_GAMECONTROLLER 0x00002000  /**< SDL_INIT_GAMECONTROLLER implies SDL_INIT_JOYSTICK */ | ||||
| #define SDL_INIT_EVENTS         0x00004000 | ||||
| #define SDL_INIT_NOPARACHUTE    0x00100000  /**< compatibility; this flag is ignored. */ | ||||
| #define SDL_INIT_EVERYTHING ( \ | ||||
|                 SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO | SDL_INIT_EVENTS | \ | ||||
|                 SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER \ | ||||
|             ) | ||||
| /* @} */ | ||||
|  | ||||
| /** | ||||
|  *  This function initializes  the subsystems specified by \c flags | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_Init(Uint32 flags); | ||||
|  | ||||
| /** | ||||
|  *  This function initializes specific SDL subsystems | ||||
|  * | ||||
|  *  Subsystem initialization is ref-counted, you must call | ||||
|  *  SDL_QuitSubSystem for each SDL_InitSubSystem to correctly | ||||
|  *  shutdown a subsystem manually (or call SDL_Quit to force shutdown). | ||||
|  *  If a subsystem is already loaded then this call will | ||||
|  *  increase the ref-count and return. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_InitSubSystem(Uint32 flags); | ||||
|  | ||||
| /** | ||||
|  *  This function cleans up specific SDL subsystems | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_QuitSubSystem(Uint32 flags); | ||||
|  | ||||
| /** | ||||
|  *  This function returns a mask of the specified subsystems which have | ||||
|  *  previously been initialized. | ||||
|  * | ||||
|  *  If \c flags is 0, it returns a mask of all initialized subsystems. | ||||
|  */ | ||||
| extern DECLSPEC Uint32 SDLCALL SDL_WasInit(Uint32 flags); | ||||
|  | ||||
| /** | ||||
|  *  This function cleans up all initialized subsystems. You should | ||||
|  *  call it upon all exit conditions. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_Quit(void); | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_H */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,289 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_assert_h | ||||
| #define _SDL_assert_h | ||||
|  | ||||
| #include "SDL_config.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| #ifndef SDL_ASSERT_LEVEL | ||||
| #ifdef SDL_DEFAULT_ASSERT_LEVEL | ||||
| #define SDL_ASSERT_LEVEL SDL_DEFAULT_ASSERT_LEVEL | ||||
| #elif defined(_DEBUG) || defined(DEBUG) || \ | ||||
|       (defined(__GNUC__) && !defined(__OPTIMIZE__)) | ||||
| #define SDL_ASSERT_LEVEL 2 | ||||
| #else | ||||
| #define SDL_ASSERT_LEVEL 1 | ||||
| #endif | ||||
| #endif /* SDL_ASSERT_LEVEL */ | ||||
|  | ||||
| /* | ||||
| These are macros and not first class functions so that the debugger breaks | ||||
| on the assertion line and not in some random guts of SDL, and so each | ||||
| assert can have unique static variables associated with it. | ||||
| */ | ||||
|  | ||||
| #if defined(_MSC_VER) | ||||
| /* Don't include intrin.h here because it contains C++ code */ | ||||
|     extern void __cdecl __debugbreak(void); | ||||
|     #define SDL_TriggerBreakpoint() __debugbreak() | ||||
| #elif (!defined(__NACL__) && defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))) | ||||
|     #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "int $3\n\t" ) | ||||
| #elif defined(HAVE_SIGNAL_H) | ||||
|     #include <signal.h> | ||||
|     #define SDL_TriggerBreakpoint() raise(SIGTRAP) | ||||
| #else | ||||
|     /* How do we trigger breakpoints on this platform? */ | ||||
|     #define SDL_TriggerBreakpoint() | ||||
| #endif | ||||
|  | ||||
| #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 supports __func__ as a standard. */ | ||||
| #   define SDL_FUNCTION __func__ | ||||
| #elif ((__GNUC__ >= 2) || defined(_MSC_VER)) | ||||
| #   define SDL_FUNCTION __FUNCTION__ | ||||
| #else | ||||
| #   define SDL_FUNCTION "???" | ||||
| #endif | ||||
| #define SDL_FILE    __FILE__ | ||||
| #define SDL_LINE    __LINE__ | ||||
|  | ||||
| /* | ||||
| sizeof (x) makes the compiler still parse the expression even without | ||||
| assertions enabled, so the code is always checked at compile time, but | ||||
| doesn't actually generate code for it, so there are no side effects or | ||||
| expensive checks at run time, just the constant size of what x WOULD be, | ||||
| which presumably gets optimized out as unused. | ||||
| This also solves the problem of... | ||||
|  | ||||
|     int somevalue = blah(); | ||||
|     SDL_assert(somevalue == 1); | ||||
|  | ||||
| ...which would cause compiles to complain that somevalue is unused if we | ||||
| disable assertions. | ||||
| */ | ||||
|  | ||||
| /* "while (0,0)" fools Microsoft's compiler's /W4 warning level into thinking | ||||
|     this condition isn't constant. And looks like an owl's face! */ | ||||
| #ifdef _MSC_VER  /* stupid /W4 warnings. */ | ||||
| #define SDL_NULL_WHILE_LOOP_CONDITION (0,0) | ||||
| #else | ||||
| #define SDL_NULL_WHILE_LOOP_CONDITION (0) | ||||
| #endif | ||||
|  | ||||
| #define SDL_disabled_assert(condition) \ | ||||
|     do { (void) sizeof ((condition)); } while (SDL_NULL_WHILE_LOOP_CONDITION) | ||||
|  | ||||
| typedef enum | ||||
| { | ||||
|     SDL_ASSERTION_RETRY,  /**< Retry the assert immediately. */ | ||||
|     SDL_ASSERTION_BREAK,  /**< Make the debugger trigger a breakpoint. */ | ||||
|     SDL_ASSERTION_ABORT,  /**< Terminate the program. */ | ||||
|     SDL_ASSERTION_IGNORE,  /**< Ignore the assert. */ | ||||
|     SDL_ASSERTION_ALWAYS_IGNORE  /**< Ignore the assert from now on. */ | ||||
| } SDL_AssertState; | ||||
|  | ||||
| typedef struct SDL_AssertData | ||||
| { | ||||
|     int always_ignore; | ||||
|     unsigned int trigger_count; | ||||
|     const char *condition; | ||||
|     const char *filename; | ||||
|     int linenum; | ||||
|     const char *function; | ||||
|     const struct SDL_AssertData *next; | ||||
| } SDL_AssertData; | ||||
|  | ||||
| #if (SDL_ASSERT_LEVEL > 0) | ||||
|  | ||||
| /* Never call this directly. Use the SDL_assert* macros. */ | ||||
| extern DECLSPEC SDL_AssertState SDLCALL SDL_ReportAssertion(SDL_AssertData *, | ||||
|                                                              const char *, | ||||
|                                                              const char *, int) | ||||
| #if defined(__clang__) | ||||
| #if __has_feature(attribute_analyzer_noreturn) | ||||
| /* this tells Clang's static analysis that we're a custom assert function, | ||||
|    and that the analyzer should assume the condition was always true past this | ||||
|    SDL_assert test. */ | ||||
|    __attribute__((analyzer_noreturn)) | ||||
| #endif | ||||
| #endif | ||||
| ; | ||||
|  | ||||
| /* the do {} while(0) avoids dangling else problems: | ||||
|     if (x) SDL_assert(y); else blah(); | ||||
|        ... without the do/while, the "else" could attach to this macro's "if". | ||||
|    We try to handle just the minimum we need here in a macro...the loop, | ||||
|    the static vars, and break points. The heavy lifting is handled in | ||||
|    SDL_ReportAssertion(), in SDL_assert.c. | ||||
| */ | ||||
| #define SDL_enabled_assert(condition) \ | ||||
|     do { \ | ||||
|         while ( !(condition) ) { \ | ||||
|             static struct SDL_AssertData sdl_assert_data = { \ | ||||
|                 0, 0, #condition, 0, 0, 0, 0 \ | ||||
|             }; \ | ||||
|             const SDL_AssertState sdl_assert_state = SDL_ReportAssertion(&sdl_assert_data, SDL_FUNCTION, SDL_FILE, SDL_LINE); \ | ||||
|             if (sdl_assert_state == SDL_ASSERTION_RETRY) { \ | ||||
|                 continue; /* go again. */ \ | ||||
|             } else if (sdl_assert_state == SDL_ASSERTION_BREAK) { \ | ||||
|                 SDL_TriggerBreakpoint(); \ | ||||
|             } \ | ||||
|             break; /* not retrying. */ \ | ||||
|         } \ | ||||
|     } while (SDL_NULL_WHILE_LOOP_CONDITION) | ||||
|  | ||||
| #endif  /* enabled assertions support code */ | ||||
|  | ||||
| /* Enable various levels of assertions. */ | ||||
| #if SDL_ASSERT_LEVEL == 0   /* assertions disabled */ | ||||
| #   define SDL_assert(condition) SDL_disabled_assert(condition) | ||||
| #   define SDL_assert_release(condition) SDL_disabled_assert(condition) | ||||
| #   define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) | ||||
| #elif SDL_ASSERT_LEVEL == 1  /* release settings. */ | ||||
| #   define SDL_assert(condition) SDL_disabled_assert(condition) | ||||
| #   define SDL_assert_release(condition) SDL_enabled_assert(condition) | ||||
| #   define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) | ||||
| #elif SDL_ASSERT_LEVEL == 2  /* normal settings. */ | ||||
| #   define SDL_assert(condition) SDL_enabled_assert(condition) | ||||
| #   define SDL_assert_release(condition) SDL_enabled_assert(condition) | ||||
| #   define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) | ||||
| #elif SDL_ASSERT_LEVEL == 3  /* paranoid settings. */ | ||||
| #   define SDL_assert(condition) SDL_enabled_assert(condition) | ||||
| #   define SDL_assert_release(condition) SDL_enabled_assert(condition) | ||||
| #   define SDL_assert_paranoid(condition) SDL_enabled_assert(condition) | ||||
| #else | ||||
| #   error Unknown assertion level. | ||||
| #endif | ||||
|  | ||||
| /* this assertion is never disabled at any level. */ | ||||
| #define SDL_assert_always(condition) SDL_enabled_assert(condition) | ||||
|  | ||||
|  | ||||
| typedef SDL_AssertState (SDLCALL *SDL_AssertionHandler)( | ||||
|                                  const SDL_AssertData* data, void* userdata); | ||||
|  | ||||
| /** | ||||
|  *  \brief Set an application-defined assertion handler. | ||||
|  * | ||||
|  *  This allows an app to show its own assertion UI and/or force the | ||||
|  *  response to an assertion failure. If the app doesn't provide this, SDL | ||||
|  *  will try to do the right thing, popping up a system-specific GUI dialog, | ||||
|  *  and probably minimizing any fullscreen windows. | ||||
|  * | ||||
|  *  This callback may fire from any thread, but it runs wrapped in a mutex, so | ||||
|  *  it will only fire from one thread at a time. | ||||
|  * | ||||
|  *  Setting the callback to NULL restores SDL's original internal handler. | ||||
|  * | ||||
|  *  This callback is NOT reset to SDL's internal handler upon SDL_Quit()! | ||||
|  * | ||||
|  *  \return SDL_AssertState value of how to handle the assertion failure. | ||||
|  * | ||||
|  *  \param handler Callback function, called when an assertion fails. | ||||
|  *  \param userdata A pointer passed to the callback as-is. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_SetAssertionHandler( | ||||
|                                             SDL_AssertionHandler handler, | ||||
|                                             void *userdata); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the default assertion handler. | ||||
|  * | ||||
|  *  This returns the function pointer that is called by default when an | ||||
|  *   assertion is triggered. This is an internal function provided by SDL, | ||||
|  *   that is used for assertions when SDL_SetAssertionHandler() hasn't been | ||||
|  *   used to provide a different function. | ||||
|  * | ||||
|  *  \return The default SDL_AssertionHandler that is called when an assert triggers. | ||||
|  */ | ||||
| extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetDefaultAssertionHandler(void); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the current assertion handler. | ||||
|  * | ||||
|  *  This returns the function pointer that is called when an assertion is | ||||
|  *   triggered. This is either the value last passed to | ||||
|  *   SDL_SetAssertionHandler(), or if no application-specified function is | ||||
|  *   set, is equivalent to calling SDL_GetDefaultAssertionHandler(). | ||||
|  * | ||||
|  *   \param puserdata Pointer to a void*, which will store the "userdata" | ||||
|  *                    pointer that was passed to SDL_SetAssertionHandler(). | ||||
|  *                    This value will always be NULL for the default handler. | ||||
|  *                    If you don't care about this data, it is safe to pass | ||||
|  *                    a NULL pointer to this function to ignore it. | ||||
|  *  \return The SDL_AssertionHandler that is called when an assert triggers. | ||||
|  */ | ||||
| extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetAssertionHandler(void **puserdata); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get a list of all assertion failures. | ||||
|  * | ||||
|  *  Get all assertions triggered since last call to SDL_ResetAssertionReport(), | ||||
|  *  or the start of the program. | ||||
|  * | ||||
|  *  The proper way to examine this data looks something like this: | ||||
|  * | ||||
|  *  <code> | ||||
|  *  const SDL_AssertData *item = SDL_GetAssertionReport(); | ||||
|  *  while (item) { | ||||
|  *      printf("'%s', %s (%s:%d), triggered %u times, always ignore: %s.\n", | ||||
|  *             item->condition, item->function, item->filename, | ||||
|  *             item->linenum, item->trigger_count, | ||||
|  *             item->always_ignore ? "yes" : "no"); | ||||
|  *      item = item->next; | ||||
|  *  } | ||||
|  *  </code> | ||||
|  * | ||||
|  *  \return List of all assertions. | ||||
|  *  \sa SDL_ResetAssertionReport | ||||
|  */ | ||||
| extern DECLSPEC const SDL_AssertData * SDLCALL SDL_GetAssertionReport(void); | ||||
|  | ||||
| /** | ||||
|  *  \brief Reset the list of all assertion failures. | ||||
|  * | ||||
|  *  Reset list of all assertions triggered. | ||||
|  * | ||||
|  *  \sa SDL_GetAssertionReport | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_ResetAssertionReport(void); | ||||
|  | ||||
|  | ||||
| /* these had wrong naming conventions until 2.0.4. Please update your app! */ | ||||
| #define SDL_assert_state SDL_AssertState | ||||
| #define SDL_assert_data SDL_AssertData | ||||
|  | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_assert_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,268 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  * \file SDL_atomic.h | ||||
|  * | ||||
|  * Atomic operations. | ||||
|  * | ||||
|  * IMPORTANT: | ||||
|  * If you are not an expert in concurrent lockless programming, you should | ||||
|  * only be using the atomic lock and reference counting functions in this | ||||
|  * file.  In all other cases you should be protecting your data structures | ||||
|  * with full mutexes. | ||||
|  * | ||||
|  * The list of "safe" functions to use are: | ||||
|  *  SDL_AtomicLock() | ||||
|  *  SDL_AtomicUnlock() | ||||
|  *  SDL_AtomicIncRef() | ||||
|  *  SDL_AtomicDecRef() | ||||
|  * | ||||
|  * Seriously, here be dragons! | ||||
|  * ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||||
|  * | ||||
|  * You can find out a little more about lockless programming and the | ||||
|  * subtle issues that can arise here: | ||||
|  * http://msdn.microsoft.com/en-us/library/ee418650%28v=vs.85%29.aspx | ||||
|  * | ||||
|  * There's also lots of good information here: | ||||
|  * http://www.1024cores.net/home/lock-free-algorithms | ||||
|  * http://preshing.com/ | ||||
|  * | ||||
|  * These operations may or may not actually be implemented using | ||||
|  * processor specific atomic operations. When possible they are | ||||
|  * implemented as true processor specific atomic operations. When that | ||||
|  * is not possible the are implemented using locks that *do* use the | ||||
|  * available atomic operations. | ||||
|  * | ||||
|  * All of the atomic operations that modify memory are full memory barriers. | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_atomic_h_ | ||||
| #define _SDL_atomic_h_ | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
| #include "SDL_platform.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
|  | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  * \name SDL AtomicLock | ||||
|  * | ||||
|  * The atomic locks are efficient spinlocks using CPU instructions, | ||||
|  * but are vulnerable to starvation and can spin forever if a thread | ||||
|  * holding a lock has been terminated.  For this reason you should | ||||
|  * minimize the code executed inside an atomic lock and never do | ||||
|  * expensive things like API or system calls while holding them. | ||||
|  * | ||||
|  * The atomic locks are not safe to lock recursively. | ||||
|  * | ||||
|  * Porting Note: | ||||
|  * The spin lock functions and type are required and can not be | ||||
|  * emulated because they are used in the atomic emulation code. | ||||
|  */ | ||||
| /* @{ */ | ||||
|  | ||||
| typedef int SDL_SpinLock; | ||||
|  | ||||
| /** | ||||
|  * \brief Try to lock a spin lock by setting it to a non-zero value. | ||||
|  * | ||||
|  * \param lock Points to the lock. | ||||
|  * | ||||
|  * \return SDL_TRUE if the lock succeeded, SDL_FALSE if the lock is already held. | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_AtomicTryLock(SDL_SpinLock *lock); | ||||
|  | ||||
| /** | ||||
|  * \brief Lock a spin lock by setting it to a non-zero value. | ||||
|  * | ||||
|  * \param lock Points to the lock. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_AtomicLock(SDL_SpinLock *lock); | ||||
|  | ||||
| /** | ||||
|  * \brief Unlock a spin lock by setting it to 0. Always returns immediately | ||||
|  * | ||||
|  * \param lock Points to the lock. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_AtomicUnlock(SDL_SpinLock *lock); | ||||
|  | ||||
| /* @} *//* SDL AtomicLock */ | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * The compiler barrier prevents the compiler from reordering | ||||
|  * reads and writes to globally visible variables across the call. | ||||
|  */ | ||||
| #if defined(_MSC_VER) && (_MSC_VER > 1200) | ||||
| void _ReadWriteBarrier(void); | ||||
| #pragma intrinsic(_ReadWriteBarrier) | ||||
| #define SDL_CompilerBarrier()   _ReadWriteBarrier() | ||||
| #elif (defined(__GNUC__) && !defined(__EMSCRIPTEN__)) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120)) | ||||
| /* This is correct for all CPUs when using GCC or Solaris Studio 12.1+. */ | ||||
| #define SDL_CompilerBarrier()   __asm__ __volatile__ ("" : : : "memory") | ||||
| #else | ||||
| #define SDL_CompilerBarrier()   \ | ||||
| { SDL_SpinLock _tmp = 0; SDL_AtomicLock(&_tmp); SDL_AtomicUnlock(&_tmp); } | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  * Memory barriers are designed to prevent reads and writes from being | ||||
|  * reordered by the compiler and being seen out of order on multi-core CPUs. | ||||
|  * | ||||
|  * A typical pattern would be for thread A to write some data and a flag, | ||||
|  * and for thread B to read the flag and get the data. In this case you | ||||
|  * would insert a release barrier between writing the data and the flag, | ||||
|  * guaranteeing that the data write completes no later than the flag is | ||||
|  * written, and you would insert an acquire barrier between reading the | ||||
|  * flag and reading the data, to ensure that all the reads associated | ||||
|  * with the flag have completed. | ||||
|  * | ||||
|  * In this pattern you should always see a release barrier paired with | ||||
|  * an acquire barrier and you should gate the data reads/writes with a | ||||
|  * single flag variable. | ||||
|  * | ||||
|  * For more information on these semantics, take a look at the blog post: | ||||
|  * http://preshing.com/20120913/acquire-and-release-semantics | ||||
|  */ | ||||
| #if defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) | ||||
| #define SDL_MemoryBarrierRelease()   __asm__ __volatile__ ("lwsync" : : : "memory") | ||||
| #define SDL_MemoryBarrierAcquire()   __asm__ __volatile__ ("lwsync" : : : "memory") | ||||
| #elif defined(__GNUC__) && defined(__arm__) | ||||
| #if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) | ||||
| #define SDL_MemoryBarrierRelease()   __asm__ __volatile__ ("dmb ish" : : : "memory") | ||||
| #define SDL_MemoryBarrierAcquire()   __asm__ __volatile__ ("dmb ish" : : : "memory") | ||||
| #elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) | ||||
| #ifdef __thumb__ | ||||
| /* The mcr instruction isn't available in thumb mode, use real functions */ | ||||
| extern DECLSPEC void SDLCALL SDL_MemoryBarrierRelease(); | ||||
| extern DECLSPEC void SDLCALL SDL_MemoryBarrierAcquire(); | ||||
| #else | ||||
| #define SDL_MemoryBarrierRelease()   __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory") | ||||
| #define SDL_MemoryBarrierAcquire()   __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory") | ||||
| #endif /* __thumb__ */ | ||||
| #else | ||||
| #define SDL_MemoryBarrierRelease()   __asm__ __volatile__ ("" : : : "memory") | ||||
| #define SDL_MemoryBarrierAcquire()   __asm__ __volatile__ ("" : : : "memory") | ||||
| #endif /* __GNUC__ && __arm__ */ | ||||
| #else | ||||
| #if (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120)) | ||||
| /* This is correct for all CPUs on Solaris when using Solaris Studio 12.1+. */ | ||||
| #include <mbarrier.h> | ||||
| #define SDL_MemoryBarrierRelease()  __machine_rel_barrier() | ||||
| #define SDL_MemoryBarrierAcquire()  __machine_acq_barrier() | ||||
| #else | ||||
| /* This is correct for the x86 and x64 CPUs, and we'll expand this over time. */ | ||||
| #define SDL_MemoryBarrierRelease()  SDL_CompilerBarrier() | ||||
| #define SDL_MemoryBarrierAcquire()  SDL_CompilerBarrier() | ||||
| #endif | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  * \brief A type representing an atomic integer value.  It is a struct | ||||
|  *        so people don't accidentally use numeric operations on it. | ||||
|  */ | ||||
| typedef struct { int value; } SDL_atomic_t; | ||||
|  | ||||
| /** | ||||
|  * \brief Set an atomic variable to a new value if it is currently an old value. | ||||
|  * | ||||
|  * \return SDL_TRUE if the atomic variable was set, SDL_FALSE otherwise. | ||||
|  * | ||||
|  * \note If you don't know what this function is for, you shouldn't use it! | ||||
| */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_AtomicCAS(SDL_atomic_t *a, int oldval, int newval); | ||||
|  | ||||
| /** | ||||
|  * \brief Set an atomic variable to a value. | ||||
|  * | ||||
|  * \return The previous value of the atomic variable. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_AtomicSet(SDL_atomic_t *a, int v); | ||||
|  | ||||
| /** | ||||
|  * \brief Get the value of an atomic variable | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_AtomicGet(SDL_atomic_t *a); | ||||
|  | ||||
| /** | ||||
|  * \brief Add to an atomic variable. | ||||
|  * | ||||
|  * \return The previous value of the atomic variable. | ||||
|  * | ||||
|  * \note This same style can be used for any number operation | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_AtomicAdd(SDL_atomic_t *a, int v); | ||||
|  | ||||
| /** | ||||
|  * \brief Increment an atomic variable used as a reference count. | ||||
|  */ | ||||
| #ifndef SDL_AtomicIncRef | ||||
| #define SDL_AtomicIncRef(a)    SDL_AtomicAdd(a, 1) | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  * \brief Decrement an atomic variable used as a reference count. | ||||
|  * | ||||
|  * \return SDL_TRUE if the variable reached zero after decrementing, | ||||
|  *         SDL_FALSE otherwise | ||||
|  */ | ||||
| #ifndef SDL_AtomicDecRef | ||||
| #define SDL_AtomicDecRef(a)    (SDL_AtomicAdd(a, -1) == 1) | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  * \brief Set a pointer to a new value if it is currently an old value. | ||||
|  * | ||||
|  * \return SDL_TRUE if the pointer was set, SDL_FALSE otherwise. | ||||
|  * | ||||
|  * \note If you don't know what this function is for, you shouldn't use it! | ||||
| */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_AtomicCASPtr(void **a, void *oldval, void *newval); | ||||
|  | ||||
| /** | ||||
|  * \brief Set a pointer to a value atomically. | ||||
|  * | ||||
|  * \return The previous value of the pointer. | ||||
|  */ | ||||
| extern DECLSPEC void* SDLCALL SDL_AtomicSetPtr(void **a, void* v); | ||||
|  | ||||
| /** | ||||
|  * \brief Get the value of a pointer atomically. | ||||
|  */ | ||||
| extern DECLSPEC void* SDLCALL SDL_AtomicGetPtr(void **a); | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_atomic_h_ */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,605 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_audio.h | ||||
|  * | ||||
|  *  Access to the raw audio mixing buffer for the SDL library. | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_audio_h | ||||
| #define _SDL_audio_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
| #include "SDL_error.h" | ||||
| #include "SDL_endian.h" | ||||
| #include "SDL_mutex.h" | ||||
| #include "SDL_thread.h" | ||||
| #include "SDL_rwops.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  *  \brief Audio format flags. | ||||
|  * | ||||
|  *  These are what the 16 bits in SDL_AudioFormat currently mean... | ||||
|  *  (Unspecified bits are always zero). | ||||
|  * | ||||
|  *  \verbatim | ||||
|     ++-----------------------sample is signed if set | ||||
|     || | ||||
|     ||       ++-----------sample is bigendian if set | ||||
|     ||       || | ||||
|     ||       ||          ++---sample is float if set | ||||
|     ||       ||          || | ||||
|     ||       ||          || +---sample bit size---+ | ||||
|     ||       ||          || |                     | | ||||
|     15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 | ||||
|     \endverbatim | ||||
|  * | ||||
|  *  There are macros in SDL 2.0 and later to query these bits. | ||||
|  */ | ||||
| typedef Uint16 SDL_AudioFormat; | ||||
|  | ||||
| /** | ||||
|  *  \name Audio flags | ||||
|  */ | ||||
| /* @{ */ | ||||
|  | ||||
| #define SDL_AUDIO_MASK_BITSIZE       (0xFF) | ||||
| #define SDL_AUDIO_MASK_DATATYPE      (1<<8) | ||||
| #define SDL_AUDIO_MASK_ENDIAN        (1<<12) | ||||
| #define SDL_AUDIO_MASK_SIGNED        (1<<15) | ||||
| #define SDL_AUDIO_BITSIZE(x)         (x & SDL_AUDIO_MASK_BITSIZE) | ||||
| #define SDL_AUDIO_ISFLOAT(x)         (x & SDL_AUDIO_MASK_DATATYPE) | ||||
| #define SDL_AUDIO_ISBIGENDIAN(x)     (x & SDL_AUDIO_MASK_ENDIAN) | ||||
| #define SDL_AUDIO_ISSIGNED(x)        (x & SDL_AUDIO_MASK_SIGNED) | ||||
| #define SDL_AUDIO_ISINT(x)           (!SDL_AUDIO_ISFLOAT(x)) | ||||
| #define SDL_AUDIO_ISLITTLEENDIAN(x)  (!SDL_AUDIO_ISBIGENDIAN(x)) | ||||
| #define SDL_AUDIO_ISUNSIGNED(x)      (!SDL_AUDIO_ISSIGNED(x)) | ||||
|  | ||||
| /** | ||||
|  *  \name Audio format flags | ||||
|  * | ||||
|  *  Defaults to LSB byte order. | ||||
|  */ | ||||
| /* @{ */ | ||||
| #define AUDIO_U8        0x0008  /**< Unsigned 8-bit samples */ | ||||
| #define AUDIO_S8        0x8008  /**< Signed 8-bit samples */ | ||||
| #define AUDIO_U16LSB    0x0010  /**< Unsigned 16-bit samples */ | ||||
| #define AUDIO_S16LSB    0x8010  /**< Signed 16-bit samples */ | ||||
| #define AUDIO_U16MSB    0x1010  /**< As above, but big-endian byte order */ | ||||
| #define AUDIO_S16MSB    0x9010  /**< As above, but big-endian byte order */ | ||||
| #define AUDIO_U16       AUDIO_U16LSB | ||||
| #define AUDIO_S16       AUDIO_S16LSB | ||||
| /* @} */ | ||||
|  | ||||
| /** | ||||
|  *  \name int32 support | ||||
|  */ | ||||
| /* @{ */ | ||||
| #define AUDIO_S32LSB    0x8020  /**< 32-bit integer samples */ | ||||
| #define AUDIO_S32MSB    0x9020  /**< As above, but big-endian byte order */ | ||||
| #define AUDIO_S32       AUDIO_S32LSB | ||||
| /* @} */ | ||||
|  | ||||
| /** | ||||
|  *  \name float32 support | ||||
|  */ | ||||
| /* @{ */ | ||||
| #define AUDIO_F32LSB    0x8120  /**< 32-bit floating point samples */ | ||||
| #define AUDIO_F32MSB    0x9120  /**< As above, but big-endian byte order */ | ||||
| #define AUDIO_F32       AUDIO_F32LSB | ||||
| /* @} */ | ||||
|  | ||||
| /** | ||||
|  *  \name Native audio byte ordering | ||||
|  */ | ||||
| /* @{ */ | ||||
| #if SDL_BYTEORDER == SDL_LIL_ENDIAN | ||||
| #define AUDIO_U16SYS    AUDIO_U16LSB | ||||
| #define AUDIO_S16SYS    AUDIO_S16LSB | ||||
| #define AUDIO_S32SYS    AUDIO_S32LSB | ||||
| #define AUDIO_F32SYS    AUDIO_F32LSB | ||||
| #else | ||||
| #define AUDIO_U16SYS    AUDIO_U16MSB | ||||
| #define AUDIO_S16SYS    AUDIO_S16MSB | ||||
| #define AUDIO_S32SYS    AUDIO_S32MSB | ||||
| #define AUDIO_F32SYS    AUDIO_F32MSB | ||||
| #endif | ||||
| /* @} */ | ||||
|  | ||||
| /** | ||||
|  *  \name Allow change flags | ||||
|  * | ||||
|  *  Which audio format changes are allowed when opening a device. | ||||
|  */ | ||||
| /* @{ */ | ||||
| #define SDL_AUDIO_ALLOW_FREQUENCY_CHANGE    0x00000001 | ||||
| #define SDL_AUDIO_ALLOW_FORMAT_CHANGE       0x00000002 | ||||
| #define SDL_AUDIO_ALLOW_CHANNELS_CHANGE     0x00000004 | ||||
| #define SDL_AUDIO_ALLOW_ANY_CHANGE          (SDL_AUDIO_ALLOW_FREQUENCY_CHANGE|SDL_AUDIO_ALLOW_FORMAT_CHANGE|SDL_AUDIO_ALLOW_CHANNELS_CHANGE) | ||||
| /* @} */ | ||||
|  | ||||
| /* @} *//* Audio flags */ | ||||
|  | ||||
| /** | ||||
|  *  This function is called when the audio device needs more data. | ||||
|  * | ||||
|  *  \param userdata An application-specific parameter saved in | ||||
|  *                  the SDL_AudioSpec structure | ||||
|  *  \param stream A pointer to the audio data buffer. | ||||
|  *  \param len    The length of that buffer in bytes. | ||||
|  * | ||||
|  *  Once the callback returns, the buffer will no longer be valid. | ||||
|  *  Stereo samples are stored in a LRLRLR ordering. | ||||
|  * | ||||
|  *  You can choose to avoid callbacks and use SDL_QueueAudio() instead, if | ||||
|  *  you like. Just open your audio device with a NULL callback. | ||||
|  */ | ||||
| typedef void (SDLCALL * SDL_AudioCallback) (void *userdata, Uint8 * stream, | ||||
|                                             int len); | ||||
|  | ||||
| /** | ||||
|  *  The calculated values in this structure are calculated by SDL_OpenAudio(). | ||||
|  */ | ||||
| typedef struct SDL_AudioSpec | ||||
| { | ||||
|     int freq;                   /**< DSP frequency -- samples per second */ | ||||
|     SDL_AudioFormat format;     /**< Audio data format */ | ||||
|     Uint8 channels;             /**< Number of channels: 1 mono, 2 stereo */ | ||||
|     Uint8 silence;              /**< Audio buffer silence value (calculated) */ | ||||
|     Uint16 samples;             /**< Audio buffer size in samples (power of 2) */ | ||||
|     Uint16 padding;             /**< Necessary for some compile environments */ | ||||
|     Uint32 size;                /**< Audio buffer size in bytes (calculated) */ | ||||
|     SDL_AudioCallback callback; /**< Callback that feeds the audio device (NULL to use SDL_QueueAudio()). */ | ||||
|     void *userdata;             /**< Userdata passed to callback (ignored for NULL callbacks). */ | ||||
| } SDL_AudioSpec; | ||||
|  | ||||
|  | ||||
| struct SDL_AudioCVT; | ||||
| typedef void (SDLCALL * SDL_AudioFilter) (struct SDL_AudioCVT * cvt, | ||||
|                                           SDL_AudioFormat format); | ||||
|  | ||||
| /** | ||||
|  *  A structure to hold a set of audio conversion filters and buffers. | ||||
|  */ | ||||
| #ifdef __GNUC__ | ||||
| /* This structure is 84 bytes on 32-bit architectures, make sure GCC doesn't | ||||
|    pad it out to 88 bytes to guarantee ABI compatibility between compilers. | ||||
|    vvv | ||||
|    The next time we rev the ABI, make sure to size the ints and add padding. | ||||
| */ | ||||
| #define SDL_AUDIOCVT_PACKED __attribute__((packed)) | ||||
| #else | ||||
| #define SDL_AUDIOCVT_PACKED | ||||
| #endif | ||||
| /* */ | ||||
| typedef struct SDL_AudioCVT | ||||
| { | ||||
|     int needed;                 /**< Set to 1 if conversion possible */ | ||||
|     SDL_AudioFormat src_format; /**< Source audio format */ | ||||
|     SDL_AudioFormat dst_format; /**< Target audio format */ | ||||
|     double rate_incr;           /**< Rate conversion increment */ | ||||
|     Uint8 *buf;                 /**< Buffer to hold entire audio data */ | ||||
|     int len;                    /**< Length of original audio buffer */ | ||||
|     int len_cvt;                /**< Length of converted audio buffer */ | ||||
|     int len_mult;               /**< buffer must be len*len_mult big */ | ||||
|     double len_ratio;           /**< Given len, final size is len*len_ratio */ | ||||
|     SDL_AudioFilter filters[10];        /**< Filter list */ | ||||
|     int filter_index;           /**< Current audio conversion function */ | ||||
| } SDL_AUDIOCVT_PACKED SDL_AudioCVT; | ||||
|  | ||||
|  | ||||
| /* Function prototypes */ | ||||
|  | ||||
| /** | ||||
|  *  \name Driver discovery functions | ||||
|  * | ||||
|  *  These functions return the list of built in audio drivers, in the | ||||
|  *  order that they are normally initialized by default. | ||||
|  */ | ||||
| /* @{ */ | ||||
| extern DECLSPEC int SDLCALL SDL_GetNumAudioDrivers(void); | ||||
| extern DECLSPEC const char *SDLCALL SDL_GetAudioDriver(int index); | ||||
| /* @} */ | ||||
|  | ||||
| /** | ||||
|  *  \name Initialization and cleanup | ||||
|  * | ||||
|  *  \internal These functions are used internally, and should not be used unless | ||||
|  *            you have a specific need to specify the audio driver you want to | ||||
|  *            use.  You should normally use SDL_Init() or SDL_InitSubSystem(). | ||||
|  */ | ||||
| /* @{ */ | ||||
| extern DECLSPEC int SDLCALL SDL_AudioInit(const char *driver_name); | ||||
| extern DECLSPEC void SDLCALL SDL_AudioQuit(void); | ||||
| /* @} */ | ||||
|  | ||||
| /** | ||||
|  *  This function returns the name of the current audio driver, or NULL | ||||
|  *  if no driver has been initialized. | ||||
|  */ | ||||
| extern DECLSPEC const char *SDLCALL SDL_GetCurrentAudioDriver(void); | ||||
|  | ||||
| /** | ||||
|  *  This function opens the audio device with the desired parameters, and | ||||
|  *  returns 0 if successful, placing the actual hardware parameters in the | ||||
|  *  structure pointed to by \c obtained.  If \c obtained is NULL, the audio | ||||
|  *  data passed to the callback function will be guaranteed to be in the | ||||
|  *  requested format, and will be automatically converted to the hardware | ||||
|  *  audio format if necessary.  This function returns -1 if it failed | ||||
|  *  to open the audio device, or couldn't set up the audio thread. | ||||
|  * | ||||
|  *  When filling in the desired audio spec structure, | ||||
|  *    - \c desired->freq should be the desired audio frequency in samples-per- | ||||
|  *      second. | ||||
|  *    - \c desired->format should be the desired audio format. | ||||
|  *    - \c desired->samples is the desired size of the audio buffer, in | ||||
|  *      samples.  This number should be a power of two, and may be adjusted by | ||||
|  *      the audio driver to a value more suitable for the hardware.  Good values | ||||
|  *      seem to range between 512 and 8096 inclusive, depending on the | ||||
|  *      application and CPU speed.  Smaller values yield faster response time, | ||||
|  *      but can lead to underflow if the application is doing heavy processing | ||||
|  *      and cannot fill the audio buffer in time.  A stereo sample consists of | ||||
|  *      both right and left channels in LR ordering. | ||||
|  *      Note that the number of samples is directly related to time by the | ||||
|  *      following formula:  \code ms = (samples*1000)/freq \endcode | ||||
|  *    - \c desired->size is the size in bytes of the audio buffer, and is | ||||
|  *      calculated by SDL_OpenAudio(). | ||||
|  *    - \c desired->silence is the value used to set the buffer to silence, | ||||
|  *      and is calculated by SDL_OpenAudio(). | ||||
|  *    - \c desired->callback should be set to a function that will be called | ||||
|  *      when the audio device is ready for more data.  It is passed a pointer | ||||
|  *      to the audio buffer, and the length in bytes of the audio buffer. | ||||
|  *      This function usually runs in a separate thread, and so you should | ||||
|  *      protect data structures that it accesses by calling SDL_LockAudio() | ||||
|  *      and SDL_UnlockAudio() in your code. Alternately, you may pass a NULL | ||||
|  *      pointer here, and call SDL_QueueAudio() with some frequency, to queue | ||||
|  *      more audio samples to be played. | ||||
|  *    - \c desired->userdata is passed as the first parameter to your callback | ||||
|  *      function. If you passed a NULL callback, this value is ignored. | ||||
|  * | ||||
|  *  The audio device starts out playing silence when it's opened, and should | ||||
|  *  be enabled for playing by calling \c SDL_PauseAudio(0) when you are ready | ||||
|  *  for your audio callback function to be called.  Since the audio driver | ||||
|  *  may modify the requested size of the audio buffer, you should allocate | ||||
|  *  any local mixing buffers after you open the audio device. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_OpenAudio(SDL_AudioSpec * desired, | ||||
|                                           SDL_AudioSpec * obtained); | ||||
|  | ||||
| /** | ||||
|  *  SDL Audio Device IDs. | ||||
|  * | ||||
|  *  A successful call to SDL_OpenAudio() is always device id 1, and legacy | ||||
|  *  SDL audio APIs assume you want this device ID. SDL_OpenAudioDevice() calls | ||||
|  *  always returns devices >= 2 on success. The legacy calls are good both | ||||
|  *  for backwards compatibility and when you don't care about multiple, | ||||
|  *  specific, or capture devices. | ||||
|  */ | ||||
| typedef Uint32 SDL_AudioDeviceID; | ||||
|  | ||||
| /** | ||||
|  *  Get the number of available devices exposed by the current driver. | ||||
|  *  Only valid after a successfully initializing the audio subsystem. | ||||
|  *  Returns -1 if an explicit list of devices can't be determined; this is | ||||
|  *  not an error. For example, if SDL is set up to talk to a remote audio | ||||
|  *  server, it can't list every one available on the Internet, but it will | ||||
|  *  still allow a specific host to be specified to SDL_OpenAudioDevice(). | ||||
|  * | ||||
|  *  In many common cases, when this function returns a value <= 0, it can still | ||||
|  *  successfully open the default device (NULL for first argument of | ||||
|  *  SDL_OpenAudioDevice()). | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_GetNumAudioDevices(int iscapture); | ||||
|  | ||||
| /** | ||||
|  *  Get the human-readable name of a specific audio device. | ||||
|  *  Must be a value between 0 and (number of audio devices-1). | ||||
|  *  Only valid after a successfully initializing the audio subsystem. | ||||
|  *  The values returned by this function reflect the latest call to | ||||
|  *  SDL_GetNumAudioDevices(); recall that function to redetect available | ||||
|  *  hardware. | ||||
|  * | ||||
|  *  The string returned by this function is UTF-8 encoded, read-only, and | ||||
|  *  managed internally. You are not to free it. If you need to keep the | ||||
|  *  string for any length of time, you should make your own copy of it, as it | ||||
|  *  will be invalid next time any of several other SDL functions is called. | ||||
|  */ | ||||
| extern DECLSPEC const char *SDLCALL SDL_GetAudioDeviceName(int index, | ||||
|                                                            int iscapture); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  Open a specific audio device. Passing in a device name of NULL requests | ||||
|  *  the most reasonable default (and is equivalent to calling SDL_OpenAudio()). | ||||
|  * | ||||
|  *  The device name is a UTF-8 string reported by SDL_GetAudioDeviceName(), but | ||||
|  *  some drivers allow arbitrary and driver-specific strings, such as a | ||||
|  *  hostname/IP address for a remote audio server, or a filename in the | ||||
|  *  diskaudio driver. | ||||
|  * | ||||
|  *  \return 0 on error, a valid device ID that is >= 2 on success. | ||||
|  * | ||||
|  *  SDL_OpenAudio(), unlike this function, always acts on device ID 1. | ||||
|  */ | ||||
| extern DECLSPEC SDL_AudioDeviceID SDLCALL SDL_OpenAudioDevice(const char | ||||
|                                                               *device, | ||||
|                                                               int iscapture, | ||||
|                                                               const | ||||
|                                                               SDL_AudioSpec * | ||||
|                                                               desired, | ||||
|                                                               SDL_AudioSpec * | ||||
|                                                               obtained, | ||||
|                                                               int | ||||
|                                                               allowed_changes); | ||||
|  | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \name Audio state | ||||
|  * | ||||
|  *  Get the current audio state. | ||||
|  */ | ||||
| /* @{ */ | ||||
| typedef enum | ||||
| { | ||||
|     SDL_AUDIO_STOPPED = 0, | ||||
|     SDL_AUDIO_PLAYING, | ||||
|     SDL_AUDIO_PAUSED | ||||
| } SDL_AudioStatus; | ||||
| extern DECLSPEC SDL_AudioStatus SDLCALL SDL_GetAudioStatus(void); | ||||
|  | ||||
| extern DECLSPEC SDL_AudioStatus SDLCALL | ||||
| SDL_GetAudioDeviceStatus(SDL_AudioDeviceID dev); | ||||
| /* @} *//* Audio State */ | ||||
|  | ||||
| /** | ||||
|  *  \name Pause audio functions | ||||
|  * | ||||
|  *  These functions pause and unpause the audio callback processing. | ||||
|  *  They should be called with a parameter of 0 after opening the audio | ||||
|  *  device to start playing sound.  This is so you can safely initialize | ||||
|  *  data for your callback function after opening the audio device. | ||||
|  *  Silence will be written to the audio device during the pause. | ||||
|  */ | ||||
| /* @{ */ | ||||
| extern DECLSPEC void SDLCALL SDL_PauseAudio(int pause_on); | ||||
| extern DECLSPEC void SDLCALL SDL_PauseAudioDevice(SDL_AudioDeviceID dev, | ||||
|                                                   int pause_on); | ||||
| /* @} *//* Pause audio functions */ | ||||
|  | ||||
| /** | ||||
|  *  This function loads a WAVE from the data source, automatically freeing | ||||
|  *  that source if \c freesrc is non-zero.  For example, to load a WAVE file, | ||||
|  *  you could do: | ||||
|  *  \code | ||||
|  *      SDL_LoadWAV_RW(SDL_RWFromFile("sample.wav", "rb"), 1, ...); | ||||
|  *  \endcode | ||||
|  * | ||||
|  *  If this function succeeds, it returns the given SDL_AudioSpec, | ||||
|  *  filled with the audio data format of the wave data, and sets | ||||
|  *  \c *audio_buf to a malloc()'d buffer containing the audio data, | ||||
|  *  and sets \c *audio_len to the length of that audio buffer, in bytes. | ||||
|  *  You need to free the audio buffer with SDL_FreeWAV() when you are | ||||
|  *  done with it. | ||||
|  * | ||||
|  *  This function returns NULL and sets the SDL error message if the | ||||
|  *  wave file cannot be opened, uses an unknown data format, or is | ||||
|  *  corrupt.  Currently raw and MS-ADPCM WAVE files are supported. | ||||
|  */ | ||||
| extern DECLSPEC SDL_AudioSpec *SDLCALL SDL_LoadWAV_RW(SDL_RWops * src, | ||||
|                                                       int freesrc, | ||||
|                                                       SDL_AudioSpec * spec, | ||||
|                                                       Uint8 ** audio_buf, | ||||
|                                                       Uint32 * audio_len); | ||||
|  | ||||
| /** | ||||
|  *  Loads a WAV from a file. | ||||
|  *  Compatibility convenience function. | ||||
|  */ | ||||
| #define SDL_LoadWAV(file, spec, audio_buf, audio_len) \ | ||||
|     SDL_LoadWAV_RW(SDL_RWFromFile(file, "rb"),1, spec,audio_buf,audio_len) | ||||
|  | ||||
| /** | ||||
|  *  This function frees data previously allocated with SDL_LoadWAV_RW() | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_FreeWAV(Uint8 * audio_buf); | ||||
|  | ||||
| /** | ||||
|  *  This function takes a source format and rate and a destination format | ||||
|  *  and rate, and initializes the \c cvt structure with information needed | ||||
|  *  by SDL_ConvertAudio() to convert a buffer of audio data from one format | ||||
|  *  to the other. | ||||
|  * | ||||
|  *  \return -1 if the format conversion is not supported, 0 if there's | ||||
|  *  no conversion needed, or 1 if the audio filter is set up. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT * cvt, | ||||
|                                               SDL_AudioFormat src_format, | ||||
|                                               Uint8 src_channels, | ||||
|                                               int src_rate, | ||||
|                                               SDL_AudioFormat dst_format, | ||||
|                                               Uint8 dst_channels, | ||||
|                                               int dst_rate); | ||||
|  | ||||
| /** | ||||
|  *  Once you have initialized the \c cvt structure using SDL_BuildAudioCVT(), | ||||
|  *  created an audio buffer \c cvt->buf, and filled it with \c cvt->len bytes of | ||||
|  *  audio data in the source format, this function will convert it in-place | ||||
|  *  to the desired format. | ||||
|  * | ||||
|  *  The data conversion may expand the size of the audio data, so the buffer | ||||
|  *  \c cvt->buf should be allocated after the \c cvt structure is initialized by | ||||
|  *  SDL_BuildAudioCVT(), and should be \c cvt->len*cvt->len_mult bytes long. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_ConvertAudio(SDL_AudioCVT * cvt); | ||||
|  | ||||
| #define SDL_MIX_MAXVOLUME 128 | ||||
| /** | ||||
|  *  This takes two audio buffers of the playing audio format and mixes | ||||
|  *  them, performing addition, volume adjustment, and overflow clipping. | ||||
|  *  The volume ranges from 0 - 128, and should be set to ::SDL_MIX_MAXVOLUME | ||||
|  *  for full audio volume.  Note this does not change hardware volume. | ||||
|  *  This is provided for convenience -- you can mix your own audio data. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_MixAudio(Uint8 * dst, const Uint8 * src, | ||||
|                                           Uint32 len, int volume); | ||||
|  | ||||
| /** | ||||
|  *  This works like SDL_MixAudio(), but you specify the audio format instead of | ||||
|  *  using the format of audio device 1. Thus it can be used when no audio | ||||
|  *  device is open at all. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_MixAudioFormat(Uint8 * dst, | ||||
|                                                 const Uint8 * src, | ||||
|                                                 SDL_AudioFormat format, | ||||
|                                                 Uint32 len, int volume); | ||||
|  | ||||
| /** | ||||
|  *  Queue more audio on non-callback devices. | ||||
|  * | ||||
|  *  SDL offers two ways to feed audio to the device: you can either supply a | ||||
|  *  callback that SDL triggers with some frequency to obtain more audio | ||||
|  *  (pull method), or you can supply no callback, and then SDL will expect | ||||
|  *  you to supply data at regular intervals (push method) with this function. | ||||
|  * | ||||
|  *  There are no limits on the amount of data you can queue, short of | ||||
|  *  exhaustion of address space. Queued data will drain to the device as | ||||
|  *  necessary without further intervention from you. If the device needs | ||||
|  *  audio but there is not enough queued, it will play silence to make up | ||||
|  *  the difference. This means you will have skips in your audio playback | ||||
|  *  if you aren't routinely queueing sufficient data. | ||||
|  * | ||||
|  *  This function copies the supplied data, so you are safe to free it when | ||||
|  *  the function returns. This function is thread-safe, but queueing to the | ||||
|  *  same device from two threads at once does not promise which buffer will | ||||
|  *  be queued first. | ||||
|  * | ||||
|  *  You may not queue audio on a device that is using an application-supplied | ||||
|  *  callback; doing so returns an error. You have to use the audio callback | ||||
|  *  or queue audio with this function, but not both. | ||||
|  * | ||||
|  *  You should not call SDL_LockAudio() on the device before queueing; SDL | ||||
|  *  handles locking internally for this function. | ||||
|  * | ||||
|  *  \param dev The device ID to which we will queue audio. | ||||
|  *  \param data The data to queue to the device for later playback. | ||||
|  *  \param len The number of bytes (not samples!) to which (data) points. | ||||
|  *  \return zero on success, -1 on error. | ||||
|  * | ||||
|  *  \sa SDL_GetQueuedAudioSize | ||||
|  *  \sa SDL_ClearQueuedAudio | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_QueueAudio(SDL_AudioDeviceID dev, const void *data, Uint32 len); | ||||
|  | ||||
| /** | ||||
|  *  Get the number of bytes of still-queued audio. | ||||
|  * | ||||
|  *  This is the number of bytes that have been queued for playback with | ||||
|  *  SDL_QueueAudio(), but have not yet been sent to the hardware. | ||||
|  * | ||||
|  *  Once we've sent it to the hardware, this function can not decide the exact | ||||
|  *  byte boundary of what has been played. It's possible that we just gave the | ||||
|  *  hardware several kilobytes right before you called this function, but it | ||||
|  *  hasn't played any of it yet, or maybe half of it, etc. | ||||
|  * | ||||
|  *  You may not queue audio on a device that is using an application-supplied | ||||
|  *  callback; calling this function on such a device always returns 0. | ||||
|  *  You have to use the audio callback or queue audio with SDL_QueueAudio(), | ||||
|  *  but not both. | ||||
|  * | ||||
|  *  You should not call SDL_LockAudio() on the device before querying; SDL | ||||
|  *  handles locking internally for this function. | ||||
|  * | ||||
|  *  \param dev The device ID of which we will query queued audio size. | ||||
|  *  \return Number of bytes (not samples!) of queued audio. | ||||
|  * | ||||
|  *  \sa SDL_QueueAudio | ||||
|  *  \sa SDL_ClearQueuedAudio | ||||
|  */ | ||||
| extern DECLSPEC Uint32 SDLCALL SDL_GetQueuedAudioSize(SDL_AudioDeviceID dev); | ||||
|  | ||||
| /** | ||||
|  *  Drop any queued audio data waiting to be sent to the hardware. | ||||
|  * | ||||
|  *  Immediately after this call, SDL_GetQueuedAudioSize() will return 0 and | ||||
|  *  the hardware will start playing silence if more audio isn't queued. | ||||
|  * | ||||
|  *  This will not prevent playback of queued audio that's already been sent | ||||
|  *  to the hardware, as we can not undo that, so expect there to be some | ||||
|  *  fraction of a second of audio that might still be heard. This can be | ||||
|  *  useful if you want to, say, drop any pending music during a level change | ||||
|  *  in your game. | ||||
|  * | ||||
|  *  You may not queue audio on a device that is using an application-supplied | ||||
|  *  callback; calling this function on such a device is always a no-op. | ||||
|  *  You have to use the audio callback or queue audio with SDL_QueueAudio(), | ||||
|  *  but not both. | ||||
|  * | ||||
|  *  You should not call SDL_LockAudio() on the device before clearing the | ||||
|  *  queue; SDL handles locking internally for this function. | ||||
|  * | ||||
|  *  This function always succeeds and thus returns void. | ||||
|  * | ||||
|  *  \param dev The device ID of which to clear the audio queue. | ||||
|  * | ||||
|  *  \sa SDL_QueueAudio | ||||
|  *  \sa SDL_GetQueuedAudioSize | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_ClearQueuedAudio(SDL_AudioDeviceID dev); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \name Audio lock functions | ||||
|  * | ||||
|  *  The lock manipulated by these functions protects the callback function. | ||||
|  *  During a SDL_LockAudio()/SDL_UnlockAudio() pair, you can be guaranteed that | ||||
|  *  the callback function is not running.  Do not call these from the callback | ||||
|  *  function or you will cause deadlock. | ||||
|  */ | ||||
| /* @{ */ | ||||
| extern DECLSPEC void SDLCALL SDL_LockAudio(void); | ||||
| extern DECLSPEC void SDLCALL SDL_LockAudioDevice(SDL_AudioDeviceID dev); | ||||
| extern DECLSPEC void SDLCALL SDL_UnlockAudio(void); | ||||
| extern DECLSPEC void SDLCALL SDL_UnlockAudioDevice(SDL_AudioDeviceID dev); | ||||
| /* @} *//* Audio lock functions */ | ||||
|  | ||||
| /** | ||||
|  *  This function shuts down audio processing and closes the audio device. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_CloseAudio(void); | ||||
| extern DECLSPEC void SDLCALL SDL_CloseAudioDevice(SDL_AudioDeviceID dev); | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_audio_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,97 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_bits.h | ||||
|  * | ||||
|  *  Functions for fiddling with bits and bitmasks. | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_bits_h | ||||
| #define _SDL_bits_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_bits.h | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  *  Get the index of the most significant bit. Result is undefined when called | ||||
|  *  with 0. This operation can also be stated as "count leading zeroes" and | ||||
|  *  "log base 2". | ||||
|  * | ||||
|  *  \return Index of the most significant bit, or -1 if the value is 0. | ||||
|  */ | ||||
| SDL_FORCE_INLINE int | ||||
| SDL_MostSignificantBitIndex32(Uint32 x) | ||||
| { | ||||
| #if defined(__GNUC__) && __GNUC__ >= 4 | ||||
|     /* Count Leading Zeroes builtin in GCC. | ||||
|      * http://gcc.gnu.org/onlinedocs/gcc-4.3.4/gcc/Other-Builtins.html | ||||
|      */ | ||||
|     if (x == 0) { | ||||
|         return -1; | ||||
|     } | ||||
|     return 31 - __builtin_clz(x); | ||||
| #else | ||||
|     /* Based off of Bit Twiddling Hacks by Sean Eron Anderson | ||||
|      * <seander@cs.stanford.edu>, released in the public domain. | ||||
|      * http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog | ||||
|      */ | ||||
|     const Uint32 b[] = {0x2, 0xC, 0xF0, 0xFF00, 0xFFFF0000}; | ||||
|     const int    S[] = {1, 2, 4, 8, 16}; | ||||
|  | ||||
|     int msbIndex = 0; | ||||
|     int i; | ||||
|  | ||||
|     if (x == 0) { | ||||
|         return -1; | ||||
|     } | ||||
|  | ||||
|     for (i = 4; i >= 0; i--) | ||||
|     { | ||||
|         if (x & b[i]) | ||||
|         { | ||||
|             x >>= S[i]; | ||||
|             msbIndex |= S[i]; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     return msbIndex; | ||||
| #endif | ||||
| } | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_bits_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,63 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_blendmode.h | ||||
|  * | ||||
|  *  Header file declaring the SDL_BlendMode enumeration | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_blendmode_h | ||||
| #define _SDL_blendmode_h | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  *  \brief The blend mode used in SDL_RenderCopy() and drawing operations. | ||||
|  */ | ||||
| typedef enum | ||||
| { | ||||
|     SDL_BLENDMODE_NONE = 0x00000000,     /**< no blending | ||||
|                                               dstRGBA = srcRGBA */ | ||||
|     SDL_BLENDMODE_BLEND = 0x00000001,    /**< alpha blending | ||||
|                                               dstRGB = (srcRGB * srcA) + (dstRGB * (1-srcA)) | ||||
|                                               dstA = srcA + (dstA * (1-srcA)) */ | ||||
|     SDL_BLENDMODE_ADD = 0x00000002,      /**< additive blending | ||||
|                                               dstRGB = (srcRGB * srcA) + dstRGB | ||||
|                                               dstA = dstA */ | ||||
|     SDL_BLENDMODE_MOD = 0x00000004       /**< color modulate | ||||
|                                               dstRGB = srcRGB * dstRGB | ||||
|                                               dstA = dstA */ | ||||
| } SDL_BlendMode; | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_blendmode_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,71 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  * \file SDL_clipboard.h | ||||
|  * | ||||
|  * Include file for SDL clipboard handling | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_clipboard_h | ||||
| #define _SDL_clipboard_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /* Function prototypes */ | ||||
|  | ||||
| /** | ||||
|  * \brief Put UTF-8 text into the clipboard | ||||
|  * | ||||
|  * \sa SDL_GetClipboardText() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_SetClipboardText(const char *text); | ||||
|  | ||||
| /** | ||||
|  * \brief Get UTF-8 text from the clipboard, which must be freed with SDL_free() | ||||
|  * | ||||
|  * \sa SDL_SetClipboardText() | ||||
|  */ | ||||
| extern DECLSPEC char * SDLCALL SDL_GetClipboardText(void); | ||||
|  | ||||
| /** | ||||
|  * \brief Returns a flag indicating whether the clipboard exists and contains a text string that is non-empty | ||||
|  * | ||||
|  * \sa SDL_GetClipboardText() | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_HasClipboardText(void); | ||||
|  | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_clipboard_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,55 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_config_h | ||||
| #define _SDL_config_h | ||||
|  | ||||
| #include "SDL_platform.h" | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_config.h | ||||
|  */ | ||||
|  | ||||
| /* Add any platform that doesn't build using the configure system. */ | ||||
| #ifdef USING_PREMAKE_CONFIG_H | ||||
| #include "SDL_config_premake.h" | ||||
| #elif defined(__WIN32__) | ||||
| #include "SDL_config_windows.h" | ||||
| #elif defined(__WINRT__) | ||||
| #include "SDL_config_winrt.h" | ||||
| #elif defined(__MACOSX__) | ||||
| #include "SDL_config_macosx.h" | ||||
| #elif defined(__IPHONEOS__) | ||||
| #include "SDL_config_iphoneos.h" | ||||
| #elif defined(__ANDROID__) | ||||
| #include "SDL_config_android.h" | ||||
| #elif defined(__PSP__) | ||||
| #include "SDL_config_psp.h" | ||||
| #else | ||||
| /* This is a minimal configuration just to get SDL running on new platforms */ | ||||
| #include "SDL_config_minimal.h" | ||||
| #endif /* platform config */ | ||||
|  | ||||
| #ifdef USING_GENERATED_CONFIG_H | ||||
| #error Wrong SDL_config.h, check your include path? | ||||
| #endif | ||||
|  | ||||
| #endif /* _SDL_config_h */ | ||||
| @@ -0,0 +1,419 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_config_h | ||||
| #define _SDL_config_h | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_config.h.in | ||||
|  * | ||||
|  *  This is a set of defines to configure the SDL features | ||||
|  */ | ||||
|  | ||||
| /* General platform specific identifiers */ | ||||
| #include "SDL_platform.h" | ||||
|  | ||||
| /* C language features */ | ||||
| #cmakedefine const @HAVE_CONST@ | ||||
| #cmakedefine inline @HAVE_INLINE@ | ||||
| #cmakedefine volatile @HAVE_VOLATILE@ | ||||
|  | ||||
| /* C datatypes */ | ||||
| /* Define SIZEOF_VOIDP for 64/32 architectures */ | ||||
| #ifdef __LP64__ | ||||
| #define SIZEOF_VOIDP 8 | ||||
| #else | ||||
| #define SIZEOF_VOIDP 4 | ||||
| #endif | ||||
|  | ||||
| #cmakedefine HAVE_GCC_ATOMICS @HAVE_GCC_ATOMICS@ | ||||
| #cmakedefine HAVE_GCC_SYNC_LOCK_TEST_AND_SET @HAVE_GCC_SYNC_LOCK_TEST_AND_SET@ | ||||
|  | ||||
| #cmakedefine HAVE_D3D_H @HAVE_D3D_H@ | ||||
| #cmakedefine HAVE_D3D11_H @HAVE_D3D11_H@ | ||||
| #cmakedefine HAVE_DDRAW_H @HAVE_DDRAW_H@ | ||||
| #cmakedefine HAVE_DSOUND_H @HAVE_DSOUND_H@ | ||||
| #cmakedefine HAVE_DINPUT_H @HAVE_DINPUT_H@ | ||||
| #cmakedefine HAVE_XAUDIO2_H @HAVE_XAUDIO2_H@ | ||||
| #cmakedefine HAVE_XINPUT_H @HAVE_XINPUT_H@ | ||||
| #cmakedefine HAVE_DXGI_H @HAVE_DXGI_H@ | ||||
|  | ||||
| /* Comment this if you want to build without any C library requirements */ | ||||
| #cmakedefine HAVE_LIBC 1 | ||||
| #if HAVE_LIBC | ||||
|  | ||||
| /* Useful headers */ | ||||
| #cmakedefine HAVE_ALLOCA_H 1 | ||||
| #cmakedefine HAVE_SYS_TYPES_H 1 | ||||
| #cmakedefine HAVE_STDIO_H 1 | ||||
| #cmakedefine STDC_HEADERS 1 | ||||
| #cmakedefine HAVE_STDLIB_H 1 | ||||
| #cmakedefine HAVE_STDARG_H 1 | ||||
| #cmakedefine HAVE_MALLOC_H 1 | ||||
| #cmakedefine HAVE_MEMORY_H 1 | ||||
| #cmakedefine HAVE_STRING_H 1 | ||||
| #cmakedefine HAVE_STRINGS_H 1 | ||||
| #cmakedefine HAVE_INTTYPES_H 1 | ||||
| #cmakedefine HAVE_STDINT_H 1 | ||||
| #cmakedefine HAVE_CTYPE_H 1 | ||||
| #cmakedefine HAVE_MATH_H 1 | ||||
| #cmakedefine HAVE_ICONV_H 1 | ||||
| #cmakedefine HAVE_SIGNAL_H 1 | ||||
| #cmakedefine HAVE_ALTIVEC_H 1 | ||||
| #cmakedefine HAVE_PTHREAD_NP_H 1 | ||||
| #cmakedefine HAVE_LIBUDEV_H 1 | ||||
| #cmakedefine HAVE_DBUS_DBUS_H 1 | ||||
|  | ||||
| /* C library functions */ | ||||
| #cmakedefine HAVE_MALLOC 1 | ||||
| #cmakedefine HAVE_CALLOC 1 | ||||
| #cmakedefine HAVE_REALLOC 1 | ||||
| #cmakedefine HAVE_FREE 1 | ||||
| #cmakedefine HAVE_ALLOCA 1 | ||||
| #ifndef __WIN32__ /* Don't use C runtime versions of these on Windows */ | ||||
| #cmakedefine HAVE_GETENV 1 | ||||
| #cmakedefine HAVE_SETENV 1 | ||||
| #cmakedefine HAVE_PUTENV 1 | ||||
| #cmakedefine HAVE_UNSETENV 1 | ||||
| #endif | ||||
| #cmakedefine HAVE_QSORT 1 | ||||
| #cmakedefine HAVE_ABS 1 | ||||
| #cmakedefine HAVE_BCOPY 1 | ||||
| #cmakedefine HAVE_MEMSET 1 | ||||
| #cmakedefine HAVE_MEMCPY 1 | ||||
| #cmakedefine HAVE_MEMMOVE 1 | ||||
| #cmakedefine HAVE_MEMCMP 1 | ||||
| #cmakedefine HAVE_STRLEN 1 | ||||
| #cmakedefine HAVE_STRLCPY 1 | ||||
| #cmakedefine HAVE_STRLCAT 1 | ||||
| #cmakedefine HAVE_STRDUP 1 | ||||
| #cmakedefine HAVE__STRREV 1 | ||||
| #cmakedefine HAVE__STRUPR 1 | ||||
| #cmakedefine HAVE__STRLWR 1 | ||||
| #cmakedefine HAVE_INDEX 1 | ||||
| #cmakedefine HAVE_RINDEX 1 | ||||
| #cmakedefine HAVE_STRCHR 1 | ||||
| #cmakedefine HAVE_STRRCHR 1 | ||||
| #cmakedefine HAVE_STRSTR 1 | ||||
| #cmakedefine HAVE_ITOA 1 | ||||
| #cmakedefine HAVE__LTOA 1 | ||||
| #cmakedefine HAVE__UITOA 1 | ||||
| #cmakedefine HAVE__ULTOA 1 | ||||
| #cmakedefine HAVE_STRTOL 1 | ||||
| #cmakedefine HAVE_STRTOUL 1 | ||||
| #cmakedefine HAVE__I64TOA 1 | ||||
| #cmakedefine HAVE__UI64TOA 1 | ||||
| #cmakedefine HAVE_STRTOLL 1 | ||||
| #cmakedefine HAVE_STRTOULL 1 | ||||
| #cmakedefine HAVE_STRTOD 1 | ||||
| #cmakedefine HAVE_ATOI 1 | ||||
| #cmakedefine HAVE_ATOF 1 | ||||
| #cmakedefine HAVE_STRCMP 1 | ||||
| #cmakedefine HAVE_STRNCMP 1 | ||||
| #cmakedefine HAVE__STRICMP 1 | ||||
| #cmakedefine HAVE_STRCASECMP 1 | ||||
| #cmakedefine HAVE__STRNICMP 1 | ||||
| #cmakedefine HAVE_STRNCASECMP 1 | ||||
| #cmakedefine HAVE_VSSCANF 1 | ||||
| #cmakedefine HAVE_VSNPRINTF 1 | ||||
| #cmakedefine HAVE_M_PI 1 | ||||
| #cmakedefine HAVE_ATAN 1 | ||||
| #cmakedefine HAVE_ATAN2 1 | ||||
| #cmakedefine HAVE_ACOS 1 | ||||
| #cmakedefine HAVE_ASIN 1 | ||||
| #cmakedefine HAVE_CEIL 1 | ||||
| #cmakedefine HAVE_COPYSIGN 1 | ||||
| #cmakedefine HAVE_COS 1 | ||||
| #cmakedefine HAVE_COSF 1 | ||||
| #cmakedefine HAVE_FABS 1 | ||||
| #cmakedefine HAVE_FLOOR 1 | ||||
| #cmakedefine HAVE_LOG 1 | ||||
| #cmakedefine HAVE_POW 1 | ||||
| #cmakedefine HAVE_SCALBN 1 | ||||
| #cmakedefine HAVE_SIN 1 | ||||
| #cmakedefine HAVE_SINF 1 | ||||
| #cmakedefine HAVE_SQRT 1 | ||||
| #cmakedefine HAVE_SQRTF 1 | ||||
| #cmakedefine HAVE_TAN 1 | ||||
| #cmakedefine HAVE_TANF 1 | ||||
| #cmakedefine HAVE_FSEEKO 1 | ||||
| #cmakedefine HAVE_FSEEKO64 1 | ||||
| #cmakedefine HAVE_SIGACTION 1 | ||||
| #cmakedefine HAVE_SA_SIGACTION 1 | ||||
| #cmakedefine HAVE_SETJMP 1 | ||||
| #cmakedefine HAVE_NANOSLEEP 1 | ||||
| #cmakedefine HAVE_SYSCONF 1 | ||||
| #cmakedefine HAVE_SYSCTLBYNAME 1 | ||||
| #cmakedefine HAVE_CLOCK_GETTIME 1 | ||||
| #cmakedefine HAVE_GETPAGESIZE 1 | ||||
| #cmakedefine HAVE_MPROTECT 1 | ||||
| #cmakedefine HAVE_ICONV 1 | ||||
| #cmakedefine HAVE_PTHREAD_SETNAME_NP 1 | ||||
| #cmakedefine HAVE_PTHREAD_SET_NAME_NP 1 | ||||
| #cmakedefine HAVE_SEM_TIMEDWAIT 1 | ||||
| #elif __WIN32__ | ||||
| #cmakedefine HAVE_STDARG_H 1 | ||||
| #cmakedefine HAVE_STDDEF_H 1 | ||||
| #else | ||||
| /* We may need some replacement for stdarg.h here */ | ||||
| #include <stdarg.h> | ||||
| #endif /* HAVE_LIBC */ | ||||
|  | ||||
| /* SDL internal assertion support */ | ||||
| #cmakedefine SDL_DEFAULT_ASSERT_LEVEL @SDL_DEFAULT_ASSERT_LEVEL@ | ||||
|  | ||||
| /* Allow disabling of core subsystems */ | ||||
| #cmakedefine SDL_ATOMIC_DISABLED @SDL_ATOMIC_DISABLED@ | ||||
| #cmakedefine SDL_AUDIO_DISABLED @SDL_AUDIO_DISABLED@ | ||||
| #cmakedefine SDL_CPUINFO_DISABLED @SDL_CPUINFO_DISABLED@ | ||||
| #cmakedefine SDL_EVENTS_DISABLED @SDL_EVENTS_DISABLED@ | ||||
| #cmakedefine SDL_FILE_DISABLED @SDL_FILE_DISABLED@ | ||||
| #cmakedefine SDL_JOYSTICK_DISABLED @SDL_JOYSTICK_DISABLED@ | ||||
| #cmakedefine SDL_HAPTIC_DISABLED @SDL_HAPTIC_DISABLED@ | ||||
| #cmakedefine SDL_LOADSO_DISABLED @SDL_LOADSO_DISABLED@ | ||||
| #cmakedefine SDL_RENDER_DISABLED @SDL_RENDER_DISABLED@ | ||||
| #cmakedefine SDL_THREADS_DISABLED @SDL_THREADS_DISABLED@ | ||||
| #cmakedefine SDL_TIMERS_DISABLED @SDL_TIMERS_DISABLED@ | ||||
| #cmakedefine SDL_VIDEO_DISABLED @SDL_VIDEO_DISABLED@ | ||||
| #cmakedefine SDL_POWER_DISABLED @SDL_POWER_DISABLED@ | ||||
| #cmakedefine SDL_FILESYSTEM_DISABLED @SDL_FILESYSTEM_DISABLED@ | ||||
|  | ||||
| /* Enable various audio drivers */ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_ANDROID @SDL_AUDIO_DRIVER_ANDROID@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_ALSA @SDL_AUDIO_DRIVER_ALSA@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_ALSA_DYNAMIC @SDL_AUDIO_DRIVER_ALSA_DYNAMIC@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_ARTS @SDL_AUDIO_DRIVER_ARTS@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_ARTS_DYNAMIC @SDL_AUDIO_DRIVER_ARTS_DYNAMIC@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_PULSEAUDIO @SDL_AUDIO_DRIVER_PULSEAUDIO@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC @SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_HAIKU @SDL_AUDIO_DRIVER_HAIKU@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_BSD @SDL_AUDIO_DRIVER_BSD@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_COREAUDIO @SDL_AUDIO_DRIVER_COREAUDIO@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_DISK @SDL_AUDIO_DRIVER_DISK@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_DUMMY @SDL_AUDIO_DRIVER_DUMMY@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_XAUDIO2 @SDL_AUDIO_DRIVER_XAUDIO2@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_DSOUND @SDL_AUDIO_DRIVER_DSOUND@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_ESD @SDL_AUDIO_DRIVER_ESD@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_ESD_DYNAMIC @SDL_AUDIO_DRIVER_ESD_DYNAMIC@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_NAS @SDL_AUDIO_DRIVER_NAS@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_NAS_DYNAMIC @SDL_AUDIO_DRIVER_NAS_DYNAMIC@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_SNDIO @SDL_AUDIO_DRIVER_SNDIO@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_SNDIO_DYNAMIC @SDL_AUDIO_DRIVER_SNDIO_DYNAMIC@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_OSS @SDL_AUDIO_DRIVER_OSS@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_OSS_SOUNDCARD_H @SDL_AUDIO_DRIVER_OSS_SOUNDCARD_H@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_PAUDIO @SDL_AUDIO_DRIVER_PAUDIO@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_QSA @SDL_AUDIO_DRIVER_QSA@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_SUNAUDIO @SDL_AUDIO_DRIVER_SUNAUDIO@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_WINMM @SDL_AUDIO_DRIVER_WINMM@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_FUSIONSOUND @SDL_AUDIO_DRIVER_FUSIONSOUND@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC @SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC@ | ||||
| #cmakedefine SDL_AUDIO_DRIVER_EMSCRIPTEN @SDL_AUDIO_DRIVER_EMSCRIPTEN@ | ||||
|  | ||||
| /* Enable various input drivers */ | ||||
| #cmakedefine SDL_INPUT_LINUXEV @SDL_INPUT_LINUXEV@ | ||||
| #cmakedefine SDL_INPUT_LINUXKD @SDL_INPUT_LINUXKD@ | ||||
| #cmakedefine SDL_INPUT_TSLIB @SDL_INPUT_TSLIB@ | ||||
| #cmakedefine SDL_JOYSTICK_ANDROID @SDL_JOYSTICK_ANDROID@ | ||||
| #cmakedefine SDL_JOYSTICK_HAIKU @SDL_JOYSTICK_HAIKU@ | ||||
| #cmakedefine SDL_JOYSTICK_DINPUT @SDL_JOYSTICK_DINPUT@ | ||||
| #cmakedefine SDL_JOYSTICK_XINPUT @SDL_JOYSTICK_XINPUT@ | ||||
| #cmakedefine SDL_JOYSTICK_DUMMY @SDL_JOYSTICK_DUMMY@ | ||||
| #cmakedefine SDL_JOYSTICK_IOKIT @SDL_JOYSTICK_IOKIT@ | ||||
| #cmakedefine SDL_JOYSTICK_MFI @SDL_JOYSTICK_MFI@ | ||||
| #cmakedefine SDL_JOYSTICK_LINUX @SDL_JOYSTICK_LINUX@ | ||||
| #cmakedefine SDL_JOYSTICK_WINMM @SDL_JOYSTICK_WINMM@ | ||||
| #cmakedefine SDL_JOYSTICK_USBHID @SDL_JOYSTICK_USBHID@ | ||||
| #cmakedefine SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H @SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H@ | ||||
| #cmakedefine SDL_JOYSTICK_EMSCRIPTEN @SDL_JOYSTICK_EMSCRIPTEN@ | ||||
| #cmakedefine SDL_HAPTIC_DUMMY @SDL_HAPTIC_DUMMY@ | ||||
| #cmakedefine SDL_HAPTIC_LINUX @SDL_HAPTIC_LINUX@ | ||||
| #cmakedefine SDL_HAPTIC_IOKIT @SDL_HAPTIC_IOKIT@ | ||||
| #cmakedefine SDL_HAPTIC_DINPUT @SDL_HAPTIC_DINPUT@ | ||||
| #cmakedefine SDL_HAPTIC_XINPUT @SDL_HAPTIC_XINPUT@ | ||||
|  | ||||
| /* Enable various shared object loading systems */ | ||||
| #cmakedefine SDL_LOADSO_HAIKU @SDL_LOADSO_HAIKU@ | ||||
| #cmakedefine SDL_LOADSO_DLOPEN @SDL_LOADSO_DLOPEN@ | ||||
| #cmakedefine SDL_LOADSO_DUMMY @SDL_LOADSO_DUMMY@ | ||||
| #cmakedefine SDL_LOADSO_LDG @SDL_LOADSO_LDG@ | ||||
| #cmakedefine SDL_LOADSO_WINDOWS @SDL_LOADSO_WINDOWS@ | ||||
|  | ||||
| /* Enable various threading systems */ | ||||
| #cmakedefine SDL_THREAD_PTHREAD @SDL_THREAD_PTHREAD@ | ||||
| #cmakedefine SDL_THREAD_PTHREAD_RECURSIVE_MUTEX @SDL_THREAD_PTHREAD_RECURSIVE_MUTEX@ | ||||
| #cmakedefine SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP @SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP@ | ||||
| #cmakedefine SDL_THREAD_WINDOWS @SDL_THREAD_WINDOWS@ | ||||
|  | ||||
| /* Enable various timer systems */ | ||||
| #cmakedefine SDL_TIMER_HAIKU @SDL_TIMER_HAIKU@ | ||||
| #cmakedefine SDL_TIMER_DUMMY @SDL_TIMER_DUMMY@ | ||||
| #cmakedefine SDL_TIMER_UNIX @SDL_TIMER_UNIX@ | ||||
| #cmakedefine SDL_TIMER_WINDOWS @SDL_TIMER_WINDOWS@ | ||||
| #cmakedefine SDL_TIMER_WINCE @SDL_TIMER_WINCE@ | ||||
|  | ||||
| /* Enable various video drivers */ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_ANDROID @SDL_VIDEO_DRIVER_ANDROID@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_HAIKU @SDL_VIDEO_DRIVER_HAIKU@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_COCOA @SDL_VIDEO_DRIVER_COCOA@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_DIRECTFB @SDL_VIDEO_DRIVER_DIRECTFB@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_DIRECTFB_DYNAMIC @SDL_VIDEO_DRIVER_DIRECTFB_DYNAMIC@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_DUMMY @SDL_VIDEO_DRIVER_DUMMY@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_WINDOWS @SDL_VIDEO_DRIVER_WINDOWS@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_WAYLAND @SDL_VIDEO_DRIVER_WAYLAND@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_RPI @SDL_VIDEO_DRIVER_RPI@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_VIVANTE @SDL_VIDEO_DRIVER_VIVANTE@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_VIVANTE_VDK @SDL_VIDEO_DRIVER_VIVANTE_VDK@ | ||||
|  | ||||
| #cmakedefine SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH @SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC @SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL @SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR @SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON @SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON@ | ||||
|  | ||||
| #cmakedefine SDL_VIDEO_DRIVER_MIR @SDL_VIDEO_DRIVER_MIR@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_MIR_DYNAMIC @SDL_VIDEO_DRIVER_MIR_DYNAMIC@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_MIR_DYNAMIC_XKBCOMMON @SDL_VIDEO_DRIVER_MIR_DYNAMIC_XKBCOMMON@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_EMSCRIPTEN @SDL_VIDEO_DRIVER_EMSCRIPTEN@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_X11 @SDL_VIDEO_DRIVER_X11@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_X11_DYNAMIC @SDL_VIDEO_DRIVER_X11_DYNAMIC@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT @SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR @SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA @SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 @SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR @SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS @SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE @SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_X11_XCURSOR @SDL_VIDEO_DRIVER_X11_XCURSOR@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_X11_XDBE @SDL_VIDEO_DRIVER_X11_XDBE@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_X11_XINERAMA @SDL_VIDEO_DRIVER_X11_XINERAMA@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_X11_XINPUT2 @SDL_VIDEO_DRIVER_X11_XINPUT2@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH @SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_X11_XRANDR @SDL_VIDEO_DRIVER_X11_XRANDR@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_X11_XSCRNSAVER @SDL_VIDEO_DRIVER_X11_XSCRNSAVER@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_X11_XSHAPE @SDL_VIDEO_DRIVER_X11_XSHAPE@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_X11_XVIDMODE @SDL_VIDEO_DRIVER_X11_XVIDMODE@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS @SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY @SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY@ | ||||
| #cmakedefine SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM @SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM@ | ||||
|  | ||||
| #cmakedefine SDL_VIDEO_RENDER_D3D @SDL_VIDEO_RENDER_D3D@ | ||||
| #cmakedefine SDL_VIDEO_RENDER_D3D11 @SDL_VIDEO_RENDER_D3D11@ | ||||
| #cmakedefine SDL_VIDEO_RENDER_OGL @SDL_VIDEO_RENDER_OGL@ | ||||
| #cmakedefine SDL_VIDEO_RENDER_OGL_ES @SDL_VIDEO_RENDER_OGL_ES@ | ||||
| #cmakedefine SDL_VIDEO_RENDER_OGL_ES2 @SDL_VIDEO_RENDER_OGL_ES2@ | ||||
| #cmakedefine SDL_VIDEO_RENDER_DIRECTFB @SDL_VIDEO_RENDER_DIRECTFB@ | ||||
|  | ||||
| /* Enable OpenGL support */ | ||||
| #cmakedefine SDL_VIDEO_OPENGL @SDL_VIDEO_OPENGL@ | ||||
| #cmakedefine SDL_VIDEO_OPENGL_ES @SDL_VIDEO_OPENGL_ES@ | ||||
| #cmakedefine SDL_VIDEO_OPENGL_ES2 @SDL_VIDEO_OPENGL_ES2@ | ||||
| #cmakedefine SDL_VIDEO_OPENGL_BGL @SDL_VIDEO_OPENGL_BGL@ | ||||
| #cmakedefine SDL_VIDEO_OPENGL_CGL @SDL_VIDEO_OPENGL_CGL@ | ||||
| #cmakedefine SDL_VIDEO_OPENGL_GLX @SDL_VIDEO_OPENGL_GLX@ | ||||
| #cmakedefine SDL_VIDEO_OPENGL_WGL @SDL_VIDEO_OPENGL_WGL@ | ||||
| #cmakedefine SDL_VIDEO_OPENGL_EGL @SDL_VIDEO_OPENGL_EGL@ | ||||
| #cmakedefine SDL_VIDEO_OPENGL_OSMESA @SDL_VIDEO_OPENGL_OSMESA@ | ||||
| #cmakedefine SDL_VIDEO_OPENGL_OSMESA_DYNAMIC @SDL_VIDEO_OPENGL_OSMESA_DYNAMIC@ | ||||
|  | ||||
| /* Enable system power support */ | ||||
| #cmakedefine SDL_POWER_ANDROID @SDL_POWER_ANDROID@ | ||||
| #cmakedefine SDL_POWER_LINUX @SDL_POWER_LINUX@ | ||||
| #cmakedefine SDL_POWER_WINDOWS @SDL_POWER_WINDOWS@ | ||||
| #cmakedefine SDL_POWER_MACOSX @SDL_POWER_MACOSX@ | ||||
| #cmakedefine SDL_POWER_HAIKU @SDL_POWER_HAIKU@ | ||||
| #cmakedefine SDL_POWER_EMSCRIPTEN @SDL_POWER_EMSCRIPTEN@ | ||||
| #cmakedefine SDL_POWER_HARDWIRED @SDL_POWER_HARDWIRED@ | ||||
|  | ||||
| /* Enable system filesystem support */ | ||||
| #cmakedefine SDL_FILESYSTEM_ANDROID @SDL_FILESYSTEM_ANDROID@ | ||||
| #cmakedefine SDL_FILESYSTEM_HAIKU @SDL_FILESYSTEM_HAIKU@ | ||||
| #cmakedefine SDL_FILESYSTEM_COCOA @SDL_FILESYSTEM_COCOA@ | ||||
| #cmakedefine SDL_FILESYSTEM_DUMMY @SDL_FILESYSTEM_DUMMY@ | ||||
| #cmakedefine SDL_FILESYSTEM_UNIX @SDL_FILESYSTEM_UNIX@ | ||||
| #cmakedefine SDL_FILESYSTEM_WINDOWS @SDL_FILESYSTEM_WINDOWS@ | ||||
| #cmakedefine SDL_FILESYSTEM_EMSCRIPTEN @SDL_FILESYSTEM_EMSCRIPTEN@ | ||||
|  | ||||
| /* Enable assembly routines */ | ||||
| #cmakedefine SDL_ASSEMBLY_ROUTINES @SDL_ASSEMBLY_ROUTINES@ | ||||
| #cmakedefine SDL_ALTIVEC_BLITTERS @SDL_ALTIVEC_BLITTERS@ | ||||
|  | ||||
|  | ||||
| /* Platform specific definitions */ | ||||
| #if !defined(__WIN32__) | ||||
| #  if !defined(_STDINT_H_) && !defined(_STDINT_H) && !defined(HAVE_STDINT_H) && !defined(_HAVE_STDINT_H) | ||||
| typedef unsigned int size_t; | ||||
| typedef signed char int8_t; | ||||
| typedef unsigned char uint8_t; | ||||
| typedef signed short int16_t; | ||||
| typedef unsigned short uint16_t; | ||||
| typedef signed int int32_t; | ||||
| typedef unsigned int uint32_t; | ||||
| typedef signed long long int64_t; | ||||
| typedef unsigned long long uint64_t; | ||||
| typedef unsigned long uintptr_t; | ||||
| #  endif /* if (stdint.h isn't available) */ | ||||
| #else /* __WIN32__ */ | ||||
| #  if !defined(_STDINT_H_) && !defined(HAVE_STDINT_H) && !defined(_HAVE_STDINT_H) | ||||
| #    if defined(__GNUC__) || defined(__DMC__) || defined(__WATCOMC__) | ||||
| #define HAVE_STDINT_H	1 | ||||
| #    elif defined(_MSC_VER) | ||||
| typedef signed __int8 int8_t; | ||||
| typedef unsigned __int8 uint8_t; | ||||
| typedef signed __int16 int16_t; | ||||
| typedef unsigned __int16 uint16_t; | ||||
| typedef signed __int32 int32_t; | ||||
| typedef unsigned __int32 uint32_t; | ||||
| typedef signed __int64 int64_t; | ||||
| typedef unsigned __int64 uint64_t; | ||||
| #      ifndef _UINTPTR_T_DEFINED | ||||
| #        ifdef  _WIN64 | ||||
| typedef unsigned __int64 uintptr_t; | ||||
| #          else | ||||
| typedef unsigned int uintptr_t; | ||||
| #        endif | ||||
| #define _UINTPTR_T_DEFINED | ||||
| #      endif | ||||
| /* Older Visual C++ headers don't have the Win64-compatible typedefs... */ | ||||
| #      if ((_MSC_VER <= 1200) && (!defined(DWORD_PTR))) | ||||
| #define DWORD_PTR DWORD | ||||
| #      endif | ||||
| #      if ((_MSC_VER <= 1200) && (!defined(LONG_PTR))) | ||||
| #define LONG_PTR LONG | ||||
| #      endif | ||||
| #    else /* !__GNUC__ && !_MSC_VER */ | ||||
| typedef signed char int8_t; | ||||
| typedef unsigned char uint8_t; | ||||
| typedef signed short int16_t; | ||||
| typedef unsigned short uint16_t; | ||||
| typedef signed int int32_t; | ||||
| typedef unsigned int uint32_t; | ||||
| typedef signed long long int64_t; | ||||
| typedef unsigned long long uint64_t; | ||||
| #      ifndef _SIZE_T_DEFINED_ | ||||
| #define _SIZE_T_DEFINED_ | ||||
| typedef unsigned int size_t; | ||||
| #      endif | ||||
| typedef unsigned int uintptr_t; | ||||
| #    endif /* __GNUC__ || _MSC_VER */ | ||||
| #  endif /* !_STDINT_H_ && !HAVE_STDINT_H */ | ||||
| #endif /* __WIN32__ */ | ||||
|  | ||||
| #endif /* _SDL_config_h */ | ||||
| @@ -0,0 +1,359 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_config_h | ||||
| #define _SDL_config_h | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_config.h.in | ||||
|  * | ||||
|  *  This is a set of defines to configure the SDL features | ||||
|  */ | ||||
|  | ||||
| /* General platform specific identifiers */ | ||||
| #include "SDL_platform.h" | ||||
|  | ||||
| /* Make sure that this isn't included by Visual C++ */ | ||||
| #ifdef _MSC_VER | ||||
| #error You should run hg revert SDL_config.h  | ||||
| #endif | ||||
|  | ||||
| /* C language features */ | ||||
| #undef const | ||||
| #undef inline | ||||
| #undef volatile | ||||
|  | ||||
| /* C datatypes */ | ||||
| #ifdef __LP64__ | ||||
| #define SIZEOF_VOIDP 8 | ||||
| #else | ||||
| #define SIZEOF_VOIDP 4 | ||||
| #endif | ||||
| #undef HAVE_GCC_ATOMICS | ||||
| #undef HAVE_GCC_SYNC_LOCK_TEST_AND_SET | ||||
|  | ||||
| #undef HAVE_DDRAW_H | ||||
| #undef HAVE_DINPUT_H | ||||
| #undef HAVE_DSOUND_H | ||||
| #undef HAVE_DXGI_H | ||||
| #undef HAVE_XINPUT_H | ||||
|  | ||||
| /* Comment this if you want to build without any C library requirements */ | ||||
| #undef HAVE_LIBC | ||||
| #if HAVE_LIBC | ||||
|  | ||||
| /* Useful headers */ | ||||
| #undef HAVE_ALLOCA_H | ||||
| #undef HAVE_SYS_TYPES_H | ||||
| #undef HAVE_STDIO_H | ||||
| #undef STDC_HEADERS | ||||
| #undef HAVE_STDLIB_H | ||||
| #undef HAVE_STDARG_H | ||||
| #undef HAVE_MALLOC_H | ||||
| #undef HAVE_MEMORY_H | ||||
| #undef HAVE_STRING_H | ||||
| #undef HAVE_STRINGS_H | ||||
| #undef HAVE_INTTYPES_H | ||||
| #undef HAVE_STDINT_H | ||||
| #undef HAVE_CTYPE_H | ||||
| #undef HAVE_MATH_H | ||||
| #undef HAVE_ICONV_H | ||||
| #undef HAVE_SIGNAL_H | ||||
| #undef HAVE_ALTIVEC_H | ||||
| #undef HAVE_PTHREAD_NP_H | ||||
| #undef HAVE_LIBUDEV_H | ||||
| #undef HAVE_DBUS_DBUS_H | ||||
| #undef HAVE_IBUS_IBUS_H | ||||
|  | ||||
| /* C library functions */ | ||||
| #undef HAVE_MALLOC | ||||
| #undef HAVE_CALLOC | ||||
| #undef HAVE_REALLOC | ||||
| #undef HAVE_FREE | ||||
| #undef HAVE_ALLOCA | ||||
| #ifndef __WIN32__ /* Don't use C runtime versions of these on Windows */ | ||||
| #undef HAVE_GETENV | ||||
| #undef HAVE_SETENV | ||||
| #undef HAVE_PUTENV | ||||
| #undef HAVE_UNSETENV | ||||
| #endif | ||||
| #undef HAVE_QSORT | ||||
| #undef HAVE_ABS | ||||
| #undef HAVE_BCOPY | ||||
| #undef HAVE_MEMSET | ||||
| #undef HAVE_MEMCPY | ||||
| #undef HAVE_MEMMOVE | ||||
| #undef HAVE_MEMCMP | ||||
| #undef HAVE_STRLEN | ||||
| #undef HAVE_STRLCPY | ||||
| #undef HAVE_STRLCAT | ||||
| #undef HAVE_STRDUP | ||||
| #undef HAVE__STRREV | ||||
| #undef HAVE__STRUPR | ||||
| #undef HAVE__STRLWR | ||||
| #undef HAVE_INDEX | ||||
| #undef HAVE_RINDEX | ||||
| #undef HAVE_STRCHR | ||||
| #undef HAVE_STRRCHR | ||||
| #undef HAVE_STRSTR | ||||
| #undef HAVE_ITOA | ||||
| #undef HAVE__LTOA | ||||
| #undef HAVE__UITOA | ||||
| #undef HAVE__ULTOA | ||||
| #undef HAVE_STRTOL | ||||
| #undef HAVE_STRTOUL | ||||
| #undef HAVE__I64TOA | ||||
| #undef HAVE__UI64TOA | ||||
| #undef HAVE_STRTOLL | ||||
| #undef HAVE_STRTOULL | ||||
| #undef HAVE_STRTOD | ||||
| #undef HAVE_ATOI | ||||
| #undef HAVE_ATOF | ||||
| #undef HAVE_STRCMP | ||||
| #undef HAVE_STRNCMP | ||||
| #undef HAVE__STRICMP | ||||
| #undef HAVE_STRCASECMP | ||||
| #undef HAVE__STRNICMP | ||||
| #undef HAVE_STRNCASECMP | ||||
| #undef HAVE_SSCANF | ||||
| #undef HAVE_VSSCANF | ||||
| #undef HAVE_SNPRINTF | ||||
| #undef HAVE_VSNPRINTF | ||||
| #undef HAVE_M_PI | ||||
| #undef HAVE_ATAN | ||||
| #undef HAVE_ATAN2 | ||||
| #undef HAVE_ACOS | ||||
| #undef HAVE_ASIN | ||||
| #undef HAVE_CEIL | ||||
| #undef HAVE_COPYSIGN | ||||
| #undef HAVE_COS | ||||
| #undef HAVE_COSF | ||||
| #undef HAVE_FABS | ||||
| #undef HAVE_FLOOR | ||||
| #undef HAVE_LOG | ||||
| #undef HAVE_POW | ||||
| #undef HAVE_SCALBN | ||||
| #undef HAVE_SIN | ||||
| #undef HAVE_SINF | ||||
| #undef HAVE_SQRT | ||||
| #undef HAVE_SQRTF | ||||
| #undef HAVE_TAN | ||||
| #undef HAVE_TANF | ||||
| #undef HAVE_FSEEKO | ||||
| #undef HAVE_FSEEKO64 | ||||
| #undef HAVE_SIGACTION | ||||
| #undef HAVE_SA_SIGACTION | ||||
| #undef HAVE_SETJMP | ||||
| #undef HAVE_NANOSLEEP | ||||
| #undef HAVE_SYSCONF | ||||
| #undef HAVE_SYSCTLBYNAME | ||||
| #undef HAVE_CLOCK_GETTIME | ||||
| #undef HAVE_GETPAGESIZE | ||||
| #undef HAVE_MPROTECT | ||||
| #undef HAVE_ICONV | ||||
| #undef HAVE_PTHREAD_SETNAME_NP | ||||
| #undef HAVE_PTHREAD_SET_NAME_NP | ||||
| #undef HAVE_SEM_TIMEDWAIT | ||||
|  | ||||
| #else | ||||
| #define HAVE_STDARG_H   1 | ||||
| #define HAVE_STDDEF_H   1 | ||||
| #define HAVE_STDINT_H   1 | ||||
| #endif /* HAVE_LIBC */ | ||||
|  | ||||
| /* SDL internal assertion support */ | ||||
| #undef SDL_DEFAULT_ASSERT_LEVEL | ||||
|  | ||||
| /* Allow disabling of core subsystems */ | ||||
| #undef SDL_ATOMIC_DISABLED | ||||
| #undef SDL_AUDIO_DISABLED | ||||
| #undef SDL_CPUINFO_DISABLED | ||||
| #undef SDL_EVENTS_DISABLED | ||||
| #undef SDL_FILE_DISABLED | ||||
| #undef SDL_JOYSTICK_DISABLED | ||||
| #undef SDL_HAPTIC_DISABLED | ||||
| #undef SDL_LOADSO_DISABLED | ||||
| #undef SDL_RENDER_DISABLED | ||||
| #undef SDL_THREADS_DISABLED | ||||
| #undef SDL_TIMERS_DISABLED | ||||
| #undef SDL_VIDEO_DISABLED | ||||
| #undef SDL_POWER_DISABLED | ||||
| #undef SDL_FILESYSTEM_DISABLED | ||||
|  | ||||
| /* Enable various audio drivers */ | ||||
| #undef SDL_AUDIO_DRIVER_ALSA | ||||
| #undef SDL_AUDIO_DRIVER_ALSA_DYNAMIC | ||||
| #undef SDL_AUDIO_DRIVER_ARTS | ||||
| #undef SDL_AUDIO_DRIVER_ARTS_DYNAMIC | ||||
| #undef SDL_AUDIO_DRIVER_PULSEAUDIO | ||||
| #undef SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC | ||||
| #undef SDL_AUDIO_DRIVER_HAIKU | ||||
| #undef SDL_AUDIO_DRIVER_BSD | ||||
| #undef SDL_AUDIO_DRIVER_COREAUDIO | ||||
| #undef SDL_AUDIO_DRIVER_DISK | ||||
| #undef SDL_AUDIO_DRIVER_DUMMY | ||||
| #undef SDL_AUDIO_DRIVER_ANDROID | ||||
| #undef SDL_AUDIO_DRIVER_XAUDIO2 | ||||
| #undef SDL_AUDIO_DRIVER_DSOUND | ||||
| #undef SDL_AUDIO_DRIVER_ESD | ||||
| #undef SDL_AUDIO_DRIVER_ESD_DYNAMIC | ||||
| #undef SDL_AUDIO_DRIVER_NACL | ||||
| #undef SDL_AUDIO_DRIVER_NAS | ||||
| #undef SDL_AUDIO_DRIVER_NAS_DYNAMIC | ||||
| #undef SDL_AUDIO_DRIVER_SNDIO | ||||
| #undef SDL_AUDIO_DRIVER_SNDIO_DYNAMIC | ||||
| #undef SDL_AUDIO_DRIVER_OSS | ||||
| #undef SDL_AUDIO_DRIVER_OSS_SOUNDCARD_H | ||||
| #undef SDL_AUDIO_DRIVER_PAUDIO | ||||
| #undef SDL_AUDIO_DRIVER_QSA | ||||
| #undef SDL_AUDIO_DRIVER_SUNAUDIO | ||||
| #undef SDL_AUDIO_DRIVER_WINMM | ||||
| #undef SDL_AUDIO_DRIVER_FUSIONSOUND | ||||
| #undef SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC | ||||
| #undef SDL_AUDIO_DRIVER_EMSCRIPTEN | ||||
|  | ||||
| /* Enable various input drivers */ | ||||
| #undef SDL_INPUT_LINUXEV | ||||
| #undef SDL_INPUT_LINUXKD | ||||
| #undef SDL_INPUT_TSLIB | ||||
| #undef SDL_JOYSTICK_HAIKU | ||||
| #undef SDL_JOYSTICK_DINPUT | ||||
| #undef SDL_JOYSTICK_XINPUT | ||||
| #undef SDL_JOYSTICK_DUMMY | ||||
| #undef SDL_JOYSTICK_IOKIT | ||||
| #undef SDL_JOYSTICK_LINUX | ||||
| #undef SDL_JOYSTICK_ANDROID | ||||
| #undef SDL_JOYSTICK_WINMM | ||||
| #undef SDL_JOYSTICK_USBHID | ||||
| #undef SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H | ||||
| #undef SDL_JOYSTICK_EMSCRIPTEN | ||||
| #undef SDL_HAPTIC_DUMMY | ||||
| #undef SDL_HAPTIC_LINUX | ||||
| #undef SDL_HAPTIC_IOKIT | ||||
| #undef SDL_HAPTIC_DINPUT | ||||
| #undef SDL_HAPTIC_XINPUT | ||||
|  | ||||
| /* Enable various shared object loading systems */ | ||||
| #undef SDL_LOADSO_HAIKU | ||||
| #undef SDL_LOADSO_DLOPEN | ||||
| #undef SDL_LOADSO_DUMMY | ||||
| #undef SDL_LOADSO_LDG | ||||
| #undef SDL_LOADSO_WINDOWS | ||||
|  | ||||
| /* Enable various threading systems */ | ||||
| #undef SDL_THREAD_PTHREAD | ||||
| #undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX | ||||
| #undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP | ||||
| #undef SDL_THREAD_WINDOWS | ||||
|  | ||||
| /* Enable various timer systems */ | ||||
| #undef SDL_TIMER_HAIKU | ||||
| #undef SDL_TIMER_DUMMY | ||||
| #undef SDL_TIMER_UNIX | ||||
| #undef SDL_TIMER_WINDOWS | ||||
|  | ||||
| /* Enable various video drivers */ | ||||
| #undef SDL_VIDEO_DRIVER_HAIKU | ||||
| #undef SDL_VIDEO_DRIVER_COCOA | ||||
| #undef SDL_VIDEO_DRIVER_DIRECTFB | ||||
| #undef SDL_VIDEO_DRIVER_DIRECTFB_DYNAMIC | ||||
| #undef SDL_VIDEO_DRIVER_DUMMY | ||||
| #undef SDL_VIDEO_DRIVER_WINDOWS | ||||
| #undef SDL_VIDEO_DRIVER_WAYLAND | ||||
| #undef SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH | ||||
| #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC | ||||
| #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL | ||||
| #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR | ||||
| #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON | ||||
| #undef SDL_VIDEO_DRIVER_MIR | ||||
| #undef SDL_VIDEO_DRIVER_MIR_DYNAMIC | ||||
| #undef SDL_VIDEO_DRIVER_MIR_DYNAMIC_XKBCOMMON | ||||
| #undef SDL_VIDEO_DRIVER_X11 | ||||
| #undef SDL_VIDEO_DRIVER_RPI | ||||
| #undef SDL_VIDEO_DRIVER_ANDROID | ||||
| #undef SDL_VIDEO_DRIVER_EMSCRIPTEN | ||||
| #undef SDL_VIDEO_DRIVER_X11_DYNAMIC | ||||
| #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT | ||||
| #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR | ||||
| #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA | ||||
| #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 | ||||
| #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR | ||||
| #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS | ||||
| #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE | ||||
| #undef SDL_VIDEO_DRIVER_X11_XCURSOR | ||||
| #undef SDL_VIDEO_DRIVER_X11_XDBE | ||||
| #undef SDL_VIDEO_DRIVER_X11_XINERAMA | ||||
| #undef SDL_VIDEO_DRIVER_X11_XINPUT2 | ||||
| #undef SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH | ||||
| #undef SDL_VIDEO_DRIVER_X11_XRANDR | ||||
| #undef SDL_VIDEO_DRIVER_X11_XSCRNSAVER | ||||
| #undef SDL_VIDEO_DRIVER_X11_XSHAPE | ||||
| #undef SDL_VIDEO_DRIVER_X11_XVIDMODE | ||||
| #undef SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS | ||||
| #undef SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY | ||||
| #undef SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM | ||||
| #undef SDL_VIDEO_DRIVER_NACL | ||||
| #undef SDL_VIDEO_DRIVER_VIVANTE | ||||
| #undef SDL_VIDEO_DRIVER_VIVANTE_VDK | ||||
|  | ||||
| #undef SDL_VIDEO_RENDER_D3D | ||||
| #undef SDL_VIDEO_RENDER_D3D11 | ||||
| #undef SDL_VIDEO_RENDER_OGL | ||||
| #undef SDL_VIDEO_RENDER_OGL_ES | ||||
| #undef SDL_VIDEO_RENDER_OGL_ES2 | ||||
| #undef SDL_VIDEO_RENDER_DIRECTFB | ||||
|  | ||||
| /* Enable OpenGL support */ | ||||
| #undef SDL_VIDEO_OPENGL | ||||
| #undef SDL_VIDEO_OPENGL_ES | ||||
| #undef SDL_VIDEO_OPENGL_ES2 | ||||
| #undef SDL_VIDEO_OPENGL_BGL | ||||
| #undef SDL_VIDEO_OPENGL_CGL | ||||
| #undef SDL_VIDEO_OPENGL_EGL | ||||
| #undef SDL_VIDEO_OPENGL_GLX | ||||
| #undef SDL_VIDEO_OPENGL_WGL | ||||
| #undef SDL_VIDEO_OPENGL_OSMESA | ||||
| #undef SDL_VIDEO_OPENGL_OSMESA_DYNAMIC | ||||
|  | ||||
| /* Enable system power support */ | ||||
| #undef SDL_POWER_LINUX | ||||
| #undef SDL_POWER_WINDOWS | ||||
| #undef SDL_POWER_MACOSX | ||||
| #undef SDL_POWER_HAIKU | ||||
| #undef SDL_POWER_ANDROID | ||||
| #undef SDL_POWER_EMSCRIPTEN | ||||
| #undef SDL_POWER_HARDWIRED | ||||
|  | ||||
| /* Enable system filesystem support */ | ||||
| #undef SDL_FILESYSTEM_HAIKU | ||||
| #undef SDL_FILESYSTEM_COCOA | ||||
| #undef SDL_FILESYSTEM_DUMMY | ||||
| #undef SDL_FILESYSTEM_UNIX | ||||
| #undef SDL_FILESYSTEM_WINDOWS | ||||
| #undef SDL_FILESYSTEM_NACL | ||||
| #undef SDL_FILESYSTEM_ANDROID | ||||
| #undef SDL_FILESYSTEM_EMSCRIPTEN | ||||
|  | ||||
| /* Enable assembly routines */ | ||||
| #undef SDL_ASSEMBLY_ROUTINES | ||||
| #undef SDL_ALTIVEC_BLITTERS | ||||
|  | ||||
| #endif /* _SDL_config_h */ | ||||
| @@ -0,0 +1,145 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_config_android_h | ||||
| #define _SDL_config_android_h | ||||
|  | ||||
| #include "SDL_platform.h" | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_config_android.h | ||||
|  * | ||||
|  *  This is a configuration that can be used to build SDL for Android | ||||
|  */ | ||||
|  | ||||
| #include <stdarg.h> | ||||
|  | ||||
| #define HAVE_GCC_ATOMICS    1 | ||||
|  | ||||
| #define HAVE_ALLOCA_H       1 | ||||
| #define HAVE_SYS_TYPES_H    1 | ||||
| #define HAVE_STDIO_H    1 | ||||
| #define STDC_HEADERS    1 | ||||
| #define HAVE_STRING_H   1 | ||||
| #define HAVE_INTTYPES_H 1 | ||||
| #define HAVE_STDINT_H   1 | ||||
| #define HAVE_CTYPE_H    1 | ||||
| #define HAVE_MATH_H 1 | ||||
|  | ||||
| /* C library functions */ | ||||
| #define HAVE_MALLOC 1 | ||||
| #define HAVE_CALLOC 1 | ||||
| #define HAVE_REALLOC    1 | ||||
| #define HAVE_FREE   1 | ||||
| #define HAVE_ALLOCA 1 | ||||
| #define HAVE_GETENV 1 | ||||
| #define HAVE_SETENV 1 | ||||
| #define HAVE_PUTENV 1 | ||||
| #define HAVE_SETENV 1 | ||||
| #define HAVE_UNSETENV   1 | ||||
| #define HAVE_QSORT  1 | ||||
| #define HAVE_ABS    1 | ||||
| #define HAVE_BCOPY  1 | ||||
| #define HAVE_MEMSET 1 | ||||
| #define HAVE_MEMCPY 1 | ||||
| #define HAVE_MEMMOVE    1 | ||||
| #define HAVE_MEMCMP 1 | ||||
| #define HAVE_STRLEN 1 | ||||
| #define HAVE_STRLCPY    1 | ||||
| #define HAVE_STRLCAT    1 | ||||
| #define HAVE_STRDUP 1 | ||||
| #define HAVE_STRCHR 1 | ||||
| #define HAVE_STRRCHR    1 | ||||
| #define HAVE_STRSTR 1 | ||||
| #define HAVE_STRTOL 1 | ||||
| #define HAVE_STRTOUL    1 | ||||
| #define HAVE_STRTOLL    1 | ||||
| #define HAVE_STRTOULL   1 | ||||
| #define HAVE_STRTOD 1 | ||||
| #define HAVE_ATOI   1 | ||||
| #define HAVE_STRCMP 1 | ||||
| #define HAVE_STRNCMP    1 | ||||
| #define HAVE_STRCASECMP 1 | ||||
| #define HAVE_STRNCASECMP 1 | ||||
| #define HAVE_VSSCANF 1 | ||||
| #define HAVE_VSNPRINTF  1 | ||||
| #define HAVE_M_PI   1 | ||||
| #define HAVE_ATAN   1 | ||||
| #define HAVE_ATAN2  1 | ||||
| #define HAVE_ACOS  1 | ||||
| #define HAVE_ASIN  1 | ||||
| #define HAVE_CEIL   1 | ||||
| #define HAVE_COPYSIGN   1 | ||||
| #define HAVE_COS    1 | ||||
| #define HAVE_COSF   1 | ||||
| #define HAVE_FABS   1 | ||||
| #define HAVE_FLOOR  1 | ||||
| #define HAVE_LOG    1 | ||||
| #define HAVE_POW    1 | ||||
| #define HAVE_SCALBN 1 | ||||
| #define HAVE_SIN    1 | ||||
| #define HAVE_SINF   1 | ||||
| #define HAVE_SQRT   1 | ||||
| #define HAVE_SQRTF  1 | ||||
| #define HAVE_TAN    1 | ||||
| #define HAVE_TANF   1 | ||||
| #define HAVE_SETJMP 1 | ||||
| #define HAVE_NANOSLEEP  1 | ||||
| #define HAVE_SYSCONF    1 | ||||
| #define HAVE_CLOCK_GETTIME	1 | ||||
|  | ||||
| #define SIZEOF_VOIDP 4 | ||||
|  | ||||
| /* Enable various audio drivers */ | ||||
| #define SDL_AUDIO_DRIVER_ANDROID    1 | ||||
| #define SDL_AUDIO_DRIVER_DUMMY  1 | ||||
|  | ||||
| /* Enable various input drivers */ | ||||
| #define SDL_JOYSTICK_ANDROID    1 | ||||
| #define SDL_HAPTIC_DUMMY    1 | ||||
|  | ||||
| /* Enable various shared object loading systems */ | ||||
| #define SDL_LOADSO_DLOPEN   1 | ||||
|  | ||||
| /* Enable various threading systems */ | ||||
| #define SDL_THREAD_PTHREAD  1 | ||||
| #define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX  1 | ||||
|  | ||||
| /* Enable various timer systems */ | ||||
| #define SDL_TIMER_UNIX  1 | ||||
|  | ||||
| /* Enable various video drivers */ | ||||
| #define SDL_VIDEO_DRIVER_ANDROID 1 | ||||
|  | ||||
| /* Enable OpenGL ES */ | ||||
| #define SDL_VIDEO_OPENGL_ES 1 | ||||
| #define SDL_VIDEO_OPENGL_ES2 1 | ||||
| #define SDL_VIDEO_OPENGL_EGL 1 | ||||
| #define SDL_VIDEO_RENDER_OGL_ES 1 | ||||
| #define SDL_VIDEO_RENDER_OGL_ES2    1 | ||||
|  | ||||
| /* Enable system power support */ | ||||
| #define SDL_POWER_ANDROID 1 | ||||
|  | ||||
| /* Enable the filesystem driver */ | ||||
| #define SDL_FILESYSTEM_ANDROID   1 | ||||
|  | ||||
| #endif /* _SDL_config_android_h */ | ||||
| @@ -0,0 +1,162 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_config_iphoneos_h | ||||
| #define _SDL_config_iphoneos_h | ||||
|  | ||||
| #include "SDL_platform.h" | ||||
|  | ||||
| #ifdef __LP64__ | ||||
| #define SIZEOF_VOIDP 8 | ||||
| #else | ||||
| #define SIZEOF_VOIDP 4 | ||||
| #endif | ||||
|  | ||||
| #define HAVE_GCC_ATOMICS    1 | ||||
|  | ||||
| #define HAVE_ALLOCA_H       1 | ||||
| #define HAVE_SYS_TYPES_H    1 | ||||
| #define HAVE_STDIO_H    1 | ||||
| #define STDC_HEADERS    1 | ||||
| #define HAVE_STRING_H   1 | ||||
| #define HAVE_INTTYPES_H 1 | ||||
| #define HAVE_STDINT_H   1 | ||||
| #define HAVE_CTYPE_H    1 | ||||
| #define HAVE_MATH_H 1 | ||||
| #define HAVE_SIGNAL_H   1 | ||||
|  | ||||
| /* C library functions */ | ||||
| #define HAVE_MALLOC 1 | ||||
| #define HAVE_CALLOC 1 | ||||
| #define HAVE_REALLOC    1 | ||||
| #define HAVE_FREE   1 | ||||
| #define HAVE_ALLOCA 1 | ||||
| #define HAVE_GETENV 1 | ||||
| #define HAVE_SETENV 1 | ||||
| #define HAVE_PUTENV 1 | ||||
| #define HAVE_SETENV 1 | ||||
| #define HAVE_UNSETENV   1 | ||||
| #define HAVE_QSORT  1 | ||||
| #define HAVE_ABS    1 | ||||
| #define HAVE_BCOPY  1 | ||||
| #define HAVE_MEMSET 1 | ||||
| #define HAVE_MEMCPY 1 | ||||
| #define HAVE_MEMMOVE    1 | ||||
| #define HAVE_MEMCMP 1 | ||||
| #define HAVE_STRLEN 1 | ||||
| #define HAVE_STRLCPY    1 | ||||
| #define HAVE_STRLCAT    1 | ||||
| #define HAVE_STRDUP 1 | ||||
| #define HAVE_STRCHR 1 | ||||
| #define HAVE_STRRCHR    1 | ||||
| #define HAVE_STRSTR 1 | ||||
| #define HAVE_STRTOL 1 | ||||
| #define HAVE_STRTOUL    1 | ||||
| #define HAVE_STRTOLL    1 | ||||
| #define HAVE_STRTOULL   1 | ||||
| #define HAVE_STRTOD 1 | ||||
| #define HAVE_ATOI   1 | ||||
| #define HAVE_ATOF   1 | ||||
| #define HAVE_STRCMP 1 | ||||
| #define HAVE_STRNCMP    1 | ||||
| #define HAVE_STRCASECMP 1 | ||||
| #define HAVE_STRNCASECMP 1 | ||||
| #define HAVE_VSSCANF 1 | ||||
| #define HAVE_VSNPRINTF  1 | ||||
| #define HAVE_M_PI   1 | ||||
| #define HAVE_ATAN   1 | ||||
| #define HAVE_ATAN2  1 | ||||
| #define HAVE_ACOS  1 | ||||
| #define HAVE_ASIN  1 | ||||
| #define HAVE_CEIL   1 | ||||
| #define HAVE_COPYSIGN   1 | ||||
| #define HAVE_COS    1 | ||||
| #define HAVE_COSF   1 | ||||
| #define HAVE_FABS   1 | ||||
| #define HAVE_FLOOR  1 | ||||
| #define HAVE_LOG    1 | ||||
| #define HAVE_POW    1 | ||||
| #define HAVE_SCALBN 1 | ||||
| #define HAVE_SIN    1 | ||||
| #define HAVE_SINF   1 | ||||
| #define HAVE_SQRT   1 | ||||
| #define HAVE_SQRTF  1 | ||||
| #define HAVE_TAN    1 | ||||
| #define HAVE_TANF   1 | ||||
| #define HAVE_SIGACTION  1 | ||||
| #define HAVE_SETJMP 1 | ||||
| #define HAVE_NANOSLEEP  1 | ||||
| #define HAVE_SYSCONF    1 | ||||
| #define HAVE_SYSCTLBYNAME 1 | ||||
|  | ||||
| /* enable iPhone version of Core Audio driver */ | ||||
| #define SDL_AUDIO_DRIVER_COREAUDIO 1 | ||||
| /* Enable the dummy audio driver (src/audio/dummy/\*.c) */ | ||||
| #define SDL_AUDIO_DRIVER_DUMMY  1 | ||||
|  | ||||
| /* Enable the stub haptic driver (src/haptic/dummy/\*.c) */ | ||||
| #define SDL_HAPTIC_DUMMY 1 | ||||
|  | ||||
| /* Enable MFi joystick support */ | ||||
| #define SDL_JOYSTICK_MFI 1 | ||||
|  | ||||
| /* Enable Unix style SO loading */ | ||||
| /* Technically this works, but violates the iOS dev agreement prior to iOS 8 */ | ||||
| /* #define SDL_LOADSO_DLOPEN 1 */ | ||||
|  | ||||
| /* Enable the stub shared object loader (src/loadso/dummy/\*.c) */ | ||||
| #define SDL_LOADSO_DISABLED 1 | ||||
|  | ||||
| /* Enable various threading systems */ | ||||
| #define SDL_THREAD_PTHREAD  1 | ||||
| #define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX  1 | ||||
|  | ||||
| /* Enable various timer systems */ | ||||
| #define SDL_TIMER_UNIX  1 | ||||
|  | ||||
| /* Supported video drivers */ | ||||
| #define SDL_VIDEO_DRIVER_UIKIT  1 | ||||
| #define SDL_VIDEO_DRIVER_DUMMY  1 | ||||
|  | ||||
| /* enable OpenGL ES */ | ||||
| #define SDL_VIDEO_OPENGL_ES2 1 | ||||
| #define SDL_VIDEO_OPENGL_ES 1 | ||||
| #define SDL_VIDEO_RENDER_OGL_ES 1 | ||||
| #define SDL_VIDEO_RENDER_OGL_ES2    1 | ||||
|  | ||||
| /* Enable system power support */ | ||||
| #define SDL_POWER_UIKIT 1 | ||||
|  | ||||
| /* enable iPhone keyboard support */ | ||||
| #define SDL_IPHONE_KEYBOARD 1 | ||||
|  | ||||
| /* enable iOS extended launch screen */ | ||||
| #define SDL_IPHONE_LAUNCHSCREEN 1 | ||||
|  | ||||
| /* Set max recognized G-force from accelerometer | ||||
|    See src/joystick/uikit/SDL_sysjoystick.m for notes on why this is needed | ||||
|  */ | ||||
| #define SDL_IPHONE_MAX_GFORCE 5.0 | ||||
|  | ||||
| /* enable filesystem support */ | ||||
| #define SDL_FILESYSTEM_COCOA   1 | ||||
|  | ||||
| #endif /* _SDL_config_iphoneos_h */ | ||||
| @@ -0,0 +1,188 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_config_macosx_h | ||||
| #define _SDL_config_macosx_h | ||||
|  | ||||
| #include "SDL_platform.h" | ||||
|  | ||||
| /* This gets us MAC_OS_X_VERSION_MIN_REQUIRED... */ | ||||
| #include <AvailabilityMacros.h> | ||||
|  | ||||
| /* This is a set of defines to configure the SDL features */ | ||||
|  | ||||
| #ifdef __LP64__ | ||||
|     #define SIZEOF_VOIDP 8 | ||||
| #else | ||||
|     #define SIZEOF_VOIDP 4 | ||||
| #endif | ||||
|  | ||||
| /* Useful headers */ | ||||
| #define HAVE_ALLOCA_H       1 | ||||
| #define HAVE_SYS_TYPES_H    1 | ||||
| #define HAVE_STDIO_H    1 | ||||
| #define STDC_HEADERS    1 | ||||
| #define HAVE_STRING_H   1 | ||||
| #define HAVE_INTTYPES_H 1 | ||||
| #define HAVE_STDINT_H   1 | ||||
| #define HAVE_CTYPE_H    1 | ||||
| #define HAVE_MATH_H 1 | ||||
| #define HAVE_SIGNAL_H   1 | ||||
|  | ||||
| /* C library functions */ | ||||
| #define HAVE_MALLOC 1 | ||||
| #define HAVE_CALLOC 1 | ||||
| #define HAVE_REALLOC    1 | ||||
| #define HAVE_FREE   1 | ||||
| #define HAVE_ALLOCA 1 | ||||
| #define HAVE_GETENV 1 | ||||
| #define HAVE_SETENV 1 | ||||
| #define HAVE_PUTENV 1 | ||||
| #define HAVE_UNSETENV   1 | ||||
| #define HAVE_QSORT  1 | ||||
| #define HAVE_ABS    1 | ||||
| #define HAVE_BCOPY  1 | ||||
| #define HAVE_MEMSET 1 | ||||
| #define HAVE_MEMCPY 1 | ||||
| #define HAVE_MEMMOVE    1 | ||||
| #define HAVE_MEMCMP 1 | ||||
| #define HAVE_STRLEN 1 | ||||
| #define HAVE_STRLCPY    1 | ||||
| #define HAVE_STRLCAT    1 | ||||
| #define HAVE_STRDUP 1 | ||||
| #define HAVE_STRCHR 1 | ||||
| #define HAVE_STRRCHR    1 | ||||
| #define HAVE_STRSTR 1 | ||||
| #define HAVE_STRTOL 1 | ||||
| #define HAVE_STRTOUL    1 | ||||
| #define HAVE_STRTOLL    1 | ||||
| #define HAVE_STRTOULL   1 | ||||
| #define HAVE_STRTOD 1 | ||||
| #define HAVE_ATOI   1 | ||||
| #define HAVE_ATOF   1 | ||||
| #define HAVE_STRCMP 1 | ||||
| #define HAVE_STRNCMP    1 | ||||
| #define HAVE_STRCASECMP 1 | ||||
| #define HAVE_STRNCASECMP 1 | ||||
| #define HAVE_VSSCANF 1 | ||||
| #define HAVE_VSNPRINTF  1 | ||||
| #define HAVE_CEIL   1 | ||||
| #define HAVE_COPYSIGN   1 | ||||
| #define HAVE_COS    1 | ||||
| #define HAVE_COSF   1 | ||||
| #define HAVE_FABS   1 | ||||
| #define HAVE_FLOOR  1 | ||||
| #define HAVE_LOG    1 | ||||
| #define HAVE_POW    1 | ||||
| #define HAVE_SCALBN 1 | ||||
| #define HAVE_SIN    1 | ||||
| #define HAVE_SINF   1 | ||||
| #define HAVE_SQRT   1 | ||||
| #define HAVE_SQRTF  1 | ||||
| #define HAVE_TAN    1 | ||||
| #define HAVE_TANF   1 | ||||
| #define HAVE_SIGACTION  1 | ||||
| #define HAVE_SETJMP 1 | ||||
| #define HAVE_NANOSLEEP  1 | ||||
| #define HAVE_SYSCONF    1 | ||||
| #define HAVE_SYSCTLBYNAME 1 | ||||
| #define HAVE_ATAN 1 | ||||
| #define HAVE_ATAN2 1 | ||||
| #define HAVE_ACOS 1 | ||||
| #define HAVE_ASIN 1 | ||||
|  | ||||
| /* Enable various audio drivers */ | ||||
| #define SDL_AUDIO_DRIVER_COREAUDIO  1 | ||||
| #define SDL_AUDIO_DRIVER_DISK   1 | ||||
| #define SDL_AUDIO_DRIVER_DUMMY  1 | ||||
|  | ||||
| /* Enable various input drivers */ | ||||
| #define SDL_JOYSTICK_IOKIT  1 | ||||
| #define SDL_HAPTIC_IOKIT    1 | ||||
|  | ||||
| /* Enable various shared object loading systems */ | ||||
| #define SDL_LOADSO_DLOPEN   1 | ||||
|  | ||||
| /* Enable various threading systems */ | ||||
| #define SDL_THREAD_PTHREAD  1 | ||||
| #define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX  1 | ||||
|  | ||||
| /* Enable various timer systems */ | ||||
| #define SDL_TIMER_UNIX  1 | ||||
|  | ||||
| /* Enable various video drivers */ | ||||
| #define SDL_VIDEO_DRIVER_COCOA  1 | ||||
| #define SDL_VIDEO_DRIVER_DUMMY  1 | ||||
| #undef SDL_VIDEO_DRIVER_X11 | ||||
| #define SDL_VIDEO_DRIVER_X11_DYNAMIC "/usr/X11R6/lib/libX11.6.dylib" | ||||
| #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT "/usr/X11R6/lib/libXext.6.dylib" | ||||
| #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA "/usr/X11R6/lib/libXinerama.1.dylib" | ||||
| #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 "/usr/X11R6/lib/libXi.6.dylib" | ||||
| #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR "/usr/X11R6/lib/libXrandr.2.dylib" | ||||
| #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS "/usr/X11R6/lib/libXss.1.dylib" | ||||
| #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE "/usr/X11R6/lib/libXxf86vm.1.dylib" | ||||
| #define SDL_VIDEO_DRIVER_X11_XDBE 1 | ||||
| #define SDL_VIDEO_DRIVER_X11_XINERAMA 1 | ||||
| #define SDL_VIDEO_DRIVER_X11_XRANDR 1 | ||||
| #define SDL_VIDEO_DRIVER_X11_XSCRNSAVER 1 | ||||
| #define SDL_VIDEO_DRIVER_X11_XSHAPE 1 | ||||
| #define SDL_VIDEO_DRIVER_X11_XVIDMODE 1 | ||||
| #define SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM 1 | ||||
|  | ||||
| #ifdef MAC_OS_X_VERSION_10_8 | ||||
| /* | ||||
|  * No matter the versions targeted, this is the 10.8 or later SDK, so you have | ||||
|  *  to use the external Xquartz, which is a more modern Xlib. Previous SDKs | ||||
|  *  used an older Xlib. | ||||
|  */ | ||||
| #define SDL_VIDEO_DRIVER_X11_XINPUT2 1 | ||||
| #define SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS 1 | ||||
| #define SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY 1 | ||||
| #endif | ||||
|  | ||||
| #ifndef SDL_VIDEO_RENDER_OGL | ||||
| #define SDL_VIDEO_RENDER_OGL    1 | ||||
| #endif | ||||
|  | ||||
| /* Enable OpenGL support */ | ||||
| #ifndef SDL_VIDEO_OPENGL | ||||
| #define SDL_VIDEO_OPENGL    1 | ||||
| #endif | ||||
| #ifndef SDL_VIDEO_OPENGL_CGL | ||||
| #define SDL_VIDEO_OPENGL_CGL    1 | ||||
| #endif | ||||
| #ifndef SDL_VIDEO_OPENGL_GLX | ||||
| #define SDL_VIDEO_OPENGL_GLX    1 | ||||
| #endif | ||||
|  | ||||
| /* Enable system power support */ | ||||
| #define SDL_POWER_MACOSX 1 | ||||
|  | ||||
| /* enable filesystem support */ | ||||
| #define SDL_FILESYSTEM_COCOA   1 | ||||
|  | ||||
| /* Enable assembly routines */ | ||||
| #define SDL_ASSEMBLY_ROUTINES   1 | ||||
| #ifdef __ppc__ | ||||
| #define SDL_ALTIVEC_BLITTERS    1 | ||||
| #endif | ||||
|  | ||||
| #endif /* _SDL_config_macosx_h */ | ||||
| @@ -0,0 +1,81 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_config_minimal_h | ||||
| #define _SDL_config_minimal_h | ||||
|  | ||||
| #include "SDL_platform.h" | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_config_minimal.h | ||||
|  * | ||||
|  *  This is the minimal configuration that can be used to build SDL. | ||||
|  */ | ||||
|  | ||||
| #define HAVE_STDARG_H   1 | ||||
| #define HAVE_STDDEF_H   1 | ||||
|  | ||||
| /* Most everything except Visual Studio 2008 and earlier has stdint.h now */ | ||||
| #if defined(_MSC_VER) && (_MSC_VER < 1600) | ||||
| /* Here are some reasonable defaults */ | ||||
| typedef unsigned int size_t; | ||||
| typedef signed char int8_t; | ||||
| typedef unsigned char uint8_t; | ||||
| typedef signed short int16_t; | ||||
| typedef unsigned short uint16_t; | ||||
| typedef signed int int32_t; | ||||
| typedef unsigned int uint32_t; | ||||
| typedef signed long long int64_t; | ||||
| typedef unsigned long long uint64_t; | ||||
| typedef unsigned long uintptr_t; | ||||
| #else | ||||
| #define HAVE_STDINT_H 1 | ||||
| #endif /* Visual Studio 2008 */ | ||||
|  | ||||
| #ifdef __GNUC__ | ||||
| #define HAVE_GCC_SYNC_LOCK_TEST_AND_SET 1 | ||||
| #endif | ||||
|  | ||||
| /* Enable the dummy audio driver (src/audio/dummy/\*.c) */ | ||||
| #define SDL_AUDIO_DRIVER_DUMMY  1 | ||||
|  | ||||
| /* Enable the stub joystick driver (src/joystick/dummy/\*.c) */ | ||||
| #define SDL_JOYSTICK_DISABLED   1 | ||||
|  | ||||
| /* Enable the stub haptic driver (src/haptic/dummy/\*.c) */ | ||||
| #define SDL_HAPTIC_DISABLED 1 | ||||
|  | ||||
| /* Enable the stub shared object loader (src/loadso/dummy/\*.c) */ | ||||
| #define SDL_LOADSO_DISABLED 1 | ||||
|  | ||||
| /* Enable the stub thread support (src/thread/generic/\*.c) */ | ||||
| #define SDL_THREADS_DISABLED    1 | ||||
|  | ||||
| /* Enable the stub timer support (src/timer/dummy/\*.c) */ | ||||
| #define SDL_TIMERS_DISABLED 1 | ||||
|  | ||||
| /* Enable the dummy video driver (src/video/dummy/\*.c) */ | ||||
| #define SDL_VIDEO_DRIVER_DUMMY  1 | ||||
|  | ||||
| /* Enable the dummy filesystem driver (src/filesystem/dummy/\*.c) */ | ||||
| #define SDL_FILESYSTEM_DUMMY  1 | ||||
|  | ||||
| #endif /* _SDL_config_minimal_h */ | ||||
| @@ -0,0 +1,127 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_config_h | ||||
| #define _SDL_config_h | ||||
|  | ||||
| /* This is a set of defines to configure the SDL features */ | ||||
|  | ||||
| /* General platform specific identifiers */ | ||||
| #include "SDL_platform.h" | ||||
|  | ||||
| #ifdef __LP64__ | ||||
| #define SIZEOF_VOIDP 8 | ||||
| #else | ||||
| #define SIZEOF_VOIDP 4 | ||||
| #endif | ||||
|  | ||||
| #define SDL_BYTEORDER 1234 | ||||
|  | ||||
| #define HAVE_ALLOCA_H 1 | ||||
| #define HAVE_SYS_TYPES_H 1 | ||||
| #define HAVE_STDIO_H 1 | ||||
| #define STDC_HEADERS 1 | ||||
| #define HAVE_STDLIB_H 1 | ||||
| #define HAVE_STDARG_H 1 | ||||
| #define HAVE_MALLOC_H 1 | ||||
| #define HAVE_MEMORY_H 1 | ||||
| #define HAVE_STRING_H 1 | ||||
| #define HAVE_STRINGS_H 1 | ||||
| #define HAVE_INTTYPES_H 1 | ||||
| #define HAVE_STDINT_H 1 | ||||
| #define HAVE_CTYPE_H 1 | ||||
| #define HAVE_MATH_H 1 | ||||
| #define HAVE_ICONV_H 1 | ||||
| #define HAVE_SIGNAL_H 1 | ||||
| #define HAVE_MALLOC 1 | ||||
| #define HAVE_CALLOC 1 | ||||
| #define HAVE_REALLOC 1 | ||||
| #define HAVE_FREE 1 | ||||
| #define HAVE_ALLOCA 1 | ||||
| #define HAVE_GETENV 1 | ||||
| #define HAVE_SETENV 1 | ||||
| #define HAVE_PUTENV 1 | ||||
| #define HAVE_UNSETENV 1 | ||||
| #define HAVE_QSORT 1 | ||||
| #define HAVE_ABS 1 | ||||
| #define HAVE_BCOPY 1 | ||||
| #define HAVE_MEMSET 1 | ||||
| #define HAVE_MEMCPY 1 | ||||
| #define HAVE_MEMMOVE 1 | ||||
| #define HAVE_STRLEN 1 | ||||
| #define HAVE_STRDUP 1 | ||||
| #define HAVE_STRCHR 1 | ||||
| #define HAVE_STRRCHR 1 | ||||
| #define HAVE_STRSTR 1 | ||||
| #define HAVE_STRTOL 1 | ||||
| #define HAVE_STRTOUL 1 | ||||
| #define HAVE_STRTOLL 1 | ||||
| #define HAVE_STRTOULL 1 | ||||
| #define HAVE_ATOI 1 | ||||
| #define HAVE_ATOF 1 | ||||
| #define HAVE_STRCMP 1 | ||||
| #define HAVE_STRNCMP 1 | ||||
| #define HAVE_STRCASECMP 1 | ||||
| #define HAVE_STRNCASECMP 1 | ||||
| #define HAVE_VSSCANF 1 | ||||
| #define HAVE_VSNPRINTF 1 | ||||
| #define HAVE_M_PI 1 | ||||
| #define HAVE_CEIL 1 | ||||
| #define HAVE_COPYSIGN 1 | ||||
| #define HAVE_COS 1 | ||||
| #define HAVE_COSF 1 | ||||
| #define HAVE_FABS 1 | ||||
| #define HAVE_FLOOR 1 | ||||
| #define HAVE_LOG 1 | ||||
| #define HAVE_SCALBN 1 | ||||
| #define HAVE_SIN 1 | ||||
| #define HAVE_SINF 1 | ||||
| #define HAVE_SQRT 1 | ||||
| #define HAVE_SQRTF 1 | ||||
| #define HAVE_TAN 1 | ||||
| #define HAVE_TANF 1 | ||||
| #define HAVE_SIGACTION 1 | ||||
| #define HAVE_SETJMP 1 | ||||
| #define HAVE_NANOSLEEP 1 | ||||
|  | ||||
| #define SDL_AUDIO_DRIVER_DUMMY 1 | ||||
| #define SDL_AUDIO_DRIVER_OSS 1 | ||||
|  | ||||
| #define SDL_INPUT_LINUXEV 1 | ||||
| #define SDL_INPUT_TSLIB 1 | ||||
| #define SDL_JOYSTICK_LINUX 1 | ||||
| #define SDL_HAPTIC_LINUX 1 | ||||
|  | ||||
| #define SDL_LOADSO_DLOPEN 1 | ||||
|  | ||||
| #define SDL_THREAD_PTHREAD 1 | ||||
| #define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP 1 | ||||
|  | ||||
| #define SDL_TIMER_UNIX 1 | ||||
| #define SDL_FILESYSTEM_UNIX 1 | ||||
|  | ||||
| #define SDL_VIDEO_DRIVER_DUMMY 1 | ||||
| #define SDL_VIDEO_DRIVER_X11 1 | ||||
| #define SDL_VIDEO_DRIVER_PANDORA 1 | ||||
| #define SDL_VIDEO_RENDER_OGL_ES 1 | ||||
| #define SDL_VIDEO_OPENGL_ES 1 | ||||
|  | ||||
| #endif /* _SDL_config_h */ | ||||
| @@ -0,0 +1,143 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_config_psp_h | ||||
| #define _SDL_config_psp_h | ||||
|  | ||||
| #include "SDL_platform.h" | ||||
|  | ||||
|  | ||||
|  | ||||
| #ifdef __GNUC__ | ||||
| #define HAVE_GCC_SYNC_LOCK_TEST_AND_SET 1 | ||||
| #endif | ||||
|  | ||||
| #define HAVE_GCC_ATOMICS    1 | ||||
|  | ||||
| #define HAVE_ALLOCA_H       1 | ||||
| #define HAVE_SYS_TYPES_H    1 | ||||
| #define HAVE_STDIO_H    1 | ||||
| #define STDC_HEADERS    1 | ||||
| #define HAVE_STRING_H   1 | ||||
| #define HAVE_INTTYPES_H 1 | ||||
| #define HAVE_STDINT_H   1 | ||||
| #define HAVE_CTYPE_H    1 | ||||
| #define HAVE_MATH_H 1 | ||||
| #define HAVE_SIGNAL_H   1 | ||||
|  | ||||
| /* C library functions */ | ||||
| #define HAVE_MALLOC 1 | ||||
| #define HAVE_CALLOC 1 | ||||
| #define HAVE_REALLOC    1 | ||||
| #define HAVE_FREE   1 | ||||
| #define HAVE_ALLOCA 1 | ||||
| #define HAVE_GETENV 1 | ||||
| #define HAVE_SETENV 1 | ||||
| #define HAVE_PUTENV 1 | ||||
| #define HAVE_SETENV 1 | ||||
| #define HAVE_UNSETENV   1 | ||||
| #define HAVE_QSORT  1 | ||||
| #define HAVE_ABS    1 | ||||
| #define HAVE_BCOPY  1 | ||||
| #define HAVE_MEMSET 1 | ||||
| #define HAVE_MEMCPY 1 | ||||
| #define HAVE_MEMMOVE    1 | ||||
| #define HAVE_MEMCMP 1 | ||||
| #define HAVE_STRLEN 1 | ||||
| #define HAVE_STRLCPY    1 | ||||
| #define HAVE_STRLCAT    1 | ||||
| #define HAVE_STRDUP 1 | ||||
| #define HAVE_STRCHR 1 | ||||
| #define HAVE_STRRCHR    1 | ||||
| #define HAVE_STRSTR 1 | ||||
| #define HAVE_STRTOL 1 | ||||
| #define HAVE_STRTOUL    1 | ||||
| #define HAVE_STRTOLL    1 | ||||
| #define HAVE_STRTOULL   1 | ||||
| #define HAVE_STRTOD 1 | ||||
| #define HAVE_ATOI   1 | ||||
| #define HAVE_ATOF   1 | ||||
| #define HAVE_STRCMP 1 | ||||
| #define HAVE_STRNCMP    1 | ||||
| #define HAVE_STRCASECMP 1 | ||||
| #define HAVE_STRNCASECMP 1 | ||||
| #define HAVE_VSSCANF 1 | ||||
| #define HAVE_VSNPRINTF  1 | ||||
| #define HAVE_M_PI   1 | ||||
| #define HAVE_ATAN   1 | ||||
| #define HAVE_ATAN2  1 | ||||
| #define HAVE_ACOS  1 | ||||
| #define HAVE_ASIN  1 | ||||
| #define HAVE_CEIL   1 | ||||
| #define HAVE_COPYSIGN   1 | ||||
| #define HAVE_COS    1 | ||||
| #define HAVE_COSF   1 | ||||
| #define HAVE_FABS   1 | ||||
| #define HAVE_FLOOR  1 | ||||
| #define HAVE_LOG    1 | ||||
| #define HAVE_POW    1 | ||||
| #define HAVE_SCALBN 1 | ||||
| #define HAVE_SIN    1 | ||||
| #define HAVE_SINF   1 | ||||
| #define HAVE_SQRT   1 | ||||
| #define HAVE_SQRTF  1 | ||||
| #define HAVE_TAN    1 | ||||
| #define HAVE_TANF   1 | ||||
| #define HAVE_SETJMP 1 | ||||
| #define HAVE_NANOSLEEP  1 | ||||
| /* #define HAVE_SYSCONF  1 */ | ||||
| /* #define HAVE_SIGACTION    1 */ | ||||
|  | ||||
|  | ||||
| /* PSP isn't that sophisticated */ | ||||
| #define LACKS_SYS_MMAN_H 1 | ||||
|  | ||||
| /* Enable the stub thread support (src/thread/psp/\*.c) */ | ||||
| #define SDL_THREAD_PSP  1 | ||||
|  | ||||
| /* Enable the stub timer support (src/timer/psp/\*.c) */ | ||||
| #define SDL_TIMERS_PSP  1 | ||||
|  | ||||
| /* Enable the stub joystick driver (src/joystick/psp/\*.c) */ | ||||
| #define SDL_JOYSTICK_PSP        1 | ||||
|  | ||||
| /* Enable the stub audio driver (src/audio/psp/\*.c) */ | ||||
| #define SDL_AUDIO_DRIVER_PSP    1 | ||||
|  | ||||
| /* PSP video dirver */ | ||||
| #define SDL_VIDEO_DRIVER_PSP   1 | ||||
|  | ||||
| /* PSP render dirver */ | ||||
| #define SDL_VIDEO_RENDER_PSP   1 | ||||
|  | ||||
| #define SDL_POWER_PSP          1 | ||||
|  | ||||
| /* !!! FIXME: what does PSP do for filesystem stuff? */ | ||||
| #define SDL_FILESYSTEM_DUMMY   1 | ||||
|  | ||||
| /* PSP doesn't have haptic device (src/haptic/dummy/\*.c) */ | ||||
| #define SDL_HAPTIC_DISABLED    1 | ||||
|  | ||||
| /* PSP can't load shared object (src/loadso/dummy/\*.c) */ | ||||
| #define SDL_LOADSO_DISABLED    1 | ||||
|  | ||||
|  | ||||
| #endif /* _SDL_config_psp_h */ | ||||
| @@ -0,0 +1,221 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_config_windows_h | ||||
| #define _SDL_config_windows_h | ||||
|  | ||||
| #include "SDL_platform.h" | ||||
|  | ||||
| /* This is a set of defines to configure the SDL features */ | ||||
|  | ||||
| #if !defined(_STDINT_H_) && (!defined(HAVE_STDINT_H) || !_HAVE_STDINT_H) | ||||
| #if defined(__GNUC__) || defined(__DMC__) || defined(__WATCOMC__) | ||||
| #define HAVE_STDINT_H   1 | ||||
| #elif defined(_MSC_VER) | ||||
| typedef signed __int8 int8_t; | ||||
| typedef unsigned __int8 uint8_t; | ||||
| typedef signed __int16 int16_t; | ||||
| typedef unsigned __int16 uint16_t; | ||||
| typedef signed __int32 int32_t; | ||||
| typedef unsigned __int32 uint32_t; | ||||
| typedef signed __int64 int64_t; | ||||
| typedef unsigned __int64 uint64_t; | ||||
| #ifndef _UINTPTR_T_DEFINED | ||||
| #ifdef  _WIN64 | ||||
| typedef unsigned __int64 uintptr_t; | ||||
| #else | ||||
| typedef unsigned int uintptr_t; | ||||
| #endif | ||||
| #define _UINTPTR_T_DEFINED | ||||
| #endif | ||||
| /* Older Visual C++ headers don't have the Win64-compatible typedefs... */ | ||||
| #if ((_MSC_VER <= 1200) && (!defined(DWORD_PTR))) | ||||
| #define DWORD_PTR DWORD | ||||
| #endif | ||||
| #if ((_MSC_VER <= 1200) && (!defined(LONG_PTR))) | ||||
| #define LONG_PTR LONG | ||||
| #endif | ||||
| #else /* !__GNUC__ && !_MSC_VER */ | ||||
| typedef signed char int8_t; | ||||
| typedef unsigned char uint8_t; | ||||
| typedef signed short int16_t; | ||||
| typedef unsigned short uint16_t; | ||||
| typedef signed int int32_t; | ||||
| typedef unsigned int uint32_t; | ||||
| typedef signed long long int64_t; | ||||
| typedef unsigned long long uint64_t; | ||||
| #ifndef _SIZE_T_DEFINED_ | ||||
| #define _SIZE_T_DEFINED_ | ||||
| typedef unsigned int size_t; | ||||
| #endif | ||||
| typedef unsigned int uintptr_t; | ||||
| #endif /* __GNUC__ || _MSC_VER */ | ||||
| #endif /* !_STDINT_H_ && !HAVE_STDINT_H */ | ||||
|  | ||||
| #ifdef _WIN64 | ||||
| # define SIZEOF_VOIDP 8 | ||||
| #else | ||||
| # define SIZEOF_VOIDP 4 | ||||
| #endif | ||||
|  | ||||
| #define HAVE_DDRAW_H 1 | ||||
| #define HAVE_DINPUT_H 1 | ||||
| #define HAVE_DSOUND_H 1 | ||||
| #define HAVE_DXGI_H 1 | ||||
| #define HAVE_XINPUT_H 1 | ||||
|  | ||||
| /* This is disabled by default to avoid C runtime dependencies and manifest requirements */ | ||||
| #ifdef HAVE_LIBC | ||||
| /* Useful headers */ | ||||
| #define HAVE_STDIO_H 1 | ||||
| #define STDC_HEADERS 1 | ||||
| #define HAVE_STRING_H 1 | ||||
| #define HAVE_CTYPE_H 1 | ||||
| #define HAVE_MATH_H 1 | ||||
| #define HAVE_SIGNAL_H 1 | ||||
|  | ||||
| /* C library functions */ | ||||
| #define HAVE_MALLOC 1 | ||||
| #define HAVE_CALLOC 1 | ||||
| #define HAVE_REALLOC 1 | ||||
| #define HAVE_FREE 1 | ||||
| #define HAVE_ALLOCA 1 | ||||
| #define HAVE_QSORT 1 | ||||
| #define HAVE_ABS 1 | ||||
| #define HAVE_MEMSET 1 | ||||
| #define HAVE_MEMCPY 1 | ||||
| #define HAVE_MEMMOVE 1 | ||||
| #define HAVE_MEMCMP 1 | ||||
| #define HAVE_STRLEN 1 | ||||
| #define HAVE__STRREV 1 | ||||
| #define HAVE__STRUPR 1 | ||||
| #define HAVE__STRLWR 1 | ||||
| #define HAVE_STRCHR 1 | ||||
| #define HAVE_STRRCHR 1 | ||||
| #define HAVE_STRSTR 1 | ||||
| #define HAVE__LTOA 1 | ||||
| #define HAVE__ULTOA 1 | ||||
| #define HAVE_STRTOL 1 | ||||
| #define HAVE_STRTOUL 1 | ||||
| #define HAVE_STRTOD 1 | ||||
| #define HAVE_ATOI 1 | ||||
| #define HAVE_ATOF 1 | ||||
| #define HAVE_STRCMP 1 | ||||
| #define HAVE_STRNCMP 1 | ||||
| #define HAVE__STRICMP 1 | ||||
| #define HAVE__STRNICMP 1 | ||||
| #define HAVE_ATAN 1 | ||||
| #define HAVE_ATAN2 1 | ||||
| #define HAVE_ACOS  1 | ||||
| #define HAVE_ASIN  1 | ||||
| #define HAVE_CEIL 1 | ||||
| #define HAVE_COS 1 | ||||
| #define HAVE_COSF 1 | ||||
| #define HAVE_FABS 1 | ||||
| #define HAVE_FLOOR 1 | ||||
| #define HAVE_LOG 1 | ||||
| #define HAVE_POW 1 | ||||
| #define HAVE_SIN 1 | ||||
| #define HAVE_SINF 1 | ||||
| #define HAVE_SQRT 1 | ||||
| #define HAVE_SQRTF 1 | ||||
| #define HAVE_TAN 1 | ||||
| #define HAVE_TANF 1 | ||||
| #if _MSC_VER >= 1800 | ||||
| #define HAVE_STRTOLL 1 | ||||
| #define HAVE_VSSCANF 1 | ||||
| #define HAVE_COPYSIGN 1 | ||||
| #define HAVE_SCALBN 1 | ||||
| #endif | ||||
| #if !defined(_MSC_VER) || defined(_USE_MATH_DEFINES) | ||||
| #define HAVE_M_PI 1 | ||||
| #endif | ||||
| #else | ||||
| #define HAVE_STDARG_H   1 | ||||
| #define HAVE_STDDEF_H   1 | ||||
| #endif | ||||
|  | ||||
| /* Enable various audio drivers */ | ||||
| #define SDL_AUDIO_DRIVER_DSOUND 1 | ||||
| #define SDL_AUDIO_DRIVER_XAUDIO2    1 | ||||
| #define SDL_AUDIO_DRIVER_WINMM  1 | ||||
| #define SDL_AUDIO_DRIVER_DISK   1 | ||||
| #define SDL_AUDIO_DRIVER_DUMMY  1 | ||||
|  | ||||
| /* Enable various input drivers */ | ||||
| #define SDL_JOYSTICK_DINPUT 1 | ||||
| #define SDL_JOYSTICK_XINPUT 1 | ||||
| #define SDL_HAPTIC_DINPUT   1 | ||||
| #define SDL_HAPTIC_XINPUT   1 | ||||
|  | ||||
| /* Enable various shared object loading systems */ | ||||
| #define SDL_LOADSO_WINDOWS  1 | ||||
|  | ||||
| /* Enable various threading systems */ | ||||
| #define SDL_THREAD_WINDOWS  1 | ||||
|  | ||||
| /* Enable various timer systems */ | ||||
| #define SDL_TIMER_WINDOWS   1 | ||||
|  | ||||
| /* Enable various video drivers */ | ||||
| #define SDL_VIDEO_DRIVER_DUMMY  1 | ||||
| #define SDL_VIDEO_DRIVER_WINDOWS    1 | ||||
|  | ||||
| #ifndef SDL_VIDEO_RENDER_D3D | ||||
| #define SDL_VIDEO_RENDER_D3D    1 | ||||
| #endif | ||||
| #ifndef SDL_VIDEO_RENDER_D3D11 | ||||
| #define SDL_VIDEO_RENDER_D3D11	0 | ||||
| #endif | ||||
|  | ||||
| /* Enable OpenGL support */ | ||||
| #ifndef SDL_VIDEO_OPENGL | ||||
| #define SDL_VIDEO_OPENGL    1 | ||||
| #endif | ||||
| #ifndef SDL_VIDEO_OPENGL_WGL | ||||
| #define SDL_VIDEO_OPENGL_WGL    1 | ||||
| #endif | ||||
| #ifndef SDL_VIDEO_RENDER_OGL | ||||
| #define SDL_VIDEO_RENDER_OGL    1 | ||||
| #endif | ||||
| #ifndef SDL_VIDEO_RENDER_OGL_ES2 | ||||
| #define SDL_VIDEO_RENDER_OGL_ES2    1 | ||||
| #endif | ||||
| #ifndef SDL_VIDEO_OPENGL_ES2 | ||||
| #define SDL_VIDEO_OPENGL_ES2    1 | ||||
| #endif | ||||
| #ifndef SDL_VIDEO_OPENGL_EGL | ||||
| #define SDL_VIDEO_OPENGL_EGL    1 | ||||
| #endif | ||||
|  | ||||
|  | ||||
| /* Enable system power support */ | ||||
| #define SDL_POWER_WINDOWS 1 | ||||
|  | ||||
| /* Enable filesystem support */ | ||||
| #define SDL_FILESYSTEM_WINDOWS  1 | ||||
|  | ||||
| /* Enable assembly routines (Win64 doesn't have inline asm) */ | ||||
| #ifndef _WIN64 | ||||
| #define SDL_ASSEMBLY_ROUTINES   1 | ||||
| #endif | ||||
|  | ||||
| #endif /* _SDL_config_windows_h */ | ||||
| @@ -0,0 +1,214 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_config_winrt_h | ||||
| #define _SDL_config_winrt_h | ||||
|  | ||||
| #include "SDL_platform.h" | ||||
|  | ||||
| /* Make sure the Windows SDK's NTDDI_VERSION macro gets defined.  This is used | ||||
|    by SDL to determine which version of the Windows SDK is being used. | ||||
| */ | ||||
| #include <sdkddkver.h> | ||||
|  | ||||
| /* Define possibly-undefined NTDDI values (used when compiling SDL against | ||||
|    older versions of the Windows SDK. | ||||
| */ | ||||
| #ifndef NTDDI_WINBLUE | ||||
| #define NTDDI_WINBLUE 0x06030000 | ||||
| #endif | ||||
| #ifndef NTDDI_WIN10 | ||||
| #define NTDDI_WIN10 0x0A000000 | ||||
| #endif | ||||
|  | ||||
| /* This is a set of defines to configure the SDL features */ | ||||
|  | ||||
| #if !defined(_STDINT_H_) && (!defined(HAVE_STDINT_H) || !_HAVE_STDINT_H) | ||||
| #if defined(__GNUC__) || defined(__DMC__) || defined(__WATCOMC__) | ||||
| #define HAVE_STDINT_H	1 | ||||
| #elif defined(_MSC_VER) | ||||
| typedef signed __int8 int8_t; | ||||
| typedef unsigned __int8 uint8_t; | ||||
| typedef signed __int16 int16_t; | ||||
| typedef unsigned __int16 uint16_t; | ||||
| typedef signed __int32 int32_t; | ||||
| typedef unsigned __int32 uint32_t; | ||||
| typedef signed __int64 int64_t; | ||||
| typedef unsigned __int64 uint64_t; | ||||
| #ifndef _UINTPTR_T_DEFINED | ||||
| #ifdef  _WIN64 | ||||
| typedef unsigned __int64 uintptr_t; | ||||
| #else | ||||
| typedef unsigned int uintptr_t; | ||||
| #endif | ||||
| #define _UINTPTR_T_DEFINED | ||||
| #endif | ||||
| /* Older Visual C++ headers don't have the Win64-compatible typedefs... */ | ||||
| #if ((_MSC_VER <= 1200) && (!defined(DWORD_PTR))) | ||||
| #define DWORD_PTR DWORD | ||||
| #endif | ||||
| #if ((_MSC_VER <= 1200) && (!defined(LONG_PTR))) | ||||
| #define LONG_PTR LONG | ||||
| #endif | ||||
| #else /* !__GNUC__ && !_MSC_VER */ | ||||
| typedef signed char int8_t; | ||||
| typedef unsigned char uint8_t; | ||||
| typedef signed short int16_t; | ||||
| typedef unsigned short uint16_t; | ||||
| typedef signed int int32_t; | ||||
| typedef unsigned int uint32_t; | ||||
| typedef signed long long int64_t; | ||||
| typedef unsigned long long uint64_t; | ||||
| #ifndef _SIZE_T_DEFINED_ | ||||
| #define _SIZE_T_DEFINED_ | ||||
| typedef unsigned int size_t; | ||||
| #endif | ||||
| typedef unsigned int uintptr_t; | ||||
| #endif /* __GNUC__ || _MSC_VER */ | ||||
| #endif /* !_STDINT_H_ && !HAVE_STDINT_H */ | ||||
|  | ||||
| #ifdef _WIN64 | ||||
| # define SIZEOF_VOIDP 8 | ||||
| #else | ||||
| # define SIZEOF_VOIDP 4 | ||||
| #endif | ||||
|  | ||||
| /* Useful headers */ | ||||
| #define HAVE_DXGI_H 1 | ||||
| #if WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP | ||||
| #define HAVE_XINPUT_H 1 | ||||
| #endif | ||||
| #define HAVE_LIBC 1 | ||||
| #define HAVE_STDIO_H 1 | ||||
| #define STDC_HEADERS 1 | ||||
| #define HAVE_STRING_H 1 | ||||
| #define HAVE_CTYPE_H 1 | ||||
| #define HAVE_MATH_H 1 | ||||
| #define HAVE_FLOAT_H 1 | ||||
| #define HAVE_SIGNAL_H 1 | ||||
|  | ||||
| /* C library functions */ | ||||
| #define HAVE_MALLOC 1 | ||||
| #define HAVE_CALLOC 1 | ||||
| #define HAVE_REALLOC 1 | ||||
| #define HAVE_FREE 1 | ||||
| #define HAVE_ALLOCA 1 | ||||
| #define HAVE_QSORT 1 | ||||
| #define HAVE_ABS 1 | ||||
| #define HAVE_MEMSET 1 | ||||
| #define HAVE_MEMCPY 1 | ||||
| #define HAVE_MEMMOVE 1 | ||||
| #define HAVE_MEMCMP 1 | ||||
| #define HAVE_STRLEN 1 | ||||
| #define HAVE__STRREV 1 | ||||
| #define HAVE__STRUPR 1 | ||||
| //#define HAVE__STRLWR 1	// TODO, WinRT: consider using _strlwr_s instead | ||||
| #define HAVE_STRCHR 1 | ||||
| #define HAVE_STRRCHR 1 | ||||
| #define HAVE_STRSTR 1 | ||||
| //#define HAVE_ITOA 1   // TODO, WinRT: consider using _itoa_s instead | ||||
| //#define HAVE__LTOA 1	// TODO, WinRT: consider using _ltoa_s instead | ||||
| //#define HAVE__ULTOA 1	// TODO, WinRT: consider using _ultoa_s instead | ||||
| #define HAVE_STRTOL 1 | ||||
| #define HAVE_STRTOUL 1 | ||||
| //#define HAVE_STRTOLL 1 | ||||
| #define HAVE_STRTOD 1 | ||||
| #define HAVE_ATOI 1 | ||||
| #define HAVE_ATOF 1 | ||||
| #define HAVE_STRCMP 1 | ||||
| #define HAVE_STRNCMP 1 | ||||
| #define HAVE__STRICMP 1 | ||||
| #define HAVE__STRNICMP 1 | ||||
| #define HAVE_VSNPRINTF 1 | ||||
| //#define HAVE_SSCANF 1	// TODO, WinRT: consider using sscanf_s instead | ||||
| #define HAVE_M_PI 1 | ||||
| #define HAVE_ATAN 1 | ||||
| #define HAVE_ATAN2 1 | ||||
| #define HAVE_CEIL 1 | ||||
| #define HAVE__COPYSIGN 1 | ||||
| #define HAVE_COS 1 | ||||
| #define HAVE_COSF 1 | ||||
| #define HAVE_FABS 1 | ||||
| #define HAVE_FLOOR 1 | ||||
| #define HAVE_LOG 1 | ||||
| #define HAVE_POW 1 | ||||
| //#define HAVE_SCALBN 1 | ||||
| #define HAVE__SCALB 1 | ||||
| #define HAVE_SIN 1 | ||||
| #define HAVE_SINF 1 | ||||
| #define HAVE_SQRT 1 | ||||
| #define HAVE_SQRTF 1 | ||||
| #define HAVE_TAN 1 | ||||
| #define HAVE_TANF 1 | ||||
| #define HAVE__FSEEKI64 1 | ||||
|  | ||||
| /* Enable various audio drivers */ | ||||
| #define SDL_AUDIO_DRIVER_XAUDIO2	1 | ||||
| #define SDL_AUDIO_DRIVER_DISK	1 | ||||
| #define SDL_AUDIO_DRIVER_DUMMY	1 | ||||
|  | ||||
| /* Enable various input drivers */ | ||||
| #if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP | ||||
| #define SDL_JOYSTICK_DISABLED 1 | ||||
| #define SDL_HAPTIC_DISABLED	1 | ||||
| #else | ||||
| #define SDL_JOYSTICK_XINPUT 1 | ||||
| #define SDL_HAPTIC_XINPUT   1 | ||||
| #endif | ||||
|  | ||||
| /* Enable various shared object loading systems */ | ||||
| #define SDL_LOADSO_WINDOWS	1 | ||||
|  | ||||
| /* Enable various threading systems */ | ||||
| #if (NTDDI_VERSION >= NTDDI_WINBLUE) | ||||
| #define SDL_THREAD_WINDOWS  1 | ||||
| #else | ||||
| /* WinRT on Windows 8.0 and Windows Phone 8.0 don't support CreateThread() */ | ||||
| #define SDL_THREAD_STDCPP   1 | ||||
| #endif | ||||
|  | ||||
| /* Enable various timer systems */ | ||||
| #define SDL_TIMER_WINDOWS	1 | ||||
|  | ||||
| /* Enable various video drivers */ | ||||
| #define SDL_VIDEO_DRIVER_WINRT	1 | ||||
| #define SDL_VIDEO_DRIVER_DUMMY  1 | ||||
|  | ||||
| /* Enable OpenGL ES 2.0 (via a modified ANGLE library) */ | ||||
| #define SDL_VIDEO_OPENGL_ES2 1 | ||||
| #define SDL_VIDEO_OPENGL_EGL 1 | ||||
|  | ||||
| /* Enable appropriate renderer(s) */ | ||||
| #define SDL_VIDEO_RENDER_D3D11  1 | ||||
|  | ||||
| #if SDL_VIDEO_OPENGL_ES2 | ||||
| #define SDL_VIDEO_RENDER_OGL_ES2 1 | ||||
| #endif | ||||
|  | ||||
| /* Enable system power support */ | ||||
| #define SDL_POWER_WINRT 1 | ||||
|  | ||||
| /* Enable assembly routines (Win64 doesn't have inline asm) */ | ||||
| #ifndef _WIN64 | ||||
| #define SDL_ASSEMBLY_ROUTINES	1 | ||||
| #endif | ||||
|  | ||||
| #endif /* _SDL_config_winrt_h */ | ||||
| @@ -0,0 +1,120 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_config_h | ||||
| #define _SDL_config_h | ||||
|  | ||||
| /* This is a set of defines to configure the SDL features */ | ||||
|  | ||||
| /* General platform specific identifiers */ | ||||
| #include "SDL_platform.h" | ||||
|  | ||||
| #define SDL_BYTEORDER 1234 | ||||
|  | ||||
| #define HAVE_ALLOCA_H 1 | ||||
| #define HAVE_SYS_TYPES_H 1 | ||||
| #define HAVE_STDIO_H 1 | ||||
| #define STDC_HEADERS 1 | ||||
| #define HAVE_STDLIB_H 1 | ||||
| #define HAVE_STDARG_H 1 | ||||
| #define HAVE_MALLOC_H 1 | ||||
| #define HAVE_MEMORY_H 1 | ||||
| #define HAVE_STRING_H 1 | ||||
| #define HAVE_STRINGS_H 1 | ||||
| #define HAVE_INTTYPES_H 1 | ||||
| #define HAVE_STDINT_H 1 | ||||
| #define HAVE_CTYPE_H 1 | ||||
| #define HAVE_MATH_H 1 | ||||
| #define HAVE_ICONV_H 1 | ||||
| #define HAVE_SIGNAL_H 1 | ||||
| #define HAVE_MALLOC 1 | ||||
| #define HAVE_CALLOC 1 | ||||
| #define HAVE_REALLOC 1 | ||||
| #define HAVE_FREE 1 | ||||
| #define HAVE_ALLOCA 1 | ||||
| #define HAVE_GETENV 1 | ||||
| #define HAVE_SETENV 1 | ||||
| #define HAVE_PUTENV 1 | ||||
| #define HAVE_UNSETENV 1 | ||||
| #define HAVE_QSORT 1 | ||||
| #define HAVE_ABS 1 | ||||
| #define HAVE_BCOPY 1 | ||||
| #define HAVE_MEMSET 1 | ||||
| #define HAVE_MEMCPY 1 | ||||
| #define HAVE_MEMMOVE 1 | ||||
| #define HAVE_STRLEN 1 | ||||
| #define HAVE_STRDUP 1 | ||||
| #define HAVE_STRCHR 1 | ||||
| #define HAVE_STRRCHR 1 | ||||
| #define HAVE_STRSTR 1 | ||||
| #define HAVE_STRTOL 1 | ||||
| #define HAVE_STRTOUL 1 | ||||
| #define HAVE_STRTOLL 1 | ||||
| #define HAVE_STRTOULL 1 | ||||
| #define HAVE_ATOI 1 | ||||
| #define HAVE_ATOF 1 | ||||
| #define HAVE_STRCMP 1 | ||||
| #define HAVE_STRNCMP 1 | ||||
| #define HAVE_STRCASECMP 1 | ||||
| #define HAVE_STRNCASECMP 1 | ||||
| #define HAVE_VSSCANF 1 | ||||
| #define HAVE_VSNPRINTF 1 | ||||
| #define HAVE_M_PI 1 | ||||
| #define HAVE_CEIL 1 | ||||
| #define HAVE_COPYSIGN 1 | ||||
| #define HAVE_COS 1 | ||||
| #define HAVE_COSF 1 | ||||
| #define HAVE_FABS 1 | ||||
| #define HAVE_FLOOR 1 | ||||
| #define HAVE_LOG 1 | ||||
| #define HAVE_SCALBN 1 | ||||
| #define HAVE_SIN 1 | ||||
| #define HAVE_SINF 1 | ||||
| #define HAVE_SQRT 1 | ||||
| #define HAVE_SQRTF 1 | ||||
| #define HAVE_TAN 1 | ||||
| #define HAVE_TANF 1 | ||||
| #define HAVE_SIGACTION 1 | ||||
| #define HAVE_SETJMP 1 | ||||
| #define HAVE_NANOSLEEP 1 | ||||
| #define HAVE_POW 1 | ||||
|  | ||||
| #define SDL_AUDIO_DRIVER_DUMMY 1 | ||||
| #define SDL_AUDIO_DRIVER_OSS 1 | ||||
|  | ||||
| #define SDL_INPUT_LINUXEV 1 | ||||
| #define SDL_INPUT_TSLIB 1 | ||||
| #define SDL_JOYSTICK_LINUX 1 | ||||
| #define SDL_HAPTIC_LINUX 1 | ||||
|  | ||||
| #define SDL_LOADSO_DLOPEN 1 | ||||
|  | ||||
| #define SDL_THREAD_PTHREAD 1 | ||||
| #define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP 1 | ||||
|  | ||||
| #define SDL_TIMER_UNIX 1 | ||||
|  | ||||
| #define SDL_VIDEO_DRIVER_DUMMY 1 | ||||
| #define SDL_VIDEO_DRIVER_PANDORA 1 | ||||
| #define SDL_VIDEO_RENDER_OGL_ES 1 | ||||
| #define SDL_VIDEO_OPENGL_ES 1 | ||||
|  | ||||
| #endif /* _SDL_config_h */ | ||||
| @@ -0,0 +1,20 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
| @@ -0,0 +1,161 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_cpuinfo.h | ||||
|  * | ||||
|  *  CPU feature detection for SDL. | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_cpuinfo_h | ||||
| #define _SDL_cpuinfo_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
|  | ||||
| /* Need to do this here because intrin.h has C++ code in it */ | ||||
| /* Visual Studio 2005 has a bug where intrin.h conflicts with winnt.h */ | ||||
| #if defined(_MSC_VER) && (_MSC_VER >= 1500) && (defined(_M_IX86) || defined(_M_X64)) | ||||
| #include <intrin.h> | ||||
| #ifndef _WIN64 | ||||
| #define __MMX__ | ||||
| #define __3dNOW__ | ||||
| #endif | ||||
| #define __SSE__ | ||||
| #define __SSE2__ | ||||
| #elif defined(__MINGW64_VERSION_MAJOR) | ||||
| #include <intrin.h> | ||||
| #else | ||||
| #ifdef __ALTIVEC__ | ||||
| #if HAVE_ALTIVEC_H && !defined(__APPLE_ALTIVEC__) | ||||
| #include <altivec.h> | ||||
| #undef pixel | ||||
| #endif | ||||
| #endif | ||||
| #ifdef __MMX__ | ||||
| #include <mmintrin.h> | ||||
| #endif | ||||
| #ifdef __3dNOW__ | ||||
| #include <mm3dnow.h> | ||||
| #endif | ||||
| #ifdef __SSE__ | ||||
| #include <xmmintrin.h> | ||||
| #endif | ||||
| #ifdef __SSE2__ | ||||
| #include <emmintrin.h> | ||||
| #endif | ||||
| #endif | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /* This is a guess for the cacheline size used for padding. | ||||
|  * Most x86 processors have a 64 byte cache line. | ||||
|  * The 64-bit PowerPC processors have a 128 byte cache line. | ||||
|  * We'll use the larger value to be generally safe. | ||||
|  */ | ||||
| #define SDL_CACHELINE_SIZE  128 | ||||
|  | ||||
| /** | ||||
|  *  This function returns the number of CPU cores available. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_GetCPUCount(void); | ||||
|  | ||||
| /** | ||||
|  *  This function returns the L1 cache line size of the CPU | ||||
|  * | ||||
|  *  This is useful for determining multi-threaded structure padding | ||||
|  *  or SIMD prefetch sizes. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_GetCPUCacheLineSize(void); | ||||
|  | ||||
| /** | ||||
|  *  This function returns true if the CPU has the RDTSC instruction. | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_HasRDTSC(void); | ||||
|  | ||||
| /** | ||||
|  *  This function returns true if the CPU has AltiVec features. | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_HasAltiVec(void); | ||||
|  | ||||
| /** | ||||
|  *  This function returns true if the CPU has MMX features. | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_HasMMX(void); | ||||
|  | ||||
| /** | ||||
|  *  This function returns true if the CPU has 3DNow! features. | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_Has3DNow(void); | ||||
|  | ||||
| /** | ||||
|  *  This function returns true if the CPU has SSE features. | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE(void); | ||||
|  | ||||
| /** | ||||
|  *  This function returns true if the CPU has SSE2 features. | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE2(void); | ||||
|  | ||||
| /** | ||||
|  *  This function returns true if the CPU has SSE3 features. | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE3(void); | ||||
|  | ||||
| /** | ||||
|  *  This function returns true if the CPU has SSE4.1 features. | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE41(void); | ||||
|  | ||||
| /** | ||||
|  *  This function returns true if the CPU has SSE4.2 features. | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE42(void); | ||||
|  | ||||
| /** | ||||
|  *  This function returns true if the CPU has AVX features. | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX(void); | ||||
|  | ||||
| /** | ||||
|  *  This function returns true if the CPU has AVX2 features. | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX2(void); | ||||
|  | ||||
| /** | ||||
|  *  This function returns the amount of RAM configured in the system, in MB. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_GetSystemRAM(void); | ||||
|  | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_cpuinfo_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -0,0 +1,239 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_endian.h | ||||
|  * | ||||
|  *  Functions for reading and writing endian-specific values | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_endian_h | ||||
| #define _SDL_endian_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
|  | ||||
| /** | ||||
|  *  \name The two types of endianness | ||||
|  */ | ||||
| /* @{ */ | ||||
| #define SDL_LIL_ENDIAN  1234 | ||||
| #define SDL_BIG_ENDIAN  4321 | ||||
| /* @} */ | ||||
|  | ||||
| #ifndef SDL_BYTEORDER           /* Not defined in SDL_config.h? */ | ||||
| #ifdef __linux__ | ||||
| #include <endian.h> | ||||
| #define SDL_BYTEORDER  __BYTE_ORDER | ||||
| #else /* __linux__ */ | ||||
| #if defined(__hppa__) || \ | ||||
|     defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \ | ||||
|     (defined(__MIPS__) && defined(__MISPEB__)) || \ | ||||
|     defined(__ppc__) || defined(__POWERPC__) || defined(_M_PPC) || \ | ||||
|     defined(__sparc__) | ||||
| #define SDL_BYTEORDER   SDL_BIG_ENDIAN | ||||
| #else | ||||
| #define SDL_BYTEORDER   SDL_LIL_ENDIAN | ||||
| #endif | ||||
| #endif /* __linux__ */ | ||||
| #endif /* !SDL_BYTEORDER */ | ||||
|  | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_endian.h | ||||
|  */ | ||||
| #if defined(__GNUC__) && defined(__i386__) && \ | ||||
|    !(__GNUC__ == 2 && __GNUC_MINOR__ == 95 /* broken gcc version */) | ||||
| SDL_FORCE_INLINE Uint16 | ||||
| SDL_Swap16(Uint16 x) | ||||
| { | ||||
|   __asm__("xchgb %b0,%h0": "=q"(x):"0"(x)); | ||||
|     return x; | ||||
| } | ||||
| #elif defined(__GNUC__) && defined(__x86_64__) | ||||
| SDL_FORCE_INLINE Uint16 | ||||
| SDL_Swap16(Uint16 x) | ||||
| { | ||||
|   __asm__("xchgb %b0,%h0": "=Q"(x):"0"(x)); | ||||
|     return x; | ||||
| } | ||||
| #elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) | ||||
| SDL_FORCE_INLINE Uint16 | ||||
| SDL_Swap16(Uint16 x) | ||||
| { | ||||
|     int result; | ||||
|  | ||||
|   __asm__("rlwimi %0,%2,8,16,23": "=&r"(result):"0"(x >> 8), "r"(x)); | ||||
|     return (Uint16)result; | ||||
| } | ||||
| #elif defined(__GNUC__) && (defined(__M68000__) || defined(__M68020__)) && !defined(__mcoldfire__) | ||||
| SDL_FORCE_INLINE Uint16 | ||||
| SDL_Swap16(Uint16 x) | ||||
| { | ||||
|   __asm__("rorw #8,%0": "=d"(x): "0"(x):"cc"); | ||||
|     return x; | ||||
| } | ||||
| #else | ||||
| SDL_FORCE_INLINE Uint16 | ||||
| SDL_Swap16(Uint16 x) | ||||
| { | ||||
|     return SDL_static_cast(Uint16, ((x << 8) | (x >> 8))); | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #if defined(__GNUC__) && defined(__i386__) | ||||
| SDL_FORCE_INLINE Uint32 | ||||
| SDL_Swap32(Uint32 x) | ||||
| { | ||||
|   __asm__("bswap %0": "=r"(x):"0"(x)); | ||||
|     return x; | ||||
| } | ||||
| #elif defined(__GNUC__) && defined(__x86_64__) | ||||
| SDL_FORCE_INLINE Uint32 | ||||
| SDL_Swap32(Uint32 x) | ||||
| { | ||||
|   __asm__("bswapl %0": "=r"(x):"0"(x)); | ||||
|     return x; | ||||
| } | ||||
| #elif defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) | ||||
| SDL_FORCE_INLINE Uint32 | ||||
| SDL_Swap32(Uint32 x) | ||||
| { | ||||
|     Uint32 result; | ||||
|  | ||||
|   __asm__("rlwimi %0,%2,24,16,23": "=&r"(result):"0"(x >> 24), "r"(x)); | ||||
|   __asm__("rlwimi %0,%2,8,8,15": "=&r"(result):"0"(result), "r"(x)); | ||||
|   __asm__("rlwimi %0,%2,24,0,7": "=&r"(result):"0"(result), "r"(x)); | ||||
|     return result; | ||||
| } | ||||
| #elif defined(__GNUC__) && (defined(__M68000__) || defined(__M68020__)) && !defined(__mcoldfire__) | ||||
| SDL_FORCE_INLINE Uint32 | ||||
| SDL_Swap32(Uint32 x) | ||||
| { | ||||
|   __asm__("rorw #8,%0\n\tswap %0\n\trorw #8,%0": "=d"(x): "0"(x):"cc"); | ||||
|     return x; | ||||
| } | ||||
| #else | ||||
| SDL_FORCE_INLINE Uint32 | ||||
| SDL_Swap32(Uint32 x) | ||||
| { | ||||
|     return SDL_static_cast(Uint32, ((x << 24) | ((x << 8) & 0x00FF0000) | | ||||
|                                     ((x >> 8) & 0x0000FF00) | (x >> 24))); | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #if defined(__GNUC__) && defined(__i386__) | ||||
| SDL_FORCE_INLINE Uint64 | ||||
| SDL_Swap64(Uint64 x) | ||||
| { | ||||
|     union | ||||
|     { | ||||
|         struct | ||||
|         { | ||||
|             Uint32 a, b; | ||||
|         } s; | ||||
|         Uint64 u; | ||||
|     } v; | ||||
|     v.u = x; | ||||
|   __asm__("bswapl %0 ; bswapl %1 ; xchgl %0,%1": "=r"(v.s.a), "=r"(v.s.b):"0"(v.s.a), | ||||
|             "1"(v.s. | ||||
|                 b)); | ||||
|     return v.u; | ||||
| } | ||||
| #elif defined(__GNUC__) && defined(__x86_64__) | ||||
| SDL_FORCE_INLINE Uint64 | ||||
| SDL_Swap64(Uint64 x) | ||||
| { | ||||
|   __asm__("bswapq %0": "=r"(x):"0"(x)); | ||||
|     return x; | ||||
| } | ||||
| #else | ||||
| SDL_FORCE_INLINE Uint64 | ||||
| SDL_Swap64(Uint64 x) | ||||
| { | ||||
|     Uint32 hi, lo; | ||||
|  | ||||
|     /* Separate into high and low 32-bit values and swap them */ | ||||
|     lo = SDL_static_cast(Uint32, x & 0xFFFFFFFF); | ||||
|     x >>= 32; | ||||
|     hi = SDL_static_cast(Uint32, x & 0xFFFFFFFF); | ||||
|     x = SDL_Swap32(lo); | ||||
|     x <<= 32; | ||||
|     x |= SDL_Swap32(hi); | ||||
|     return (x); | ||||
| } | ||||
| #endif | ||||
|  | ||||
|  | ||||
| SDL_FORCE_INLINE float | ||||
| SDL_SwapFloat(float x) | ||||
| { | ||||
|     union | ||||
|     { | ||||
|         float f; | ||||
|         Uint32 ui32; | ||||
|     } swapper; | ||||
|     swapper.f = x; | ||||
|     swapper.ui32 = SDL_Swap32(swapper.ui32); | ||||
|     return swapper.f; | ||||
| } | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \name Swap to native | ||||
|  *  Byteswap item from the specified endianness to the native endianness. | ||||
|  */ | ||||
| /* @{ */ | ||||
| #if SDL_BYTEORDER == SDL_LIL_ENDIAN | ||||
| #define SDL_SwapLE16(X) (X) | ||||
| #define SDL_SwapLE32(X) (X) | ||||
| #define SDL_SwapLE64(X) (X) | ||||
| #define SDL_SwapFloatLE(X)  (X) | ||||
| #define SDL_SwapBE16(X) SDL_Swap16(X) | ||||
| #define SDL_SwapBE32(X) SDL_Swap32(X) | ||||
| #define SDL_SwapBE64(X) SDL_Swap64(X) | ||||
| #define SDL_SwapFloatBE(X)  SDL_SwapFloat(X) | ||||
| #else | ||||
| #define SDL_SwapLE16(X) SDL_Swap16(X) | ||||
| #define SDL_SwapLE32(X) SDL_Swap32(X) | ||||
| #define SDL_SwapLE64(X) SDL_Swap64(X) | ||||
| #define SDL_SwapFloatLE(X)  SDL_SwapFloat(X) | ||||
| #define SDL_SwapBE16(X) (X) | ||||
| #define SDL_SwapBE32(X) (X) | ||||
| #define SDL_SwapBE64(X) (X) | ||||
| #define SDL_SwapFloatBE(X)  (X) | ||||
| #endif | ||||
| /* @} *//* Swap to native */ | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_endian_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,76 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_error.h | ||||
|  * | ||||
|  *  Simple error message routines for SDL. | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_error_h | ||||
| #define _SDL_error_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /* Public functions */ | ||||
| /* SDL_SetError() unconditionally returns -1. */ | ||||
| extern DECLSPEC int SDLCALL SDL_SetError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); | ||||
| extern DECLSPEC const char *SDLCALL SDL_GetError(void); | ||||
| extern DECLSPEC void SDLCALL SDL_ClearError(void); | ||||
|  | ||||
| /** | ||||
|  *  \name Internal error functions | ||||
|  * | ||||
|  *  \internal | ||||
|  *  Private error reporting function - used internally. | ||||
|  */ | ||||
| /* @{ */ | ||||
| #define SDL_OutOfMemory()   SDL_Error(SDL_ENOMEM) | ||||
| #define SDL_Unsupported()   SDL_Error(SDL_UNSUPPORTED) | ||||
| #define SDL_InvalidParamError(param)    SDL_SetError("Parameter '%s' is invalid", (param)) | ||||
| typedef enum | ||||
| { | ||||
|     SDL_ENOMEM, | ||||
|     SDL_EFREAD, | ||||
|     SDL_EFWRITE, | ||||
|     SDL_EFSEEK, | ||||
|     SDL_UNSUPPORTED, | ||||
|     SDL_LASTERROR | ||||
| } SDL_errorcode; | ||||
| /* SDL_Error() unconditionally returns -1. */ | ||||
| extern DECLSPEC int SDLCALL SDL_Error(SDL_errorcode code); | ||||
| /* @} *//* Internal error functions */ | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_error_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,750 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_events.h | ||||
|  * | ||||
|  *  Include file for SDL event handling. | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_events_h | ||||
| #define _SDL_events_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
| #include "SDL_error.h" | ||||
| #include "SDL_video.h" | ||||
| #include "SDL_keyboard.h" | ||||
| #include "SDL_mouse.h" | ||||
| #include "SDL_joystick.h" | ||||
| #include "SDL_gamecontroller.h" | ||||
| #include "SDL_quit.h" | ||||
| #include "SDL_gesture.h" | ||||
| #include "SDL_touch.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /* General keyboard/mouse state definitions */ | ||||
| #define SDL_RELEASED    0 | ||||
| #define SDL_PRESSED 1 | ||||
|  | ||||
| /** | ||||
|  * \brief The types of events that can be delivered. | ||||
|  */ | ||||
| typedef enum | ||||
| { | ||||
|     SDL_FIRSTEVENT     = 0,     /**< Unused (do not remove) */ | ||||
|  | ||||
|     /* Application events */ | ||||
|     SDL_QUIT           = 0x100, /**< User-requested quit */ | ||||
|  | ||||
|     /* These application events have special meaning on iOS, see README-ios.md for details */ | ||||
|     SDL_APP_TERMINATING,        /**< The application is being terminated by the OS | ||||
|                                      Called on iOS in applicationWillTerminate() | ||||
|                                      Called on Android in onDestroy() | ||||
|                                 */ | ||||
|     SDL_APP_LOWMEMORY,          /**< The application is low on memory, free memory if possible. | ||||
|                                      Called on iOS in applicationDidReceiveMemoryWarning() | ||||
|                                      Called on Android in onLowMemory() | ||||
|                                 */ | ||||
|     SDL_APP_WILLENTERBACKGROUND, /**< The application is about to enter the background | ||||
|                                      Called on iOS in applicationWillResignActive() | ||||
|                                      Called on Android in onPause() | ||||
|                                 */ | ||||
|     SDL_APP_DIDENTERBACKGROUND, /**< The application did enter the background and may not get CPU for some time | ||||
|                                      Called on iOS in applicationDidEnterBackground() | ||||
|                                      Called on Android in onPause() | ||||
|                                 */ | ||||
|     SDL_APP_WILLENTERFOREGROUND, /**< The application is about to enter the foreground | ||||
|                                      Called on iOS in applicationWillEnterForeground() | ||||
|                                      Called on Android in onResume() | ||||
|                                 */ | ||||
|     SDL_APP_DIDENTERFOREGROUND, /**< The application is now interactive | ||||
|                                      Called on iOS in applicationDidBecomeActive() | ||||
|                                      Called on Android in onResume() | ||||
|                                 */ | ||||
|  | ||||
|     /* Window events */ | ||||
|     SDL_WINDOWEVENT    = 0x200, /**< Window state change */ | ||||
|     SDL_SYSWMEVENT,             /**< System specific event */ | ||||
|  | ||||
|     /* Keyboard events */ | ||||
|     SDL_KEYDOWN        = 0x300, /**< Key pressed */ | ||||
|     SDL_KEYUP,                  /**< Key released */ | ||||
|     SDL_TEXTEDITING,            /**< Keyboard text editing (composition) */ | ||||
|     SDL_TEXTINPUT,              /**< Keyboard text input */ | ||||
|     SDL_KEYMAPCHANGED,          /**< Keymap changed due to a system event such as an | ||||
|                                      input language or keyboard layout change. | ||||
|                                 */ | ||||
|  | ||||
|     /* Mouse events */ | ||||
|     SDL_MOUSEMOTION    = 0x400, /**< Mouse moved */ | ||||
|     SDL_MOUSEBUTTONDOWN,        /**< Mouse button pressed */ | ||||
|     SDL_MOUSEBUTTONUP,          /**< Mouse button released */ | ||||
|     SDL_MOUSEWHEEL,             /**< Mouse wheel motion */ | ||||
|  | ||||
|     /* Joystick events */ | ||||
|     SDL_JOYAXISMOTION  = 0x600, /**< Joystick axis motion */ | ||||
|     SDL_JOYBALLMOTION,          /**< Joystick trackball motion */ | ||||
|     SDL_JOYHATMOTION,           /**< Joystick hat position change */ | ||||
|     SDL_JOYBUTTONDOWN,          /**< Joystick button pressed */ | ||||
|     SDL_JOYBUTTONUP,            /**< Joystick button released */ | ||||
|     SDL_JOYDEVICEADDED,         /**< A new joystick has been inserted into the system */ | ||||
|     SDL_JOYDEVICEREMOVED,       /**< An opened joystick has been removed */ | ||||
|  | ||||
|     /* Game controller events */ | ||||
|     SDL_CONTROLLERAXISMOTION  = 0x650, /**< Game controller axis motion */ | ||||
|     SDL_CONTROLLERBUTTONDOWN,          /**< Game controller button pressed */ | ||||
|     SDL_CONTROLLERBUTTONUP,            /**< Game controller button released */ | ||||
|     SDL_CONTROLLERDEVICEADDED,         /**< A new Game controller has been inserted into the system */ | ||||
|     SDL_CONTROLLERDEVICEREMOVED,       /**< An opened Game controller has been removed */ | ||||
|     SDL_CONTROLLERDEVICEREMAPPED,      /**< The controller mapping was updated */ | ||||
|  | ||||
|     /* Touch events */ | ||||
|     SDL_FINGERDOWN      = 0x700, | ||||
|     SDL_FINGERUP, | ||||
|     SDL_FINGERMOTION, | ||||
|  | ||||
|     /* Gesture events */ | ||||
|     SDL_DOLLARGESTURE   = 0x800, | ||||
|     SDL_DOLLARRECORD, | ||||
|     SDL_MULTIGESTURE, | ||||
|  | ||||
|     /* Clipboard events */ | ||||
|     SDL_CLIPBOARDUPDATE = 0x900, /**< The clipboard changed */ | ||||
|  | ||||
|     /* Drag and drop events */ | ||||
|     SDL_DROPFILE        = 0x1000, /**< The system requests a file open */ | ||||
|  | ||||
|     /* Audio hotplug events */ | ||||
|     SDL_AUDIODEVICEADDED = 0x1100, /**< A new audio device is available */ | ||||
|     SDL_AUDIODEVICEREMOVED,        /**< An audio device has been removed. */ | ||||
|  | ||||
|     /* Render events */ | ||||
|     SDL_RENDER_TARGETS_RESET = 0x2000, /**< The render targets have been reset and their contents need to be updated */ | ||||
|     SDL_RENDER_DEVICE_RESET, /**< The device has been reset and all textures need to be recreated */ | ||||
|  | ||||
|     /** Events ::SDL_USEREVENT through ::SDL_LASTEVENT are for your use, | ||||
|      *  and should be allocated with SDL_RegisterEvents() | ||||
|      */ | ||||
|     SDL_USEREVENT    = 0x8000, | ||||
|  | ||||
|     /** | ||||
|      *  This last event is only for bounding internal arrays | ||||
|      */ | ||||
|     SDL_LASTEVENT    = 0xFFFF | ||||
| } SDL_EventType; | ||||
|  | ||||
| /** | ||||
|  *  \brief Fields shared by every event | ||||
|  */ | ||||
| typedef struct SDL_CommonEvent | ||||
| { | ||||
|     Uint32 type; | ||||
|     Uint32 timestamp; | ||||
| } SDL_CommonEvent; | ||||
|  | ||||
| /** | ||||
|  *  \brief Window state change event data (event.window.*) | ||||
|  */ | ||||
| typedef struct SDL_WindowEvent | ||||
| { | ||||
|     Uint32 type;        /**< ::SDL_WINDOWEVENT */ | ||||
|     Uint32 timestamp; | ||||
|     Uint32 windowID;    /**< The associated window */ | ||||
|     Uint8 event;        /**< ::SDL_WindowEventID */ | ||||
|     Uint8 padding1; | ||||
|     Uint8 padding2; | ||||
|     Uint8 padding3; | ||||
|     Sint32 data1;       /**< event dependent data */ | ||||
|     Sint32 data2;       /**< event dependent data */ | ||||
| } SDL_WindowEvent; | ||||
|  | ||||
| /** | ||||
|  *  \brief Keyboard button event structure (event.key.*) | ||||
|  */ | ||||
| typedef struct SDL_KeyboardEvent | ||||
| { | ||||
|     Uint32 type;        /**< ::SDL_KEYDOWN or ::SDL_KEYUP */ | ||||
|     Uint32 timestamp; | ||||
|     Uint32 windowID;    /**< The window with keyboard focus, if any */ | ||||
|     Uint8 state;        /**< ::SDL_PRESSED or ::SDL_RELEASED */ | ||||
|     Uint8 repeat;       /**< Non-zero if this is a key repeat */ | ||||
|     Uint8 padding2; | ||||
|     Uint8 padding3; | ||||
|     SDL_Keysym keysym;  /**< The key that was pressed or released */ | ||||
| } SDL_KeyboardEvent; | ||||
|  | ||||
| #define SDL_TEXTEDITINGEVENT_TEXT_SIZE (32) | ||||
| /** | ||||
|  *  \brief Keyboard text editing event structure (event.edit.*) | ||||
|  */ | ||||
| typedef struct SDL_TextEditingEvent | ||||
| { | ||||
|     Uint32 type;                                /**< ::SDL_TEXTEDITING */ | ||||
|     Uint32 timestamp; | ||||
|     Uint32 windowID;                            /**< The window with keyboard focus, if any */ | ||||
|     char text[SDL_TEXTEDITINGEVENT_TEXT_SIZE];  /**< The editing text */ | ||||
|     Sint32 start;                               /**< The start cursor of selected editing text */ | ||||
|     Sint32 length;                              /**< The length of selected editing text */ | ||||
| } SDL_TextEditingEvent; | ||||
|  | ||||
|  | ||||
| #define SDL_TEXTINPUTEVENT_TEXT_SIZE (32) | ||||
| /** | ||||
|  *  \brief Keyboard text input event structure (event.text.*) | ||||
|  */ | ||||
| typedef struct SDL_TextInputEvent | ||||
| { | ||||
|     Uint32 type;                              /**< ::SDL_TEXTINPUT */ | ||||
|     Uint32 timestamp; | ||||
|     Uint32 windowID;                          /**< The window with keyboard focus, if any */ | ||||
|     char text[SDL_TEXTINPUTEVENT_TEXT_SIZE];  /**< The input text */ | ||||
| } SDL_TextInputEvent; | ||||
|  | ||||
| /** | ||||
|  *  \brief Mouse motion event structure (event.motion.*) | ||||
|  */ | ||||
| typedef struct SDL_MouseMotionEvent | ||||
| { | ||||
|     Uint32 type;        /**< ::SDL_MOUSEMOTION */ | ||||
|     Uint32 timestamp; | ||||
|     Uint32 windowID;    /**< The window with mouse focus, if any */ | ||||
|     Uint32 which;       /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ | ||||
|     Uint32 state;       /**< The current button state */ | ||||
|     Sint32 x;           /**< X coordinate, relative to window */ | ||||
|     Sint32 y;           /**< Y coordinate, relative to window */ | ||||
|     Sint32 xrel;        /**< The relative motion in the X direction */ | ||||
|     Sint32 yrel;        /**< The relative motion in the Y direction */ | ||||
| } SDL_MouseMotionEvent; | ||||
|  | ||||
| /** | ||||
|  *  \brief Mouse button event structure (event.button.*) | ||||
|  */ | ||||
| typedef struct SDL_MouseButtonEvent | ||||
| { | ||||
|     Uint32 type;        /**< ::SDL_MOUSEBUTTONDOWN or ::SDL_MOUSEBUTTONUP */ | ||||
|     Uint32 timestamp; | ||||
|     Uint32 windowID;    /**< The window with mouse focus, if any */ | ||||
|     Uint32 which;       /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ | ||||
|     Uint8 button;       /**< The mouse button index */ | ||||
|     Uint8 state;        /**< ::SDL_PRESSED or ::SDL_RELEASED */ | ||||
|     Uint8 clicks;       /**< 1 for single-click, 2 for double-click, etc. */ | ||||
|     Uint8 padding1; | ||||
|     Sint32 x;           /**< X coordinate, relative to window */ | ||||
|     Sint32 y;           /**< Y coordinate, relative to window */ | ||||
| } SDL_MouseButtonEvent; | ||||
|  | ||||
| /** | ||||
|  *  \brief Mouse wheel event structure (event.wheel.*) | ||||
|  */ | ||||
| typedef struct SDL_MouseWheelEvent | ||||
| { | ||||
|     Uint32 type;        /**< ::SDL_MOUSEWHEEL */ | ||||
|     Uint32 timestamp; | ||||
|     Uint32 windowID;    /**< The window with mouse focus, if any */ | ||||
|     Uint32 which;       /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ | ||||
|     Sint32 x;           /**< The amount scrolled horizontally, positive to the right and negative to the left */ | ||||
|     Sint32 y;           /**< The amount scrolled vertically, positive away from the user and negative toward the user */ | ||||
|     Uint32 direction;   /**< Set to one of the SDL_MOUSEWHEEL_* defines. When FLIPPED the values in X and Y will be opposite. Multiply by -1 to change them back */ | ||||
| } SDL_MouseWheelEvent; | ||||
|  | ||||
| /** | ||||
|  *  \brief Joystick axis motion event structure (event.jaxis.*) | ||||
|  */ | ||||
| typedef struct SDL_JoyAxisEvent | ||||
| { | ||||
|     Uint32 type;        /**< ::SDL_JOYAXISMOTION */ | ||||
|     Uint32 timestamp; | ||||
|     SDL_JoystickID which; /**< The joystick instance id */ | ||||
|     Uint8 axis;         /**< The joystick axis index */ | ||||
|     Uint8 padding1; | ||||
|     Uint8 padding2; | ||||
|     Uint8 padding3; | ||||
|     Sint16 value;       /**< The axis value (range: -32768 to 32767) */ | ||||
|     Uint16 padding4; | ||||
| } SDL_JoyAxisEvent; | ||||
|  | ||||
| /** | ||||
|  *  \brief Joystick trackball motion event structure (event.jball.*) | ||||
|  */ | ||||
| typedef struct SDL_JoyBallEvent | ||||
| { | ||||
|     Uint32 type;        /**< ::SDL_JOYBALLMOTION */ | ||||
|     Uint32 timestamp; | ||||
|     SDL_JoystickID which; /**< The joystick instance id */ | ||||
|     Uint8 ball;         /**< The joystick trackball index */ | ||||
|     Uint8 padding1; | ||||
|     Uint8 padding2; | ||||
|     Uint8 padding3; | ||||
|     Sint16 xrel;        /**< The relative motion in the X direction */ | ||||
|     Sint16 yrel;        /**< The relative motion in the Y direction */ | ||||
| } SDL_JoyBallEvent; | ||||
|  | ||||
| /** | ||||
|  *  \brief Joystick hat position change event structure (event.jhat.*) | ||||
|  */ | ||||
| typedef struct SDL_JoyHatEvent | ||||
| { | ||||
|     Uint32 type;        /**< ::SDL_JOYHATMOTION */ | ||||
|     Uint32 timestamp; | ||||
|     SDL_JoystickID which; /**< The joystick instance id */ | ||||
|     Uint8 hat;          /**< The joystick hat index */ | ||||
|     Uint8 value;        /**< The hat position value. | ||||
|                          *   \sa ::SDL_HAT_LEFTUP ::SDL_HAT_UP ::SDL_HAT_RIGHTUP | ||||
|                          *   \sa ::SDL_HAT_LEFT ::SDL_HAT_CENTERED ::SDL_HAT_RIGHT | ||||
|                          *   \sa ::SDL_HAT_LEFTDOWN ::SDL_HAT_DOWN ::SDL_HAT_RIGHTDOWN | ||||
|                          * | ||||
|                          *   Note that zero means the POV is centered. | ||||
|                          */ | ||||
|     Uint8 padding1; | ||||
|     Uint8 padding2; | ||||
| } SDL_JoyHatEvent; | ||||
|  | ||||
| /** | ||||
|  *  \brief Joystick button event structure (event.jbutton.*) | ||||
|  */ | ||||
| typedef struct SDL_JoyButtonEvent | ||||
| { | ||||
|     Uint32 type;        /**< ::SDL_JOYBUTTONDOWN or ::SDL_JOYBUTTONUP */ | ||||
|     Uint32 timestamp; | ||||
|     SDL_JoystickID which; /**< The joystick instance id */ | ||||
|     Uint8 button;       /**< The joystick button index */ | ||||
|     Uint8 state;        /**< ::SDL_PRESSED or ::SDL_RELEASED */ | ||||
|     Uint8 padding1; | ||||
|     Uint8 padding2; | ||||
| } SDL_JoyButtonEvent; | ||||
|  | ||||
| /** | ||||
|  *  \brief Joystick device event structure (event.jdevice.*) | ||||
|  */ | ||||
| typedef struct SDL_JoyDeviceEvent | ||||
| { | ||||
|     Uint32 type;        /**< ::SDL_JOYDEVICEADDED or ::SDL_JOYDEVICEREMOVED */ | ||||
|     Uint32 timestamp; | ||||
|     Sint32 which;       /**< The joystick device index for the ADDED event, instance id for the REMOVED event */ | ||||
| } SDL_JoyDeviceEvent; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \brief Game controller axis motion event structure (event.caxis.*) | ||||
|  */ | ||||
| typedef struct SDL_ControllerAxisEvent | ||||
| { | ||||
|     Uint32 type;        /**< ::SDL_CONTROLLERAXISMOTION */ | ||||
|     Uint32 timestamp; | ||||
|     SDL_JoystickID which; /**< The joystick instance id */ | ||||
|     Uint8 axis;         /**< The controller axis (SDL_GameControllerAxis) */ | ||||
|     Uint8 padding1; | ||||
|     Uint8 padding2; | ||||
|     Uint8 padding3; | ||||
|     Sint16 value;       /**< The axis value (range: -32768 to 32767) */ | ||||
|     Uint16 padding4; | ||||
| } SDL_ControllerAxisEvent; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \brief Game controller button event structure (event.cbutton.*) | ||||
|  */ | ||||
| typedef struct SDL_ControllerButtonEvent | ||||
| { | ||||
|     Uint32 type;        /**< ::SDL_CONTROLLERBUTTONDOWN or ::SDL_CONTROLLERBUTTONUP */ | ||||
|     Uint32 timestamp; | ||||
|     SDL_JoystickID which; /**< The joystick instance id */ | ||||
|     Uint8 button;       /**< The controller button (SDL_GameControllerButton) */ | ||||
|     Uint8 state;        /**< ::SDL_PRESSED or ::SDL_RELEASED */ | ||||
|     Uint8 padding1; | ||||
|     Uint8 padding2; | ||||
| } SDL_ControllerButtonEvent; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \brief Controller device event structure (event.cdevice.*) | ||||
|  */ | ||||
| typedef struct SDL_ControllerDeviceEvent | ||||
| { | ||||
|     Uint32 type;        /**< ::SDL_CONTROLLERDEVICEADDED, ::SDL_CONTROLLERDEVICEREMOVED, or ::SDL_CONTROLLERDEVICEREMAPPED */ | ||||
|     Uint32 timestamp; | ||||
|     Sint32 which;       /**< The joystick device index for the ADDED event, instance id for the REMOVED or REMAPPED event */ | ||||
| } SDL_ControllerDeviceEvent; | ||||
|  | ||||
| /** | ||||
|  *  \brief Audio device event structure (event.adevice.*) | ||||
|  */ | ||||
| typedef struct SDL_AudioDeviceEvent | ||||
| { | ||||
|     Uint32 type;        /**< ::SDL_AUDIODEVICEADDED, or ::SDL_AUDIODEVICEREMOVED */ | ||||
|     Uint32 timestamp; | ||||
|     Uint32 which;       /**< The audio device index for the ADDED event (valid until next SDL_GetNumAudioDevices() call), SDL_AudioDeviceID for the REMOVED event */ | ||||
|     Uint8 iscapture;    /**< zero if an output device, non-zero if a capture device. */ | ||||
|     Uint8 padding1; | ||||
|     Uint8 padding2; | ||||
|     Uint8 padding3; | ||||
| } SDL_AudioDeviceEvent; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \brief Touch finger event structure (event.tfinger.*) | ||||
|  */ | ||||
| typedef struct SDL_TouchFingerEvent | ||||
| { | ||||
|     Uint32 type;        /**< ::SDL_FINGERMOTION or ::SDL_FINGERDOWN or ::SDL_FINGERUP */ | ||||
|     Uint32 timestamp; | ||||
|     SDL_TouchID touchId; /**< The touch device id */ | ||||
|     SDL_FingerID fingerId; | ||||
|     float x;            /**< Normalized in the range 0...1 */ | ||||
|     float y;            /**< Normalized in the range 0...1 */ | ||||
|     float dx;           /**< Normalized in the range -1...1 */ | ||||
|     float dy;           /**< Normalized in the range -1...1 */ | ||||
|     float pressure;     /**< Normalized in the range 0...1 */ | ||||
| } SDL_TouchFingerEvent; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \brief Multiple Finger Gesture Event (event.mgesture.*) | ||||
|  */ | ||||
| typedef struct SDL_MultiGestureEvent | ||||
| { | ||||
|     Uint32 type;        /**< ::SDL_MULTIGESTURE */ | ||||
|     Uint32 timestamp; | ||||
|     SDL_TouchID touchId; /**< The touch device index */ | ||||
|     float dTheta; | ||||
|     float dDist; | ||||
|     float x; | ||||
|     float y; | ||||
|     Uint16 numFingers; | ||||
|     Uint16 padding; | ||||
| } SDL_MultiGestureEvent; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * \brief Dollar Gesture Event (event.dgesture.*) | ||||
|  */ | ||||
| typedef struct SDL_DollarGestureEvent | ||||
| { | ||||
|     Uint32 type;        /**< ::SDL_DOLLARGESTURE or ::SDL_DOLLARRECORD */ | ||||
|     Uint32 timestamp; | ||||
|     SDL_TouchID touchId; /**< The touch device id */ | ||||
|     SDL_GestureID gestureId; | ||||
|     Uint32 numFingers; | ||||
|     float error; | ||||
|     float x;            /**< Normalized center of gesture */ | ||||
|     float y;            /**< Normalized center of gesture */ | ||||
| } SDL_DollarGestureEvent; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \brief An event used to request a file open by the system (event.drop.*) | ||||
|  *         This event is enabled by default, you can disable it with SDL_EventState(). | ||||
|  *  \note If this event is enabled, you must free the filename in the event. | ||||
|  */ | ||||
| typedef struct SDL_DropEvent | ||||
| { | ||||
|     Uint32 type;        /**< ::SDL_DROPFILE */ | ||||
|     Uint32 timestamp; | ||||
|     char *file;         /**< The file name, which should be freed with SDL_free() */ | ||||
| } SDL_DropEvent; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \brief The "quit requested" event | ||||
|  */ | ||||
| typedef struct SDL_QuitEvent | ||||
| { | ||||
|     Uint32 type;        /**< ::SDL_QUIT */ | ||||
|     Uint32 timestamp; | ||||
| } SDL_QuitEvent; | ||||
|  | ||||
| /** | ||||
|  *  \brief OS Specific event | ||||
|  */ | ||||
| typedef struct SDL_OSEvent | ||||
| { | ||||
|     Uint32 type;        /**< ::SDL_QUIT */ | ||||
|     Uint32 timestamp; | ||||
| } SDL_OSEvent; | ||||
|  | ||||
| /** | ||||
|  *  \brief A user-defined event type (event.user.*) | ||||
|  */ | ||||
| typedef struct SDL_UserEvent | ||||
| { | ||||
|     Uint32 type;        /**< ::SDL_USEREVENT through ::SDL_LASTEVENT-1 */ | ||||
|     Uint32 timestamp; | ||||
|     Uint32 windowID;    /**< The associated window if any */ | ||||
|     Sint32 code;        /**< User defined event code */ | ||||
|     void *data1;        /**< User defined data pointer */ | ||||
|     void *data2;        /**< User defined data pointer */ | ||||
| } SDL_UserEvent; | ||||
|  | ||||
|  | ||||
| struct SDL_SysWMmsg; | ||||
| typedef struct SDL_SysWMmsg SDL_SysWMmsg; | ||||
|  | ||||
| /** | ||||
|  *  \brief A video driver dependent system event (event.syswm.*) | ||||
|  *         This event is disabled by default, you can enable it with SDL_EventState() | ||||
|  * | ||||
|  *  \note If you want to use this event, you should include SDL_syswm.h. | ||||
|  */ | ||||
| typedef struct SDL_SysWMEvent | ||||
| { | ||||
|     Uint32 type;        /**< ::SDL_SYSWMEVENT */ | ||||
|     Uint32 timestamp; | ||||
|     SDL_SysWMmsg *msg;  /**< driver dependent data, defined in SDL_syswm.h */ | ||||
| } SDL_SysWMEvent; | ||||
|  | ||||
| /** | ||||
|  *  \brief General event structure | ||||
|  */ | ||||
| typedef union SDL_Event | ||||
| { | ||||
|     Uint32 type;                    /**< Event type, shared with all events */ | ||||
|     SDL_CommonEvent common;         /**< Common event data */ | ||||
|     SDL_WindowEvent window;         /**< Window event data */ | ||||
|     SDL_KeyboardEvent key;          /**< Keyboard event data */ | ||||
|     SDL_TextEditingEvent edit;      /**< Text editing event data */ | ||||
|     SDL_TextInputEvent text;        /**< Text input event data */ | ||||
|     SDL_MouseMotionEvent motion;    /**< Mouse motion event data */ | ||||
|     SDL_MouseButtonEvent button;    /**< Mouse button event data */ | ||||
|     SDL_MouseWheelEvent wheel;      /**< Mouse wheel event data */ | ||||
|     SDL_JoyAxisEvent jaxis;         /**< Joystick axis event data */ | ||||
|     SDL_JoyBallEvent jball;         /**< Joystick ball event data */ | ||||
|     SDL_JoyHatEvent jhat;           /**< Joystick hat event data */ | ||||
|     SDL_JoyButtonEvent jbutton;     /**< Joystick button event data */ | ||||
|     SDL_JoyDeviceEvent jdevice;     /**< Joystick device change event data */ | ||||
|     SDL_ControllerAxisEvent caxis;      /**< Game Controller axis event data */ | ||||
|     SDL_ControllerButtonEvent cbutton;  /**< Game Controller button event data */ | ||||
|     SDL_ControllerDeviceEvent cdevice;  /**< Game Controller device event data */ | ||||
|     SDL_AudioDeviceEvent adevice;   /**< Audio device event data */ | ||||
|     SDL_QuitEvent quit;             /**< Quit request event data */ | ||||
|     SDL_UserEvent user;             /**< Custom event data */ | ||||
|     SDL_SysWMEvent syswm;           /**< System dependent window event data */ | ||||
|     SDL_TouchFingerEvent tfinger;   /**< Touch finger event data */ | ||||
|     SDL_MultiGestureEvent mgesture; /**< Gesture event data */ | ||||
|     SDL_DollarGestureEvent dgesture; /**< Gesture event data */ | ||||
|     SDL_DropEvent drop;             /**< Drag and drop event data */ | ||||
|  | ||||
|     /* This is necessary for ABI compatibility between Visual C++ and GCC | ||||
|        Visual C++ will respect the push pack pragma and use 52 bytes for | ||||
|        this structure, and GCC will use the alignment of the largest datatype | ||||
|        within the union, which is 8 bytes. | ||||
|  | ||||
|        So... we'll add padding to force the size to be 56 bytes for both. | ||||
|     */ | ||||
|     Uint8 padding[56]; | ||||
| } SDL_Event; | ||||
|  | ||||
|  | ||||
| /* Function prototypes */ | ||||
|  | ||||
| /** | ||||
|  *  Pumps the event loop, gathering events from the input devices. | ||||
|  * | ||||
|  *  This function updates the event queue and internal input device state. | ||||
|  * | ||||
|  *  This should only be run in the thread that sets the video mode. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_PumpEvents(void); | ||||
|  | ||||
| /* @{ */ | ||||
| typedef enum | ||||
| { | ||||
|     SDL_ADDEVENT, | ||||
|     SDL_PEEKEVENT, | ||||
|     SDL_GETEVENT | ||||
| } SDL_eventaction; | ||||
|  | ||||
| /** | ||||
|  *  Checks the event queue for messages and optionally returns them. | ||||
|  * | ||||
|  *  If \c action is ::SDL_ADDEVENT, up to \c numevents events will be added to | ||||
|  *  the back of the event queue. | ||||
|  * | ||||
|  *  If \c action is ::SDL_PEEKEVENT, up to \c numevents events at the front | ||||
|  *  of the event queue, within the specified minimum and maximum type, | ||||
|  *  will be returned and will not be removed from the queue. | ||||
|  * | ||||
|  *  If \c action is ::SDL_GETEVENT, up to \c numevents events at the front | ||||
|  *  of the event queue, within the specified minimum and maximum type, | ||||
|  *  will be returned and will be removed from the queue. | ||||
|  * | ||||
|  *  \return The number of events actually stored, or -1 if there was an error. | ||||
|  * | ||||
|  *  This function is thread-safe. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_PeepEvents(SDL_Event * events, int numevents, | ||||
|                                            SDL_eventaction action, | ||||
|                                            Uint32 minType, Uint32 maxType); | ||||
| /* @} */ | ||||
|  | ||||
| /** | ||||
|  *  Checks to see if certain event types are in the event queue. | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_HasEvent(Uint32 type); | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_HasEvents(Uint32 minType, Uint32 maxType); | ||||
|  | ||||
| /** | ||||
|  *  This function clears events from the event queue | ||||
|  *  This function only affects currently queued events. If you want to make | ||||
|  *  sure that all pending OS events are flushed, you can call SDL_PumpEvents() | ||||
|  *  on the main thread immediately before the flush call. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_FlushEvent(Uint32 type); | ||||
| extern DECLSPEC void SDLCALL SDL_FlushEvents(Uint32 minType, Uint32 maxType); | ||||
|  | ||||
| /** | ||||
|  *  \brief Polls for currently pending events. | ||||
|  * | ||||
|  *  \return 1 if there are any pending events, or 0 if there are none available. | ||||
|  * | ||||
|  *  \param event If not NULL, the next event is removed from the queue and | ||||
|  *               stored in that area. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_PollEvent(SDL_Event * event); | ||||
|  | ||||
| /** | ||||
|  *  \brief Waits indefinitely for the next available event. | ||||
|  * | ||||
|  *  \return 1, or 0 if there was an error while waiting for events. | ||||
|  * | ||||
|  *  \param event If not NULL, the next event is removed from the queue and | ||||
|  *               stored in that area. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_WaitEvent(SDL_Event * event); | ||||
|  | ||||
| /** | ||||
|  *  \brief Waits until the specified timeout (in milliseconds) for the next | ||||
|  *         available event. | ||||
|  * | ||||
|  *  \return 1, or 0 if there was an error while waiting for events. | ||||
|  * | ||||
|  *  \param event If not NULL, the next event is removed from the queue and | ||||
|  *               stored in that area. | ||||
|  *  \param timeout The timeout (in milliseconds) to wait for next event. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_WaitEventTimeout(SDL_Event * event, | ||||
|                                                  int timeout); | ||||
|  | ||||
| /** | ||||
|  *  \brief Add an event to the event queue. | ||||
|  * | ||||
|  *  \return 1 on success, 0 if the event was filtered, or -1 if the event queue | ||||
|  *          was full or there was some other error. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_PushEvent(SDL_Event * event); | ||||
|  | ||||
| typedef int (SDLCALL * SDL_EventFilter) (void *userdata, SDL_Event * event); | ||||
|  | ||||
| /** | ||||
|  *  Sets up a filter to process all events before they change internal state and | ||||
|  *  are posted to the internal event queue. | ||||
|  * | ||||
|  *  The filter is prototyped as: | ||||
|  *  \code | ||||
|  *      int SDL_EventFilter(void *userdata, SDL_Event * event); | ||||
|  *  \endcode | ||||
|  * | ||||
|  *  If the filter returns 1, then the event will be added to the internal queue. | ||||
|  *  If it returns 0, then the event will be dropped from the queue, but the | ||||
|  *  internal state will still be updated.  This allows selective filtering of | ||||
|  *  dynamically arriving events. | ||||
|  * | ||||
|  *  \warning  Be very careful of what you do in the event filter function, as | ||||
|  *            it may run in a different thread! | ||||
|  * | ||||
|  *  There is one caveat when dealing with the ::SDL_QuitEvent event type.  The | ||||
|  *  event filter is only called when the window manager desires to close the | ||||
|  *  application window.  If the event filter returns 1, then the window will | ||||
|  *  be closed, otherwise the window will remain open if possible. | ||||
|  * | ||||
|  *  If the quit event is generated by an interrupt signal, it will bypass the | ||||
|  *  internal queue and be delivered to the application at the next event poll. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_SetEventFilter(SDL_EventFilter filter, | ||||
|                                                 void *userdata); | ||||
|  | ||||
| /** | ||||
|  *  Return the current event filter - can be used to "chain" filters. | ||||
|  *  If there is no event filter set, this function returns SDL_FALSE. | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_GetEventFilter(SDL_EventFilter * filter, | ||||
|                                                     void **userdata); | ||||
|  | ||||
| /** | ||||
|  *  Add a function which is called when an event is added to the queue. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_AddEventWatch(SDL_EventFilter filter, | ||||
|                                                void *userdata); | ||||
|  | ||||
| /** | ||||
|  *  Remove an event watch function added with SDL_AddEventWatch() | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_DelEventWatch(SDL_EventFilter filter, | ||||
|                                                void *userdata); | ||||
|  | ||||
| /** | ||||
|  *  Run the filter function on the current event queue, removing any | ||||
|  *  events for which the filter returns 0. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_FilterEvents(SDL_EventFilter filter, | ||||
|                                               void *userdata); | ||||
|  | ||||
| /* @{ */ | ||||
| #define SDL_QUERY   -1 | ||||
| #define SDL_IGNORE   0 | ||||
| #define SDL_DISABLE  0 | ||||
| #define SDL_ENABLE   1 | ||||
|  | ||||
| /** | ||||
|  *  This function allows you to set the state of processing certain events. | ||||
|  *   - If \c state is set to ::SDL_IGNORE, that event will be automatically | ||||
|  *     dropped from the event queue and will not event be filtered. | ||||
|  *   - If \c state is set to ::SDL_ENABLE, that event will be processed | ||||
|  *     normally. | ||||
|  *   - If \c state is set to ::SDL_QUERY, SDL_EventState() will return the | ||||
|  *     current processing state of the specified event. | ||||
|  */ | ||||
| extern DECLSPEC Uint8 SDLCALL SDL_EventState(Uint32 type, int state); | ||||
| /* @} */ | ||||
| #define SDL_GetEventState(type) SDL_EventState(type, SDL_QUERY) | ||||
|  | ||||
| /** | ||||
|  *  This function allocates a set of user-defined events, and returns | ||||
|  *  the beginning event number for that set of events. | ||||
|  * | ||||
|  *  If there aren't enough user-defined events left, this function | ||||
|  *  returns (Uint32)-1 | ||||
|  */ | ||||
| extern DECLSPEC Uint32 SDLCALL SDL_RegisterEvents(int numevents); | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_events_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,136 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_filesystem.h | ||||
|  * | ||||
|  *  \brief Include file for filesystem SDL API functions | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_filesystem_h | ||||
| #define _SDL_filesystem_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
|  | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  * \brief Get the path where the application resides. | ||||
|  * | ||||
|  * Get the "base path". This is the directory where the application was run | ||||
|  *  from, which is probably the installation directory, and may or may not | ||||
|  *  be the process's current working directory. | ||||
|  * | ||||
|  * This returns an absolute path in UTF-8 encoding, and is guaranteed to | ||||
|  *  end with a path separator ('\\' on Windows, '/' most other places). | ||||
|  * | ||||
|  * The pointer returned by this function is owned by you. Please call | ||||
|  *  SDL_free() on the pointer when you are done with it, or it will be a | ||||
|  *  memory leak. This is not necessarily a fast call, though, so you should | ||||
|  *  call this once near startup and save the string if you need it. | ||||
|  * | ||||
|  * Some platforms can't determine the application's path, and on other | ||||
|  *  platforms, this might be meaningless. In such cases, this function will | ||||
|  *  return NULL. | ||||
|  * | ||||
|  *  \return String of base dir in UTF-8 encoding, or NULL on error. | ||||
|  * | ||||
|  * \sa SDL_GetPrefPath | ||||
|  */ | ||||
| extern DECLSPEC char *SDLCALL SDL_GetBasePath(void); | ||||
|  | ||||
| /** | ||||
|  * \brief Get the user-and-app-specific path where files can be written. | ||||
|  * | ||||
|  * Get the "pref dir". This is meant to be where users can write personal | ||||
|  *  files (preferences and save games, etc) that are specific to your | ||||
|  *  application. This directory is unique per user, per application. | ||||
|  * | ||||
|  * This function will decide the appropriate location in the native filesystem, | ||||
|  *  create the directory if necessary, and return a string of the absolute | ||||
|  *  path to the directory in UTF-8 encoding. | ||||
|  * | ||||
|  * On Windows, the string might look like: | ||||
|  *  "C:\\Users\\bob\\AppData\\Roaming\\My Company\\My Program Name\\" | ||||
|  * | ||||
|  * On Linux, the string might look like: | ||||
|  *  "/home/bob/.local/share/My Program Name/" | ||||
|  * | ||||
|  * On Mac OS X, the string might look like: | ||||
|  *  "/Users/bob/Library/Application Support/My Program Name/" | ||||
|  * | ||||
|  * (etc.) | ||||
|  * | ||||
|  * You specify the name of your organization (if it's not a real organization, | ||||
|  *  your name or an Internet domain you own might do) and the name of your | ||||
|  *  application. These should be untranslated proper names. | ||||
|  * | ||||
|  * Both the org and app strings may become part of a directory name, so | ||||
|  *  please follow these rules: | ||||
|  * | ||||
|  *    - Try to use the same org string (including case-sensitivity) for | ||||
|  *      all your applications that use this function. | ||||
|  *    - Always use a unique app string for each one, and make sure it never | ||||
|  *      changes for an app once you've decided on it. | ||||
|  *    - Unicode characters are legal, as long as it's UTF-8 encoded, but... | ||||
|  *    - ...only use letters, numbers, and spaces. Avoid punctuation like | ||||
|  *      "Game Name 2: Bad Guy's Revenge!" ... "Game Name 2" is sufficient. | ||||
|  * | ||||
|  * This returns an absolute path in UTF-8 encoding, and is guaranteed to | ||||
|  *  end with a path separator ('\\' on Windows, '/' most other places). | ||||
|  * | ||||
|  * The pointer returned by this function is owned by you. Please call | ||||
|  *  SDL_free() on the pointer when you are done with it, or it will be a | ||||
|  *  memory leak. This is not necessarily a fast call, though, so you should | ||||
|  *  call this once near startup and save the string if you need it. | ||||
|  * | ||||
|  * You should assume the path returned by this function is the only safe | ||||
|  *  place to write files (and that SDL_GetBasePath(), while it might be | ||||
|  *  writable, or even the parent of the returned path, aren't where you | ||||
|  *  should be writing things). | ||||
|  * | ||||
|  * Some platforms can't determine the pref path, and on other | ||||
|  *  platforms, this might be meaningless. In such cases, this function will | ||||
|  *  return NULL. | ||||
|  * | ||||
|  *   \param org The name of your organization. | ||||
|  *   \param app The name of your application. | ||||
|  *  \return UTF-8 string of user dir in platform-dependent notation. NULL | ||||
|  *          if there's a problem (creating directory failed, etc). | ||||
|  * | ||||
|  * \sa SDL_GetBasePath | ||||
|  */ | ||||
| extern DECLSPEC char *SDLCALL SDL_GetPrefPath(const char *org, const char *app); | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_filesystem_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,323 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_gamecontroller.h | ||||
|  * | ||||
|  *  Include file for SDL game controller event handling | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_gamecontroller_h | ||||
| #define _SDL_gamecontroller_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
| #include "SDL_error.h" | ||||
| #include "SDL_rwops.h" | ||||
| #include "SDL_joystick.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_gamecontroller.h | ||||
|  * | ||||
|  *  In order to use these functions, SDL_Init() must have been called | ||||
|  *  with the ::SDL_INIT_GAMECONTROLLER flag.  This causes SDL to scan the system | ||||
|  *  for game controllers, and load appropriate drivers. | ||||
|  * | ||||
|  *  If you would like to receive controller updates while the application | ||||
|  *  is in the background, you should set the following hint before calling | ||||
|  *  SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS | ||||
|  */ | ||||
|  | ||||
| /* The gamecontroller structure used to identify an SDL game controller */ | ||||
| struct _SDL_GameController; | ||||
| typedef struct _SDL_GameController SDL_GameController; | ||||
|  | ||||
|  | ||||
| typedef enum | ||||
| { | ||||
|     SDL_CONTROLLER_BINDTYPE_NONE = 0, | ||||
|     SDL_CONTROLLER_BINDTYPE_BUTTON, | ||||
|     SDL_CONTROLLER_BINDTYPE_AXIS, | ||||
|     SDL_CONTROLLER_BINDTYPE_HAT | ||||
| } SDL_GameControllerBindType; | ||||
|  | ||||
| /** | ||||
|  *  Get the SDL joystick layer binding for this controller button/axis mapping | ||||
|  */ | ||||
| typedef struct SDL_GameControllerButtonBind | ||||
| { | ||||
|     SDL_GameControllerBindType bindType; | ||||
|     union | ||||
|     { | ||||
|         int button; | ||||
|         int axis; | ||||
|         struct { | ||||
|             int hat; | ||||
|             int hat_mask; | ||||
|         } hat; | ||||
|     } value; | ||||
|  | ||||
| } SDL_GameControllerButtonBind; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  To count the number of game controllers in the system for the following: | ||||
|  *  int nJoysticks = SDL_NumJoysticks(); | ||||
|  *  int nGameControllers = 0; | ||||
|  *  for ( int i = 0; i < nJoysticks; i++ ) { | ||||
|  *      if ( SDL_IsGameController(i) ) { | ||||
|  *          nGameControllers++; | ||||
|  *      } | ||||
|  *  } | ||||
|  * | ||||
|  *  Using the SDL_HINT_GAMECONTROLLERCONFIG hint or the SDL_GameControllerAddMapping you can add support for controllers SDL is unaware of or cause an existing controller to have a different binding. The format is: | ||||
|  *  guid,name,mappings | ||||
|  * | ||||
|  *  Where GUID is the string value from SDL_JoystickGetGUIDString(), name is the human readable string for the device and mappings are controller mappings to joystick ones. | ||||
|  *  Under Windows there is a reserved GUID of "xinput" that covers any XInput devices. | ||||
|  *  The mapping format for joystick is: | ||||
|  *      bX - a joystick button, index X | ||||
|  *      hX.Y - hat X with value Y | ||||
|  *      aX - axis X of the joystick | ||||
|  *  Buttons can be used as a controller axis and vice versa. | ||||
|  * | ||||
|  *  This string shows an example of a valid mapping for a controller | ||||
|  *  "341a3608000000000000504944564944,Afterglow PS3 Controller,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7", | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  *  Load a set of mappings from a seekable SDL data stream (memory or file), filtered by the current SDL_GetPlatform() | ||||
|  *  A community sourced database of controllers is available at https://raw.github.com/gabomdq/SDL_GameControllerDB/master/gamecontrollerdb.txt | ||||
|  * | ||||
|  *  If \c freerw is non-zero, the stream will be closed after being read. | ||||
|  *  | ||||
|  * \return number of mappings added, -1 on error | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_GameControllerAddMappingsFromRW( SDL_RWops * rw, int freerw ); | ||||
|  | ||||
| /** | ||||
|  *  Load a set of mappings from a file, filtered by the current SDL_GetPlatform() | ||||
|  * | ||||
|  *  Convenience macro. | ||||
|  */ | ||||
| #define SDL_GameControllerAddMappingsFromFile(file)   SDL_GameControllerAddMappingsFromRW(SDL_RWFromFile(file, "rb"), 1) | ||||
|  | ||||
| /** | ||||
|  *  Add or update an existing mapping configuration | ||||
|  * | ||||
|  * \return 1 if mapping is added, 0 if updated, -1 on error | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_GameControllerAddMapping( const char* mappingString ); | ||||
|  | ||||
| /** | ||||
|  *  Get a mapping string for a GUID | ||||
|  * | ||||
|  *  \return the mapping string.  Must be freed with SDL_free.  Returns NULL if no mapping is available | ||||
|  */ | ||||
| extern DECLSPEC char * SDLCALL SDL_GameControllerMappingForGUID( SDL_JoystickGUID guid ); | ||||
|  | ||||
| /** | ||||
|  *  Get a mapping string for an open GameController | ||||
|  * | ||||
|  *  \return the mapping string.  Must be freed with SDL_free.  Returns NULL if no mapping is available | ||||
|  */ | ||||
| extern DECLSPEC char * SDLCALL SDL_GameControllerMapping( SDL_GameController * gamecontroller ); | ||||
|  | ||||
| /** | ||||
|  *  Is the joystick on this index supported by the game controller interface? | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_IsGameController(int joystick_index); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  Get the implementation dependent name of a game controller. | ||||
|  *  This can be called before any controllers are opened. | ||||
|  *  If no name can be found, this function returns NULL. | ||||
|  */ | ||||
| extern DECLSPEC const char *SDLCALL SDL_GameControllerNameForIndex(int joystick_index); | ||||
|  | ||||
| /** | ||||
|  *  Open a game controller for use. | ||||
|  *  The index passed as an argument refers to the N'th game controller on the system. | ||||
|  *  This index is not the value which will identify this controller in future | ||||
|  *  controller events.  The joystick's instance id (::SDL_JoystickID) will be | ||||
|  *  used there instead. | ||||
|  * | ||||
|  *  \return A controller identifier, or NULL if an error occurred. | ||||
|  */ | ||||
| extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerOpen(int joystick_index); | ||||
|  | ||||
| /** | ||||
|  * Return the SDL_GameController associated with an instance id. | ||||
|  */ | ||||
| extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerFromInstanceID(SDL_JoystickID joyid); | ||||
|  | ||||
| /** | ||||
|  *  Return the name for this currently opened controller | ||||
|  */ | ||||
| extern DECLSPEC const char *SDLCALL SDL_GameControllerName(SDL_GameController *gamecontroller); | ||||
|  | ||||
| /** | ||||
|  *  Returns SDL_TRUE if the controller has been opened and currently connected, | ||||
|  *  or SDL_FALSE if it has not. | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerGetAttached(SDL_GameController *gamecontroller); | ||||
|  | ||||
| /** | ||||
|  *  Get the underlying joystick object used by a controller | ||||
|  */ | ||||
| extern DECLSPEC SDL_Joystick *SDLCALL SDL_GameControllerGetJoystick(SDL_GameController *gamecontroller); | ||||
|  | ||||
| /** | ||||
|  *  Enable/disable controller event polling. | ||||
|  * | ||||
|  *  If controller events are disabled, you must call SDL_GameControllerUpdate() | ||||
|  *  yourself and check the state of the controller when you want controller | ||||
|  *  information. | ||||
|  * | ||||
|  *  The state can be one of ::SDL_QUERY, ::SDL_ENABLE or ::SDL_IGNORE. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_GameControllerEventState(int state); | ||||
|  | ||||
| /** | ||||
|  *  Update the current state of the open game controllers. | ||||
|  * | ||||
|  *  This is called automatically by the event loop if any game controller | ||||
|  *  events are enabled. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_GameControllerUpdate(void); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  The list of axes available from a controller | ||||
|  */ | ||||
| typedef enum | ||||
| { | ||||
|     SDL_CONTROLLER_AXIS_INVALID = -1, | ||||
|     SDL_CONTROLLER_AXIS_LEFTX, | ||||
|     SDL_CONTROLLER_AXIS_LEFTY, | ||||
|     SDL_CONTROLLER_AXIS_RIGHTX, | ||||
|     SDL_CONTROLLER_AXIS_RIGHTY, | ||||
|     SDL_CONTROLLER_AXIS_TRIGGERLEFT, | ||||
|     SDL_CONTROLLER_AXIS_TRIGGERRIGHT, | ||||
|     SDL_CONTROLLER_AXIS_MAX | ||||
| } SDL_GameControllerAxis; | ||||
|  | ||||
| /** | ||||
|  *  turn this string into a axis mapping | ||||
|  */ | ||||
| extern DECLSPEC SDL_GameControllerAxis SDLCALL SDL_GameControllerGetAxisFromString(const char *pchString); | ||||
|  | ||||
| /** | ||||
|  *  turn this axis enum into a string mapping | ||||
|  */ | ||||
| extern DECLSPEC const char* SDLCALL SDL_GameControllerGetStringForAxis(SDL_GameControllerAxis axis); | ||||
|  | ||||
| /** | ||||
|  *  Get the SDL joystick layer binding for this controller button mapping | ||||
|  */ | ||||
| extern DECLSPEC SDL_GameControllerButtonBind SDLCALL | ||||
| SDL_GameControllerGetBindForAxis(SDL_GameController *gamecontroller, | ||||
|                                  SDL_GameControllerAxis axis); | ||||
|  | ||||
| /** | ||||
|  *  Get the current state of an axis control on a game controller. | ||||
|  * | ||||
|  *  The state is a value ranging from -32768 to 32767 (except for the triggers, | ||||
|  *  which range from 0 to 32767). | ||||
|  * | ||||
|  *  The axis indices start at index 0. | ||||
|  */ | ||||
| extern DECLSPEC Sint16 SDLCALL | ||||
| SDL_GameControllerGetAxis(SDL_GameController *gamecontroller, | ||||
|                           SDL_GameControllerAxis axis); | ||||
|  | ||||
| /** | ||||
|  *  The list of buttons available from a controller | ||||
|  */ | ||||
| typedef enum | ||||
| { | ||||
|     SDL_CONTROLLER_BUTTON_INVALID = -1, | ||||
|     SDL_CONTROLLER_BUTTON_A, | ||||
|     SDL_CONTROLLER_BUTTON_B, | ||||
|     SDL_CONTROLLER_BUTTON_X, | ||||
|     SDL_CONTROLLER_BUTTON_Y, | ||||
|     SDL_CONTROLLER_BUTTON_BACK, | ||||
|     SDL_CONTROLLER_BUTTON_GUIDE, | ||||
|     SDL_CONTROLLER_BUTTON_START, | ||||
|     SDL_CONTROLLER_BUTTON_LEFTSTICK, | ||||
|     SDL_CONTROLLER_BUTTON_RIGHTSTICK, | ||||
|     SDL_CONTROLLER_BUTTON_LEFTSHOULDER, | ||||
|     SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, | ||||
|     SDL_CONTROLLER_BUTTON_DPAD_UP, | ||||
|     SDL_CONTROLLER_BUTTON_DPAD_DOWN, | ||||
|     SDL_CONTROLLER_BUTTON_DPAD_LEFT, | ||||
|     SDL_CONTROLLER_BUTTON_DPAD_RIGHT, | ||||
|     SDL_CONTROLLER_BUTTON_MAX | ||||
| } SDL_GameControllerButton; | ||||
|  | ||||
| /** | ||||
|  *  turn this string into a button mapping | ||||
|  */ | ||||
| extern DECLSPEC SDL_GameControllerButton SDLCALL SDL_GameControllerGetButtonFromString(const char *pchString); | ||||
|  | ||||
| /** | ||||
|  *  turn this button enum into a string mapping | ||||
|  */ | ||||
| extern DECLSPEC const char* SDLCALL SDL_GameControllerGetStringForButton(SDL_GameControllerButton button); | ||||
|  | ||||
| /** | ||||
|  *  Get the SDL joystick layer binding for this controller button mapping | ||||
|  */ | ||||
| extern DECLSPEC SDL_GameControllerButtonBind SDLCALL | ||||
| SDL_GameControllerGetBindForButton(SDL_GameController *gamecontroller, | ||||
|                                    SDL_GameControllerButton button); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  Get the current state of a button on a game controller. | ||||
|  * | ||||
|  *  The button indices start at index 0. | ||||
|  */ | ||||
| extern DECLSPEC Uint8 SDLCALL SDL_GameControllerGetButton(SDL_GameController *gamecontroller, | ||||
|                                                           SDL_GameControllerButton button); | ||||
|  | ||||
| /** | ||||
|  *  Close a controller previously opened with SDL_GameControllerOpen(). | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_GameControllerClose(SDL_GameController *gamecontroller); | ||||
|  | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_gamecontroller_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,87 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_gesture.h | ||||
|  * | ||||
|  *  Include file for SDL gesture event handling. | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_gesture_h | ||||
| #define _SDL_gesture_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
| #include "SDL_error.h" | ||||
| #include "SDL_video.h" | ||||
|  | ||||
| #include "SDL_touch.h" | ||||
|  | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| typedef Sint64 SDL_GestureID; | ||||
|  | ||||
| /* Function prototypes */ | ||||
|  | ||||
| /** | ||||
|  *  \brief Begin Recording a gesture on the specified touch, or all touches (-1) | ||||
|  * | ||||
|  * | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_RecordGesture(SDL_TouchID touchId); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \brief Save all currently loaded Dollar Gesture templates | ||||
|  * | ||||
|  * | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_SaveAllDollarTemplates(SDL_RWops *dst); | ||||
|  | ||||
| /** | ||||
|  *  \brief Save a currently loaded Dollar Gesture template | ||||
|  * | ||||
|  * | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_SaveDollarTemplate(SDL_GestureID gestureId,SDL_RWops *dst); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \brief Load Dollar Gesture templates from a file | ||||
|  * | ||||
|  * | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_LoadDollarTemplates(SDL_TouchID touchId, SDL_RWops *src); | ||||
|  | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_gesture_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -0,0 +1,711 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_hints.h | ||||
|  * | ||||
|  *  Official documentation for SDL configuration variables | ||||
|  * | ||||
|  *  This file contains functions to set and get configuration hints, | ||||
|  *  as well as listing each of them alphabetically. | ||||
|  * | ||||
|  *  The convention for naming hints is SDL_HINT_X, where "SDL_X" is | ||||
|  *  the environment variable that can be used to override the default. | ||||
|  * | ||||
|  *  In general these hints are just that - they may or may not be | ||||
|  *  supported or applicable on any given platform, but they provide | ||||
|  *  a way for an application or user to give the library a hint as | ||||
|  *  to how they would like the library to work. | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_hints_h | ||||
| #define _SDL_hints_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  *  \brief  A variable controlling how 3D acceleration is used to accelerate the SDL screen surface. | ||||
|  * | ||||
|  *  SDL can try to accelerate the SDL screen surface by using streaming | ||||
|  *  textures with a 3D rendering engine.  This variable controls whether and | ||||
|  *  how this is done. | ||||
|  * | ||||
|  *  This variable can be set to the following values: | ||||
|  *    "0"       - Disable 3D acceleration | ||||
|  *    "1"       - Enable 3D acceleration, using the default renderer. | ||||
|  *    "X"       - Enable 3D acceleration, using X where X is one of the valid rendering drivers.  (e.g. "direct3d", "opengl", etc.) | ||||
|  * | ||||
|  *  By default SDL tries to make a best guess for each platform whether | ||||
|  *  to use acceleration or not. | ||||
|  */ | ||||
| #define SDL_HINT_FRAMEBUFFER_ACCELERATION   "SDL_FRAMEBUFFER_ACCELERATION" | ||||
|  | ||||
| /** | ||||
|  *  \brief  A variable specifying which render driver to use. | ||||
|  * | ||||
|  *  If the application doesn't pick a specific renderer to use, this variable | ||||
|  *  specifies the name of the preferred renderer.  If the preferred renderer | ||||
|  *  can't be initialized, the normal default renderer is used. | ||||
|  * | ||||
|  *  This variable is case insensitive and can be set to the following values: | ||||
|  *    "direct3d" | ||||
|  *    "opengl" | ||||
|  *    "opengles2" | ||||
|  *    "opengles" | ||||
|  *    "software" | ||||
|  * | ||||
|  *  The default varies by platform, but it's the first one in the list that | ||||
|  *  is available on the current platform. | ||||
|  */ | ||||
| #define SDL_HINT_RENDER_DRIVER              "SDL_RENDER_DRIVER" | ||||
|  | ||||
| /** | ||||
|  *  \brief  A variable controlling whether the OpenGL render driver uses shaders if they are available. | ||||
|  * | ||||
|  *  This variable can be set to the following values: | ||||
|  *    "0"       - Disable shaders | ||||
|  *    "1"       - Enable shaders | ||||
|  * | ||||
|  *  By default shaders are used if OpenGL supports them. | ||||
|  */ | ||||
| #define SDL_HINT_RENDER_OPENGL_SHADERS      "SDL_RENDER_OPENGL_SHADERS" | ||||
|  | ||||
| /** | ||||
|  *  \brief  A variable controlling whether the Direct3D device is initialized for thread-safe operations. | ||||
|  * | ||||
|  *  This variable can be set to the following values: | ||||
|  *    "0"       - Thread-safety is not enabled (faster) | ||||
|  *    "1"       - Thread-safety is enabled | ||||
|  * | ||||
|  *  By default the Direct3D device is created with thread-safety disabled. | ||||
|  */ | ||||
| #define SDL_HINT_RENDER_DIRECT3D_THREADSAFE "SDL_RENDER_DIRECT3D_THREADSAFE" | ||||
|  | ||||
| /** | ||||
|  *  \brief  A variable controlling whether to enable Direct3D 11+'s Debug Layer. | ||||
|  * | ||||
|  *  This variable does not have any effect on the Direct3D 9 based renderer. | ||||
|  * | ||||
|  *  This variable can be set to the following values: | ||||
|  *    "0"       - Disable Debug Layer use | ||||
|  *    "1"       - Enable Debug Layer use | ||||
|  * | ||||
|  *  By default, SDL does not use Direct3D Debug Layer. | ||||
|  */ | ||||
| #define SDL_HINT_RENDER_DIRECT3D11_DEBUG    "SDL_RENDER_DIRECT3D11_DEBUG" | ||||
|  | ||||
| /** | ||||
|  *  \brief  A variable controlling the scaling quality | ||||
|  * | ||||
|  *  This variable can be set to the following values: | ||||
|  *    "0" or "nearest" - Nearest pixel sampling | ||||
|  *    "1" or "linear"  - Linear filtering (supported by OpenGL and Direct3D) | ||||
|  *    "2" or "best"    - Currently this is the same as "linear" | ||||
|  * | ||||
|  *  By default nearest pixel sampling is used | ||||
|  */ | ||||
| #define SDL_HINT_RENDER_SCALE_QUALITY       "SDL_RENDER_SCALE_QUALITY" | ||||
|  | ||||
| /** | ||||
|  *  \brief  A variable controlling whether updates to the SDL screen surface should be synchronized with the vertical refresh, to avoid tearing. | ||||
|  * | ||||
|  *  This variable can be set to the following values: | ||||
|  *    "0"       - Disable vsync | ||||
|  *    "1"       - Enable vsync | ||||
|  * | ||||
|  *  By default SDL does not sync screen surface updates with vertical refresh. | ||||
|  */ | ||||
| #define SDL_HINT_RENDER_VSYNC               "SDL_RENDER_VSYNC" | ||||
|  | ||||
| /** | ||||
|  *  \brief  A variable controlling whether the screensaver is enabled.  | ||||
|  * | ||||
|  *  This variable can be set to the following values: | ||||
|  *    "0"       - Disable screensaver | ||||
|  *    "1"       - Enable screensaver | ||||
|  * | ||||
|  *  By default SDL will disable the screensaver. | ||||
|  */ | ||||
| #define SDL_HINT_VIDEO_ALLOW_SCREENSAVER    "SDL_VIDEO_ALLOW_SCREENSAVER" | ||||
|  | ||||
| /** | ||||
|  *  \brief  A variable controlling whether the X11 VidMode extension should be used. | ||||
|  * | ||||
|  *  This variable can be set to the following values: | ||||
|  *    "0"       - Disable XVidMode | ||||
|  *    "1"       - Enable XVidMode | ||||
|  * | ||||
|  *  By default SDL will use XVidMode if it is available. | ||||
|  */ | ||||
| #define SDL_HINT_VIDEO_X11_XVIDMODE         "SDL_VIDEO_X11_XVIDMODE" | ||||
|  | ||||
| /** | ||||
|  *  \brief  A variable controlling whether the X11 Xinerama extension should be used. | ||||
|  * | ||||
|  *  This variable can be set to the following values: | ||||
|  *    "0"       - Disable Xinerama | ||||
|  *    "1"       - Enable Xinerama | ||||
|  * | ||||
|  *  By default SDL will use Xinerama if it is available. | ||||
|  */ | ||||
| #define SDL_HINT_VIDEO_X11_XINERAMA         "SDL_VIDEO_X11_XINERAMA" | ||||
|  | ||||
| /** | ||||
|  *  \brief  A variable controlling whether the X11 XRandR extension should be used. | ||||
|  * | ||||
|  *  This variable can be set to the following values: | ||||
|  *    "0"       - Disable XRandR | ||||
|  *    "1"       - Enable XRandR | ||||
|  * | ||||
|  *  By default SDL will not use XRandR because of window manager issues. | ||||
|  */ | ||||
| #define SDL_HINT_VIDEO_X11_XRANDR           "SDL_VIDEO_X11_XRANDR" | ||||
|  | ||||
| /** | ||||
|  *  \brief  A variable controlling whether the X11 _NET_WM_PING protocol should be supported. | ||||
|  * | ||||
|  *  This variable can be set to the following values: | ||||
|  *    "0"       - Disable _NET_WM_PING | ||||
|  *    "1"       - Enable _NET_WM_PING | ||||
|  * | ||||
|  *  By default SDL will use _NET_WM_PING, but for applications that know they | ||||
|  *  will not always be able to respond to ping requests in a timely manner they can | ||||
|  *  turn it off to avoid the window manager thinking the app is hung. | ||||
|  *  The hint is checked in CreateWindow. | ||||
|  */ | ||||
| #define SDL_HINT_VIDEO_X11_NET_WM_PING      "SDL_VIDEO_X11_NET_WM_PING" | ||||
|  | ||||
| /** | ||||
|  *  \brief  A variable controlling whether the window frame and title bar are interactive when the cursor is hidden  | ||||
|  * | ||||
|  *  This variable can be set to the following values: | ||||
|  *    "0"       - The window frame is not interactive when the cursor is hidden (no move, resize, etc) | ||||
|  *    "1"       - The window frame is interactive when the cursor is hidden | ||||
|  * | ||||
|  *  By default SDL will allow interaction with the window frame when the cursor is hidden | ||||
|  */ | ||||
| #define SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN    "SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN" | ||||
|  | ||||
| /** | ||||
|  *  \brief  A variable controlling whether the windows message loop is processed by SDL  | ||||
|  * | ||||
|  *  This variable can be set to the following values: | ||||
|  *    "0"       - The window message loop is not run | ||||
|  *    "1"       - The window message loop is processed in SDL_PumpEvents() | ||||
|  * | ||||
|  *  By default SDL will process the windows message loop | ||||
|  */ | ||||
| #define SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP "SDL_WINDOWS_ENABLE_MESSAGELOOP" | ||||
|  | ||||
| /** | ||||
|  *  \brief  A variable controlling whether grabbing input grabs the keyboard | ||||
|  * | ||||
|  *  This variable can be set to the following values: | ||||
|  *    "0"       - Grab will affect only the mouse | ||||
|  *    "1"       - Grab will affect mouse and keyboard | ||||
|  * | ||||
|  *  By default SDL will not grab the keyboard so system shortcuts still work. | ||||
|  */ | ||||
| #define SDL_HINT_GRAB_KEYBOARD              "SDL_GRAB_KEYBOARD" | ||||
|  | ||||
| /** | ||||
| *  \brief  A variable controlling whether relative mouse mode is implemented using mouse warping | ||||
| * | ||||
| *  This variable can be set to the following values: | ||||
| *    "0"       - Relative mouse mode uses raw input | ||||
| *    "1"       - Relative mouse mode uses mouse warping | ||||
| * | ||||
| *  By default SDL will use raw input for relative mouse mode | ||||
| */ | ||||
| #define SDL_HINT_MOUSE_RELATIVE_MODE_WARP    "SDL_MOUSE_RELATIVE_MODE_WARP" | ||||
|  | ||||
| /** | ||||
|  *  \brief Minimize your SDL_Window if it loses key focus when in fullscreen mode. Defaults to true. | ||||
|  * | ||||
|  */ | ||||
| #define SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS   "SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS" | ||||
|  | ||||
| /** | ||||
|  *  \brief  A variable controlling whether the idle timer is disabled on iOS. | ||||
|  * | ||||
|  *  When an iOS app does not receive touches for some time, the screen is | ||||
|  *  dimmed automatically. For games where the accelerometer is the only input | ||||
|  *  this is problematic. This functionality can be disabled by setting this | ||||
|  *  hint. | ||||
|  * | ||||
|  *  As of SDL 2.0.4, SDL_EnableScreenSaver and SDL_DisableScreenSaver accomplish | ||||
|  *  the same thing on iOS. They should be preferred over this hint. | ||||
|  * | ||||
|  *  This variable can be set to the following values: | ||||
|  *    "0"       - Enable idle timer | ||||
|  *    "1"       - Disable idle timer | ||||
|  */ | ||||
| #define SDL_HINT_IDLE_TIMER_DISABLED "SDL_IOS_IDLE_TIMER_DISABLED" | ||||
|  | ||||
| /** | ||||
|  *  \brief  A variable controlling which orientations are allowed on iOS. | ||||
|  * | ||||
|  *  In some circumstances it is necessary to be able to explicitly control | ||||
|  *  which UI orientations are allowed. | ||||
|  * | ||||
|  *  This variable is a space delimited list of the following values: | ||||
|  *    "LandscapeLeft", "LandscapeRight", "Portrait" "PortraitUpsideDown" | ||||
|  */ | ||||
| #define SDL_HINT_ORIENTATIONS "SDL_IOS_ORIENTATIONS" | ||||
|      | ||||
| /** | ||||
|  *  \brief  A variable controlling whether the Android / iOS built-in | ||||
|  *  accelerometer should be listed as a joystick device, rather than listing | ||||
|  *  actual joysticks only. | ||||
|  * | ||||
|  *  This variable can be set to the following values: | ||||
|  *    "0"       - List only real joysticks and accept input from them | ||||
|  *    "1"       - List real joysticks along with the accelerometer as if it were a 3 axis joystick (the default). | ||||
|  */ | ||||
| #define SDL_HINT_ACCELEROMETER_AS_JOYSTICK "SDL_ACCELEROMETER_AS_JOYSTICK" | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \brief  A variable that lets you disable the detection and use of Xinput gamepad devices | ||||
|  * | ||||
|  *  The variable can be set to the following values: | ||||
|  *    "0"       - Disable XInput detection (only uses direct input) | ||||
|  *    "1"       - Enable XInput detection (the default) | ||||
|  */ | ||||
| #define SDL_HINT_XINPUT_ENABLED "SDL_XINPUT_ENABLED" | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \brief  A variable that causes SDL to use the old axis and button mapping for XInput devices. | ||||
|  * | ||||
|  *  This hint is for backwards compatibility only and will be removed in SDL 2.1 | ||||
|  * | ||||
|  *  The default value is "0".  This hint must be set before SDL_Init() | ||||
|  */ | ||||
| #define SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING "SDL_XINPUT_USE_OLD_JOYSTICK_MAPPING" | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \brief  A variable that lets you manually hint extra gamecontroller db entries | ||||
|  * | ||||
|  *  The variable should be newline delimited rows of gamecontroller config data, see SDL_gamecontroller.h | ||||
|  * | ||||
|  *  This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) | ||||
|  *  You can update mappings after the system is initialized with SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping() | ||||
|  */ | ||||
| #define SDL_HINT_GAMECONTROLLERCONFIG "SDL_GAMECONTROLLERCONFIG" | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \brief  A variable that lets you enable joystick (and gamecontroller) events even when your app is in the background. | ||||
|  * | ||||
|  *  The variable can be set to the following values: | ||||
|  *    "0"       - Disable joystick & gamecontroller input events when the | ||||
|  *                application is in the background. | ||||
|  *    "1"       - Enable joystick & gamecontroller input events when the | ||||
|  *                application is in the background. | ||||
|  * | ||||
|  *  The default value is "0".  This hint may be set at any time. | ||||
|  */ | ||||
| #define SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS "SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS" | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \brief If set to "0" then never set the top most bit on a SDL Window, even if the video mode expects it. | ||||
|  *      This is a debugging aid for developers and not expected to be used by end users. The default is "1" | ||||
|  * | ||||
|  *  This variable can be set to the following values: | ||||
|  *    "0"       - don't allow topmost | ||||
|  *    "1"       - allow topmost | ||||
|  */ | ||||
| #define SDL_HINT_ALLOW_TOPMOST "SDL_ALLOW_TOPMOST" | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \brief A variable that controls the timer resolution, in milliseconds. | ||||
|  * | ||||
|  *  The higher resolution the timer, the more frequently the CPU services | ||||
|  *  timer interrupts, and the more precise delays are, but this takes up | ||||
|  *  power and CPU time.  This hint is only used on Windows 7 and earlier. | ||||
|  * | ||||
|  *  See this blog post for more information: | ||||
|  *  http://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/ | ||||
|  * | ||||
|  *  If this variable is set to "0", the system timer resolution is not set. | ||||
|  * | ||||
|  *  The default value is "1". This hint may be set at any time. | ||||
|  */ | ||||
| #define SDL_HINT_TIMER_RESOLUTION "SDL_TIMER_RESOLUTION" | ||||
|  | ||||
|  | ||||
|  | ||||
| /** | ||||
| *  \brief  A string specifying SDL's threads stack size in bytes or "0" for the backend's default size | ||||
| * | ||||
| *  Use this hint in case you need to set SDL's threads stack size to other than the default. | ||||
| *  This is specially useful if you build SDL against a non glibc libc library (such as musl) which | ||||
| *  provides a relatively small default thread stack size (a few kilobytes versus the default 8MB glibc uses). | ||||
| *  Support for this hint is currently available only in the pthread backend. | ||||
| */ | ||||
| #define SDL_HINT_THREAD_STACK_SIZE              "SDL_THREAD_STACK_SIZE" | ||||
|  | ||||
| /** | ||||
|  *  \brief If set to 1, then do not allow high-DPI windows. ("Retina" on Mac and iOS) | ||||
|  */ | ||||
| #define SDL_HINT_VIDEO_HIGHDPI_DISABLED "SDL_VIDEO_HIGHDPI_DISABLED" | ||||
|  | ||||
| /** | ||||
|  *  \brief A variable that determines whether ctrl+click should generate a right-click event on Mac | ||||
|  * | ||||
|  *  If present, holding ctrl while left clicking will generate a right click | ||||
|  *  event when on Mac. | ||||
|  */ | ||||
| #define SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK "SDL_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK" | ||||
|  | ||||
| /** | ||||
| *  \brief  A variable specifying which shader compiler to preload when using the Chrome ANGLE binaries | ||||
| * | ||||
| *  SDL has EGL and OpenGL ES2 support on Windows via the ANGLE project. It | ||||
| *  can use two different sets of binaries, those compiled by the user from source | ||||
| *  or those provided by the Chrome browser. In the later case, these binaries require | ||||
| *  that SDL loads a DLL providing the shader compiler. | ||||
| * | ||||
| *  This variable can be set to the following values: | ||||
| *    "d3dcompiler_46.dll" - default, best for Vista or later. | ||||
| *    "d3dcompiler_43.dll" - for XP support. | ||||
| *    "none" - do not load any library, useful if you compiled ANGLE from source and included the compiler in your binaries. | ||||
| * | ||||
| */ | ||||
| #define SDL_HINT_VIDEO_WIN_D3DCOMPILER              "SDL_VIDEO_WIN_D3DCOMPILER" | ||||
|  | ||||
| /** | ||||
| *  \brief  A variable that is the address of another SDL_Window* (as a hex string formatted with "%p"). | ||||
| *   | ||||
| *  If this hint is set before SDL_CreateWindowFrom() and the SDL_Window* it is set to has | ||||
| *  SDL_WINDOW_OPENGL set (and running on WGL only, currently), then two things will occur on the newly  | ||||
| *  created SDL_Window: | ||||
| * | ||||
| *  1. Its pixel format will be set to the same pixel format as this SDL_Window.  This is | ||||
| *  needed for example when sharing an OpenGL context across multiple windows. | ||||
| * | ||||
| *  2. The flag SDL_WINDOW_OPENGL will be set on the new window so it can be used for | ||||
| *  OpenGL rendering. | ||||
| * | ||||
| *  This variable can be set to the following values: | ||||
| *    The address (as a string "%p") of the SDL_Window* that new windows created with SDL_CreateWindowFrom() should | ||||
| *    share a pixel format with. | ||||
| */ | ||||
| #define SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT    "SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT" | ||||
|  | ||||
| /** | ||||
|  *  \brief A URL to a WinRT app's privacy policy | ||||
|  * | ||||
|  *  All network-enabled WinRT apps must make a privacy policy available to its | ||||
|  *  users.  On Windows 8, 8.1, and RT, Microsoft mandates that this policy be | ||||
|  *  be available in the Windows Settings charm, as accessed from within the app. | ||||
|  *  SDL provides code to add a URL-based link there, which can point to the app's | ||||
|  *  privacy policy. | ||||
|  * | ||||
|  *  To setup a URL to an app's privacy policy, set SDL_HINT_WINRT_PRIVACY_POLICY_URL | ||||
|  *  before calling any SDL_Init functions.  The contents of the hint should | ||||
|  *  be a valid URL.  For example, "http://www.example.com". | ||||
|  * | ||||
|  *  The default value is "", which will prevent SDL from adding a privacy policy | ||||
|  *  link to the Settings charm.  This hint should only be set during app init. | ||||
|  * | ||||
|  *  The label text of an app's "Privacy Policy" link may be customized via another | ||||
|  *  hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL. | ||||
|  * | ||||
|  *  Please note that on Windows Phone, Microsoft does not provide standard UI | ||||
|  *  for displaying a privacy policy link, and as such, SDL_HINT_WINRT_PRIVACY_POLICY_URL | ||||
|  *  will not get used on that platform.  Network-enabled phone apps should display | ||||
|  *  their privacy policy through some other, in-app means. | ||||
|  */ | ||||
| #define SDL_HINT_WINRT_PRIVACY_POLICY_URL "SDL_WINRT_PRIVACY_POLICY_URL" | ||||
|  | ||||
| /** \brief Label text for a WinRT app's privacy policy link | ||||
|  * | ||||
|  *  Network-enabled WinRT apps must include a privacy policy.  On Windows 8, 8.1, and RT, | ||||
|  *  Microsoft mandates that this policy be available via the Windows Settings charm. | ||||
|  *  SDL provides code to add a link there, with its label text being set via the | ||||
|  *  optional hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL. | ||||
|  * | ||||
|  *  Please note that a privacy policy's contents are not set via this hint.  A separate | ||||
|  *  hint, SDL_HINT_WINRT_PRIVACY_POLICY_URL, is used to link to the actual text of the | ||||
|  *  policy. | ||||
|  * | ||||
|  *  The contents of this hint should be encoded as a UTF8 string. | ||||
|  * | ||||
|  *  The default value is "Privacy Policy".  This hint should only be set during app | ||||
|  *  initialization, preferably before any calls to SDL_Init. | ||||
|  * | ||||
|  *  For additional information on linking to a privacy policy, see the documentation for | ||||
|  *  SDL_HINT_WINRT_PRIVACY_POLICY_URL. | ||||
|  */ | ||||
| #define SDL_HINT_WINRT_PRIVACY_POLICY_LABEL "SDL_WINRT_PRIVACY_POLICY_LABEL" | ||||
|  | ||||
| /** \brief Allows back-button-press events on Windows Phone to be marked as handled | ||||
|  * | ||||
|  *  Windows Phone devices typically feature a Back button.  When pressed, | ||||
|  *  the OS will emit back-button-press events, which apps are expected to | ||||
|  *  handle in an appropriate manner.  If apps do not explicitly mark these | ||||
|  *  events as 'Handled', then the OS will invoke its default behavior for | ||||
|  *  unhandled back-button-press events, which on Windows Phone 8 and 8.1 is to | ||||
|  *  terminate the app (and attempt to switch to the previous app, or to the | ||||
|  *  device's home screen). | ||||
|  * | ||||
|  *  Setting the SDL_HINT_WINRT_HANDLE_BACK_BUTTON hint to "1" will cause SDL | ||||
|  *  to mark back-button-press events as Handled, if and when one is sent to | ||||
|  *  the app. | ||||
|  * | ||||
|  *  Internally, Windows Phone sends back button events as parameters to | ||||
|  *  special back-button-press callback functions.  Apps that need to respond | ||||
|  *  to back-button-press events are expected to register one or more | ||||
|  *  callback functions for such, shortly after being launched (during the | ||||
|  *  app's initialization phase).  After the back button is pressed, the OS | ||||
|  *  will invoke these callbacks.  If the app's callback(s) do not explicitly | ||||
|  *  mark the event as handled by the time they return, or if the app never | ||||
|  *  registers one of these callback, the OS will consider the event | ||||
|  *  un-handled, and it will apply its default back button behavior (terminate | ||||
|  *  the app). | ||||
|  * | ||||
|  *  SDL registers its own back-button-press callback with the Windows Phone | ||||
|  *  OS.  This callback will emit a pair of SDL key-press events (SDL_KEYDOWN | ||||
|  *  and SDL_KEYUP), each with a scancode of SDL_SCANCODE_AC_BACK, after which | ||||
|  *  it will check the contents of the hint, SDL_HINT_WINRT_HANDLE_BACK_BUTTON. | ||||
|  *  If the hint's value is set to "1", the back button event's Handled | ||||
|  *  property will get set to 'true'.  If the hint's value is set to something | ||||
|  *  else, or if it is unset, SDL will leave the event's Handled property | ||||
|  *  alone.  (By default, the OS sets this property to 'false', to note.) | ||||
|  * | ||||
|  *  SDL apps can either set SDL_HINT_WINRT_HANDLE_BACK_BUTTON well before a | ||||
|  *  back button is pressed, or can set it in direct-response to a back button | ||||
|  *  being pressed. | ||||
|  * | ||||
|  *  In order to get notified when a back button is pressed, SDL apps should | ||||
|  *  register a callback function with SDL_AddEventWatch(), and have it listen | ||||
|  *  for SDL_KEYDOWN events that have a scancode of SDL_SCANCODE_AC_BACK. | ||||
|  *  (Alternatively, SDL_KEYUP events can be listened-for.  Listening for | ||||
|  *  either event type is suitable.)  Any value of SDL_HINT_WINRT_HANDLE_BACK_BUTTON | ||||
|  *  set by such a callback, will be applied to the OS' current | ||||
|  *  back-button-press event. | ||||
|  * | ||||
|  *  More details on back button behavior in Windows Phone apps can be found | ||||
|  *  at the following page, on Microsoft's developer site: | ||||
|  *  http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj247550(v=vs.105).aspx | ||||
|  */ | ||||
| #define SDL_HINT_WINRT_HANDLE_BACK_BUTTON "SDL_WINRT_HANDLE_BACK_BUTTON" | ||||
|  | ||||
| /** | ||||
|  *  \brief  A variable that dictates policy for fullscreen Spaces on Mac OS X. | ||||
|  * | ||||
|  *  This hint only applies to Mac OS X. | ||||
|  * | ||||
|  *  The variable can be set to the following values: | ||||
|  *    "0"       - Disable Spaces support (FULLSCREEN_DESKTOP won't use them and | ||||
|  *                SDL_WINDOW_RESIZABLE windows won't offer the "fullscreen" | ||||
|  *                button on their titlebars). | ||||
|  *    "1"       - Enable Spaces support (FULLSCREEN_DESKTOP will use them and | ||||
|  *                SDL_WINDOW_RESIZABLE windows will offer the "fullscreen" | ||||
|  *                button on their titlebars). | ||||
|  * | ||||
|  *  The default value is "1". Spaces are disabled regardless of this hint if | ||||
|  *   the OS isn't at least Mac OS X Lion (10.7). This hint must be set before | ||||
|  *   any windows are created. | ||||
|  */ | ||||
| #define SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES    "SDL_VIDEO_MAC_FULLSCREEN_SPACES" | ||||
|  | ||||
| /** | ||||
| *  \brief  When set don't force the SDL app to become a foreground process | ||||
| * | ||||
| *  This hint only applies to Mac OS X. | ||||
| * | ||||
| */ | ||||
| #define SDL_HINT_MAC_BACKGROUND_APP    "SDL_MAC_BACKGROUND_APP" | ||||
|  | ||||
| /** | ||||
|  * \brief Android APK expansion main file version. Should be a string number like "1", "2" etc. | ||||
|  * | ||||
|  * Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION. | ||||
|  * | ||||
|  * If both hints were set then SDL_RWFromFile() will look into expansion files | ||||
|  * after a given relative path was not found in the internal storage and assets. | ||||
|  * | ||||
|  * By default this hint is not set and the APK expansion files are not searched. | ||||
|  */ | ||||
| #define SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION" | ||||
|   | ||||
| /** | ||||
|  * \brief Android APK expansion patch file version. Should be a string number like "1", "2" etc. | ||||
|  * | ||||
|  * Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION. | ||||
|  * | ||||
|  * If both hints were set then SDL_RWFromFile() will look into expansion files | ||||
|  * after a given relative path was not found in the internal storage and assets. | ||||
|  * | ||||
|  * By default this hint is not set and the APK expansion files are not searched. | ||||
|  */ | ||||
| #define SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION" | ||||
|  | ||||
| /** | ||||
|  * \brief A variable to control whether certain IMEs should handle text editing internally instead of sending SDL_TEXTEDITING events. | ||||
|  * | ||||
|  * The variable can be set to the following values: | ||||
|  *   "0"       - SDL_TEXTEDITING events are sent, and it is the application's | ||||
|  *               responsibility to render the text from these events and  | ||||
|  *               differentiate it somehow from committed text. (default) | ||||
|  *   "1"       - If supported by the IME then SDL_TEXTEDITING events are not sent,  | ||||
|  *               and text that is being composed will be rendered in its own UI. | ||||
|  */ | ||||
| #define SDL_HINT_IME_INTERNAL_EDITING "SDL_IME_INTERNAL_EDITING" | ||||
|  | ||||
|  /** | ||||
|  * \brief A variable to control whether mouse and touch events are to be treated together or separately | ||||
|  * | ||||
|  * The variable can be set to the following values: | ||||
|  *   "0"       - Mouse events will be handled as touch events, and touch will raise fake mouse | ||||
|  *               events. This is the behaviour of SDL <= 2.0.3. (default) | ||||
|  *   "1"       - Mouse events will be handled separately from pure touch events. | ||||
|  * | ||||
|  * The value of this hint is used at runtime, so it can be changed at any time. | ||||
|  */ | ||||
| #define SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH "SDL_ANDROID_SEPARATE_MOUSE_AND_TOUCH" | ||||
|  | ||||
| /** | ||||
|  *  \brief override the binding element for keyboard inputs for Emscripten builds | ||||
|  * | ||||
|  * This hint only applies to the emscripten platform | ||||
|  * | ||||
|  * The variable can be one of | ||||
|  *    "#window"      - The javascript window object (this is the default) | ||||
|  *    "#document"    - The javascript document object | ||||
|  *    "#screen"      - the javascript window.screen object | ||||
|  *    "#canvas"      - the WebGL canvas element | ||||
|  *    any other string without a leading # sign applies to the element on the page with that ID. | ||||
|  */ | ||||
| #define SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT   "SDL_EMSCRIPTEN_KEYBOARD_ELEMENT" | ||||
|  | ||||
| /** | ||||
|  *  \brief Tell SDL not to catch the SIGINT or SIGTERM signals. | ||||
|  * | ||||
|  * This hint only applies to Unix-like platforms. | ||||
|  * | ||||
|  * The variable can be set to the following values: | ||||
|  *   "0"       - SDL will install a SIGINT and SIGTERM handler, and when it | ||||
|  *               catches a signal, convert it into an SDL_QUIT event. | ||||
|  *   "1"       - SDL will not install a signal handler at all. | ||||
|  */ | ||||
| #define SDL_HINT_NO_SIGNAL_HANDLERS   "SDL_NO_SIGNAL_HANDLERS" | ||||
|  | ||||
| /** | ||||
|  *  \brief Tell SDL not to generate window-close events for Alt+F4 on Windows. | ||||
|  * | ||||
|  * The variable can be set to the following values: | ||||
|  *   "0"       - SDL will generate a window-close event when it sees Alt+F4. | ||||
|  *   "1"       - SDL will only do normal key handling for Alt+F4. | ||||
|  */ | ||||
| #define SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4	"SDL_WINDOWS_NO_CLOSE_ON_ALT_F4" | ||||
|  | ||||
| /** | ||||
|  *  \brief  An enumeration of hint priorities | ||||
|  */ | ||||
| typedef enum | ||||
| { | ||||
|     SDL_HINT_DEFAULT, | ||||
|     SDL_HINT_NORMAL, | ||||
|     SDL_HINT_OVERRIDE | ||||
| } SDL_HintPriority; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \brief Set a hint with a specific priority | ||||
|  * | ||||
|  *  The priority controls the behavior when setting a hint that already | ||||
|  *  has a value.  Hints will replace existing hints of their priority and | ||||
|  *  lower.  Environment variables are considered to have override priority. | ||||
|  * | ||||
|  *  \return SDL_TRUE if the hint was set, SDL_FALSE otherwise | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_SetHintWithPriority(const char *name, | ||||
|                                                          const char *value, | ||||
|                                                          SDL_HintPriority priority); | ||||
|  | ||||
| /** | ||||
|  *  \brief Set a hint with normal priority | ||||
|  * | ||||
|  *  \return SDL_TRUE if the hint was set, SDL_FALSE otherwise | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_SetHint(const char *name, | ||||
|                                              const char *value); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get a hint | ||||
|  * | ||||
|  *  \return The string value of a hint variable. | ||||
|  */ | ||||
| extern DECLSPEC const char * SDLCALL SDL_GetHint(const char *name); | ||||
|  | ||||
| /** | ||||
|  *  \brief Add a function to watch a particular hint | ||||
|  * | ||||
|  *  \param name The hint to watch | ||||
|  *  \param callback The function to call when the hint value changes | ||||
|  *  \param userdata A pointer to pass to the callback function | ||||
|  */ | ||||
| typedef void (*SDL_HintCallback)(void *userdata, const char *name, const char *oldValue, const char *newValue); | ||||
| extern DECLSPEC void SDLCALL SDL_AddHintCallback(const char *name, | ||||
|                                                  SDL_HintCallback callback, | ||||
|                                                  void *userdata); | ||||
|  | ||||
| /** | ||||
|  *  \brief Remove a function watching a particular hint | ||||
|  * | ||||
|  *  \param name The hint being watched | ||||
|  *  \param callback The function being called when the hint value changes | ||||
|  *  \param userdata A pointer being passed to the callback function | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_DelHintCallback(const char *name, | ||||
|                                                  SDL_HintCallback callback, | ||||
|                                                  void *userdata); | ||||
|  | ||||
| /** | ||||
|  *  \brief  Clear all hints | ||||
|  * | ||||
|  *  This function is called during SDL_Quit() to free stored hints. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_ClearHints(void); | ||||
|  | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_hints_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,145 @@ | ||||
| /* | ||||
|   SDL_image:  An example image loading library for use with SDL | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /* A simple library to load images of various formats as SDL surfaces */ | ||||
|  | ||||
| #ifndef _SDL_IMAGE_H | ||||
| #define _SDL_IMAGE_H | ||||
|  | ||||
| #include "SDL.h" | ||||
| #include "SDL_version.h" | ||||
| #include "begin_code.h" | ||||
|  | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL | ||||
| */ | ||||
| #define SDL_IMAGE_MAJOR_VERSION 2 | ||||
| #define SDL_IMAGE_MINOR_VERSION 0 | ||||
| #define SDL_IMAGE_PATCHLEVEL    1 | ||||
|  | ||||
| /* This macro can be used to fill a version structure with the compile-time | ||||
|  * version of the SDL_image library. | ||||
|  */ | ||||
| #define SDL_IMAGE_VERSION(X)                        \ | ||||
| {                                                   \ | ||||
|     (X)->major = SDL_IMAGE_MAJOR_VERSION;           \ | ||||
|     (X)->minor = SDL_IMAGE_MINOR_VERSION;           \ | ||||
|     (X)->patch = SDL_IMAGE_PATCHLEVEL;              \ | ||||
| } | ||||
|  | ||||
| /* This function gets the version of the dynamically linked SDL_image library. | ||||
|    it should NOT be used to fill a version structure, instead you should | ||||
|    use the SDL_IMAGE_VERSION() macro. | ||||
|  */ | ||||
| extern DECLSPEC const SDL_version * SDLCALL IMG_Linked_Version(void); | ||||
|  | ||||
| typedef enum | ||||
| { | ||||
|     IMG_INIT_JPG = 0x00000001, | ||||
|     IMG_INIT_PNG = 0x00000002, | ||||
|     IMG_INIT_TIF = 0x00000004, | ||||
|     IMG_INIT_WEBP = 0x00000008 | ||||
| } IMG_InitFlags; | ||||
|  | ||||
| /* Loads dynamic libraries and prepares them for use.  Flags should be | ||||
|    one or more flags from IMG_InitFlags OR'd together. | ||||
|    It returns the flags successfully initialized, or 0 on failure. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL IMG_Init(int flags); | ||||
|  | ||||
| /* Unloads libraries loaded with IMG_Init */ | ||||
| extern DECLSPEC void SDLCALL IMG_Quit(void); | ||||
|  | ||||
| /* Load an image from an SDL data source. | ||||
|    The 'type' may be one of: "BMP", "GIF", "PNG", etc. | ||||
|  | ||||
|    If the image format supports a transparent pixel, SDL will set the | ||||
|    colorkey for the surface.  You can enable RLE acceleration on the | ||||
|    surface afterwards by calling: | ||||
|     SDL_SetColorKey(image, SDL_RLEACCEL, image->format->colorkey); | ||||
|  */ | ||||
| extern DECLSPEC SDL_Surface * SDLCALL IMG_LoadTyped_RW(SDL_RWops *src, int freesrc, const char *type); | ||||
| /* Convenience functions */ | ||||
| extern DECLSPEC SDL_Surface * SDLCALL IMG_Load(const char *file); | ||||
| extern DECLSPEC SDL_Surface * SDLCALL IMG_Load_RW(SDL_RWops *src, int freesrc); | ||||
|  | ||||
| #if SDL_VERSION_ATLEAST(2,0,0) | ||||
| /* Load an image directly into a render texture. | ||||
|  */ | ||||
| extern DECLSPEC SDL_Texture * SDLCALL IMG_LoadTexture(SDL_Renderer *renderer, const char *file); | ||||
| extern DECLSPEC SDL_Texture * SDLCALL IMG_LoadTexture_RW(SDL_Renderer *renderer, SDL_RWops *src, int freesrc); | ||||
| extern DECLSPEC SDL_Texture * SDLCALL IMG_LoadTextureTyped_RW(SDL_Renderer *renderer, SDL_RWops *src, int freesrc, const char *type); | ||||
| #endif /* SDL 2.0 */ | ||||
|  | ||||
| /* Functions to detect a file type, given a seekable source */ | ||||
| extern DECLSPEC int SDLCALL IMG_isICO(SDL_RWops *src); | ||||
| extern DECLSPEC int SDLCALL IMG_isCUR(SDL_RWops *src); | ||||
| extern DECLSPEC int SDLCALL IMG_isBMP(SDL_RWops *src); | ||||
| extern DECLSPEC int SDLCALL IMG_isGIF(SDL_RWops *src); | ||||
| extern DECLSPEC int SDLCALL IMG_isJPG(SDL_RWops *src); | ||||
| extern DECLSPEC int SDLCALL IMG_isLBM(SDL_RWops *src); | ||||
| extern DECLSPEC int SDLCALL IMG_isPCX(SDL_RWops *src); | ||||
| extern DECLSPEC int SDLCALL IMG_isPNG(SDL_RWops *src); | ||||
| extern DECLSPEC int SDLCALL IMG_isPNM(SDL_RWops *src); | ||||
| extern DECLSPEC int SDLCALL IMG_isTIF(SDL_RWops *src); | ||||
| extern DECLSPEC int SDLCALL IMG_isXCF(SDL_RWops *src); | ||||
| extern DECLSPEC int SDLCALL IMG_isXPM(SDL_RWops *src); | ||||
| extern DECLSPEC int SDLCALL IMG_isXV(SDL_RWops *src); | ||||
| extern DECLSPEC int SDLCALL IMG_isWEBP(SDL_RWops *src); | ||||
|  | ||||
| /* Individual loading functions */ | ||||
| extern DECLSPEC SDL_Surface * SDLCALL IMG_LoadICO_RW(SDL_RWops *src); | ||||
| extern DECLSPEC SDL_Surface * SDLCALL IMG_LoadCUR_RW(SDL_RWops *src); | ||||
| extern DECLSPEC SDL_Surface * SDLCALL IMG_LoadBMP_RW(SDL_RWops *src); | ||||
| extern DECLSPEC SDL_Surface * SDLCALL IMG_LoadGIF_RW(SDL_RWops *src); | ||||
| extern DECLSPEC SDL_Surface * SDLCALL IMG_LoadJPG_RW(SDL_RWops *src); | ||||
| extern DECLSPEC SDL_Surface * SDLCALL IMG_LoadLBM_RW(SDL_RWops *src); | ||||
| extern DECLSPEC SDL_Surface * SDLCALL IMG_LoadPCX_RW(SDL_RWops *src); | ||||
| extern DECLSPEC SDL_Surface * SDLCALL IMG_LoadPNG_RW(SDL_RWops *src); | ||||
| extern DECLSPEC SDL_Surface * SDLCALL IMG_LoadPNM_RW(SDL_RWops *src); | ||||
| extern DECLSPEC SDL_Surface * SDLCALL IMG_LoadTGA_RW(SDL_RWops *src); | ||||
| extern DECLSPEC SDL_Surface * SDLCALL IMG_LoadTIF_RW(SDL_RWops *src); | ||||
| extern DECLSPEC SDL_Surface * SDLCALL IMG_LoadXCF_RW(SDL_RWops *src); | ||||
| extern DECLSPEC SDL_Surface * SDLCALL IMG_LoadXPM_RW(SDL_RWops *src); | ||||
| extern DECLSPEC SDL_Surface * SDLCALL IMG_LoadXV_RW(SDL_RWops *src); | ||||
| extern DECLSPEC SDL_Surface * SDLCALL IMG_LoadWEBP_RW(SDL_RWops *src); | ||||
|  | ||||
| extern DECLSPEC SDL_Surface * SDLCALL IMG_ReadXPMFromArray(char **xpm); | ||||
|  | ||||
| /* Individual saving functions */ | ||||
| extern DECLSPEC int SDLCALL IMG_SavePNG(SDL_Surface *surface, const char *file); | ||||
| extern DECLSPEC int SDLCALL IMG_SavePNG_RW(SDL_Surface *surface, SDL_RWops *dst, int freedst); | ||||
|  | ||||
| /* We'll use SDL for reporting errors */ | ||||
| #define IMG_SetError    SDL_SetError | ||||
| #define IMG_GetError    SDL_GetError | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_IMAGE_H */ | ||||
| @@ -0,0 +1,273 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_joystick.h | ||||
|  * | ||||
|  *  Include file for SDL joystick event handling | ||||
|  * | ||||
|  * The term "device_index" identifies currently plugged in joystick devices between 0 and SDL_NumJoysticks, with the exact joystick | ||||
|  *   behind a device_index changing as joysticks are plugged and unplugged. | ||||
|  * | ||||
|  * The term "instance_id" is the current instantiation of a joystick device in the system, if the joystick is removed and then re-inserted | ||||
|  *   then it will get a new instance_id, instance_id's are monotonically increasing identifiers of a joystick plugged in. | ||||
|  * | ||||
|  * The term JoystickGUID is a stable 128-bit identifier for a joystick device that does not change over time, it identifies class of | ||||
|  *   the device (a X360 wired controller for example). This identifier is platform dependent. | ||||
|  * | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_joystick_h | ||||
| #define _SDL_joystick_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
| #include "SDL_error.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_joystick.h | ||||
|  * | ||||
|  *  In order to use these functions, SDL_Init() must have been called | ||||
|  *  with the ::SDL_INIT_JOYSTICK flag.  This causes SDL to scan the system | ||||
|  *  for joysticks, and load appropriate drivers. | ||||
|  * | ||||
|  *  If you would like to receive joystick updates while the application | ||||
|  *  is in the background, you should set the following hint before calling | ||||
|  *  SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS | ||||
|  */ | ||||
|  | ||||
| /* The joystick structure used to identify an SDL joystick */ | ||||
| struct _SDL_Joystick; | ||||
| typedef struct _SDL_Joystick SDL_Joystick; | ||||
|  | ||||
| /* A structure that encodes the stable unique id for a joystick device */ | ||||
| typedef struct { | ||||
|     Uint8 data[16]; | ||||
| } SDL_JoystickGUID; | ||||
|  | ||||
| typedef Sint32 SDL_JoystickID; | ||||
|  | ||||
| typedef enum | ||||
| { | ||||
|     SDL_JOYSTICK_POWER_UNKNOWN = -1, | ||||
|     SDL_JOYSTICK_POWER_EMPTY, | ||||
|     SDL_JOYSTICK_POWER_LOW, | ||||
|     SDL_JOYSTICK_POWER_MEDIUM, | ||||
|     SDL_JOYSTICK_POWER_FULL, | ||||
|     SDL_JOYSTICK_POWER_WIRED, | ||||
|     SDL_JOYSTICK_POWER_MAX | ||||
| } SDL_JoystickPowerLevel; | ||||
|  | ||||
| /* Function prototypes */ | ||||
| /** | ||||
|  *  Count the number of joysticks attached to the system right now | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_NumJoysticks(void); | ||||
|  | ||||
| /** | ||||
|  *  Get the implementation dependent name of a joystick. | ||||
|  *  This can be called before any joysticks are opened. | ||||
|  *  If no name can be found, this function returns NULL. | ||||
|  */ | ||||
| extern DECLSPEC const char *SDLCALL SDL_JoystickNameForIndex(int device_index); | ||||
|  | ||||
| /** | ||||
|  *  Open a joystick for use. | ||||
|  *  The index passed as an argument refers to the N'th joystick on the system. | ||||
|  *  This index is not the value which will identify this joystick in future | ||||
|  *  joystick events.  The joystick's instance id (::SDL_JoystickID) will be used | ||||
|  *  there instead. | ||||
|  * | ||||
|  *  \return A joystick identifier, or NULL if an error occurred. | ||||
|  */ | ||||
| extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickOpen(int device_index); | ||||
|  | ||||
| /** | ||||
|  * Return the SDL_Joystick associated with an instance id. | ||||
|  */ | ||||
| extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickFromInstanceID(SDL_JoystickID joyid); | ||||
|  | ||||
| /** | ||||
|  *  Return the name for this currently opened joystick. | ||||
|  *  If no name can be found, this function returns NULL. | ||||
|  */ | ||||
| extern DECLSPEC const char *SDLCALL SDL_JoystickName(SDL_Joystick * joystick); | ||||
|  | ||||
| /** | ||||
|  *  Return the GUID for the joystick at this index | ||||
|  */ | ||||
| extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetDeviceGUID(int device_index); | ||||
|  | ||||
| /** | ||||
|  *  Return the GUID for this opened joystick | ||||
|  */ | ||||
| extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetGUID(SDL_Joystick * joystick); | ||||
|  | ||||
| /** | ||||
|  *  Return a string representation for this guid. pszGUID must point to at least 33 bytes | ||||
|  *  (32 for the string plus a NULL terminator). | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_JoystickGetGUIDString(SDL_JoystickGUID guid, char *pszGUID, int cbGUID); | ||||
|  | ||||
| /** | ||||
|  *  convert a string into a joystick formatted guid | ||||
|  */ | ||||
| extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetGUIDFromString(const char *pchGUID); | ||||
|  | ||||
| /** | ||||
|  *  Returns SDL_TRUE if the joystick has been opened and currently connected, or SDL_FALSE if it has not. | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_JoystickGetAttached(SDL_Joystick * joystick); | ||||
|  | ||||
| /** | ||||
|  *  Get the instance ID of an opened joystick or -1 if the joystick is invalid. | ||||
|  */ | ||||
| extern DECLSPEC SDL_JoystickID SDLCALL SDL_JoystickInstanceID(SDL_Joystick * joystick); | ||||
|  | ||||
| /** | ||||
|  *  Get the number of general axis controls on a joystick. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_JoystickNumAxes(SDL_Joystick * joystick); | ||||
|  | ||||
| /** | ||||
|  *  Get the number of trackballs on a joystick. | ||||
|  * | ||||
|  *  Joystick trackballs have only relative motion events associated | ||||
|  *  with them and their state cannot be polled. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_JoystickNumBalls(SDL_Joystick * joystick); | ||||
|  | ||||
| /** | ||||
|  *  Get the number of POV hats on a joystick. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_JoystickNumHats(SDL_Joystick * joystick); | ||||
|  | ||||
| /** | ||||
|  *  Get the number of buttons on a joystick. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_JoystickNumButtons(SDL_Joystick * joystick); | ||||
|  | ||||
| /** | ||||
|  *  Update the current state of the open joysticks. | ||||
|  * | ||||
|  *  This is called automatically by the event loop if any joystick | ||||
|  *  events are enabled. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_JoystickUpdate(void); | ||||
|  | ||||
| /** | ||||
|  *  Enable/disable joystick event polling. | ||||
|  * | ||||
|  *  If joystick events are disabled, you must call SDL_JoystickUpdate() | ||||
|  *  yourself and check the state of the joystick when you want joystick | ||||
|  *  information. | ||||
|  * | ||||
|  *  The state can be one of ::SDL_QUERY, ::SDL_ENABLE or ::SDL_IGNORE. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_JoystickEventState(int state); | ||||
|  | ||||
| /** | ||||
|  *  Get the current state of an axis control on a joystick. | ||||
|  * | ||||
|  *  The state is a value ranging from -32768 to 32767. | ||||
|  * | ||||
|  *  The axis indices start at index 0. | ||||
|  */ | ||||
| extern DECLSPEC Sint16 SDLCALL SDL_JoystickGetAxis(SDL_Joystick * joystick, | ||||
|                                                    int axis); | ||||
|  | ||||
| /** | ||||
|  *  \name Hat positions | ||||
|  */ | ||||
| /* @{ */ | ||||
| #define SDL_HAT_CENTERED    0x00 | ||||
| #define SDL_HAT_UP          0x01 | ||||
| #define SDL_HAT_RIGHT       0x02 | ||||
| #define SDL_HAT_DOWN        0x04 | ||||
| #define SDL_HAT_LEFT        0x08 | ||||
| #define SDL_HAT_RIGHTUP     (SDL_HAT_RIGHT|SDL_HAT_UP) | ||||
| #define SDL_HAT_RIGHTDOWN   (SDL_HAT_RIGHT|SDL_HAT_DOWN) | ||||
| #define SDL_HAT_LEFTUP      (SDL_HAT_LEFT|SDL_HAT_UP) | ||||
| #define SDL_HAT_LEFTDOWN    (SDL_HAT_LEFT|SDL_HAT_DOWN) | ||||
| /* @} */ | ||||
|  | ||||
| /** | ||||
|  *  Get the current state of a POV hat on a joystick. | ||||
|  * | ||||
|  *  The hat indices start at index 0. | ||||
|  * | ||||
|  *  \return The return value is one of the following positions: | ||||
|  *           - ::SDL_HAT_CENTERED | ||||
|  *           - ::SDL_HAT_UP | ||||
|  *           - ::SDL_HAT_RIGHT | ||||
|  *           - ::SDL_HAT_DOWN | ||||
|  *           - ::SDL_HAT_LEFT | ||||
|  *           - ::SDL_HAT_RIGHTUP | ||||
|  *           - ::SDL_HAT_RIGHTDOWN | ||||
|  *           - ::SDL_HAT_LEFTUP | ||||
|  *           - ::SDL_HAT_LEFTDOWN | ||||
|  */ | ||||
| extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetHat(SDL_Joystick * joystick, | ||||
|                                                  int hat); | ||||
|  | ||||
| /** | ||||
|  *  Get the ball axis change since the last poll. | ||||
|  * | ||||
|  *  \return 0, or -1 if you passed it invalid parameters. | ||||
|  * | ||||
|  *  The ball indices start at index 0. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_JoystickGetBall(SDL_Joystick * joystick, | ||||
|                                                 int ball, int *dx, int *dy); | ||||
|  | ||||
| /** | ||||
|  *  Get the current state of a button on a joystick. | ||||
|  * | ||||
|  *  The button indices start at index 0. | ||||
|  */ | ||||
| extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetButton(SDL_Joystick * joystick, | ||||
|                                                     int button); | ||||
|  | ||||
| /** | ||||
|  *  Close a joystick previously opened with SDL_JoystickOpen(). | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_JoystickClose(SDL_Joystick * joystick); | ||||
|  | ||||
| /** | ||||
|  *  Return the battery level of this joystick | ||||
|  */ | ||||
| extern DECLSPEC SDL_JoystickPowerLevel SDLCALL SDL_JoystickCurrentPowerLevel(SDL_Joystick * joystick); | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_joystick_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,217 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_keyboard.h | ||||
|  * | ||||
|  *  Include file for SDL keyboard event handling | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_keyboard_h | ||||
| #define _SDL_keyboard_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
| #include "SDL_error.h" | ||||
| #include "SDL_keycode.h" | ||||
| #include "SDL_video.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  *  \brief The SDL keysym structure, used in key events. | ||||
|  * | ||||
|  *  \note  If you are looking for translated character input, see the ::SDL_TEXTINPUT event. | ||||
|  */ | ||||
| typedef struct SDL_Keysym | ||||
| { | ||||
|     SDL_Scancode scancode;      /**< SDL physical key code - see ::SDL_Scancode for details */ | ||||
|     SDL_Keycode sym;            /**< SDL virtual key code - see ::SDL_Keycode for details */ | ||||
|     Uint16 mod;                 /**< current key modifiers */ | ||||
|     Uint32 unused; | ||||
| } SDL_Keysym; | ||||
|  | ||||
| /* Function prototypes */ | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the window which currently has keyboard focus. | ||||
|  */ | ||||
| extern DECLSPEC SDL_Window * SDLCALL SDL_GetKeyboardFocus(void); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get a snapshot of the current state of the keyboard. | ||||
|  * | ||||
|  *  \param numkeys if non-NULL, receives the length of the returned array. | ||||
|  * | ||||
|  *  \return An array of key states. Indexes into this array are obtained by using ::SDL_Scancode values. | ||||
|  * | ||||
|  *  \b Example: | ||||
|  *  \code | ||||
|  *  const Uint8 *state = SDL_GetKeyboardState(NULL); | ||||
|  *  if ( state[SDL_SCANCODE_RETURN] )   { | ||||
|  *      printf("<RETURN> is pressed.\n"); | ||||
|  *  } | ||||
|  *  \endcode | ||||
|  */ | ||||
| extern DECLSPEC const Uint8 *SDLCALL SDL_GetKeyboardState(int *numkeys); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the current key modifier state for the keyboard. | ||||
|  */ | ||||
| extern DECLSPEC SDL_Keymod SDLCALL SDL_GetModState(void); | ||||
|  | ||||
| /** | ||||
|  *  \brief Set the current key modifier state for the keyboard. | ||||
|  * | ||||
|  *  \note This does not change the keyboard state, only the key modifier flags. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_SetModState(SDL_Keymod modstate); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the key code corresponding to the given scancode according | ||||
|  *         to the current keyboard layout. | ||||
|  * | ||||
|  *  See ::SDL_Keycode for details. | ||||
|  * | ||||
|  *  \sa SDL_GetKeyName() | ||||
|  */ | ||||
| extern DECLSPEC SDL_Keycode SDLCALL SDL_GetKeyFromScancode(SDL_Scancode scancode); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the scancode corresponding to the given key code according to the | ||||
|  *         current keyboard layout. | ||||
|  * | ||||
|  *  See ::SDL_Scancode for details. | ||||
|  * | ||||
|  *  \sa SDL_GetScancodeName() | ||||
|  */ | ||||
| extern DECLSPEC SDL_Scancode SDLCALL SDL_GetScancodeFromKey(SDL_Keycode key); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get a human-readable name for a scancode. | ||||
|  * | ||||
|  *  \return A pointer to the name for the scancode. | ||||
|  *          If the scancode doesn't have a name, this function returns | ||||
|  *          an empty string (""). | ||||
|  * | ||||
|  *  \sa SDL_Scancode | ||||
|  */ | ||||
| extern DECLSPEC const char *SDLCALL SDL_GetScancodeName(SDL_Scancode scancode); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get a scancode from a human-readable name | ||||
|  * | ||||
|  *  \return scancode, or SDL_SCANCODE_UNKNOWN if the name wasn't recognized | ||||
|  * | ||||
|  *  \sa SDL_Scancode | ||||
|  */ | ||||
| extern DECLSPEC SDL_Scancode SDLCALL SDL_GetScancodeFromName(const char *name); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get a human-readable name for a key. | ||||
|  * | ||||
|  *  \return A pointer to a UTF-8 string that stays valid at least until the next | ||||
|  *          call to this function. If you need it around any longer, you must | ||||
|  *          copy it.  If the key doesn't have a name, this function returns an | ||||
|  *          empty string (""). | ||||
|  * | ||||
|  *  \sa SDL_Key | ||||
|  */ | ||||
| extern DECLSPEC const char *SDLCALL SDL_GetKeyName(SDL_Keycode key); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get a key code from a human-readable name | ||||
|  * | ||||
|  *  \return key code, or SDLK_UNKNOWN if the name wasn't recognized | ||||
|  * | ||||
|  *  \sa SDL_Keycode | ||||
|  */ | ||||
| extern DECLSPEC SDL_Keycode SDLCALL SDL_GetKeyFromName(const char *name); | ||||
|  | ||||
| /** | ||||
|  *  \brief Start accepting Unicode text input events. | ||||
|  *         This function will show the on-screen keyboard if supported. | ||||
|  * | ||||
|  *  \sa SDL_StopTextInput() | ||||
|  *  \sa SDL_SetTextInputRect() | ||||
|  *  \sa SDL_HasScreenKeyboardSupport() | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_StartTextInput(void); | ||||
|  | ||||
| /** | ||||
|  *  \brief Return whether or not Unicode text input events are enabled. | ||||
|  * | ||||
|  *  \sa SDL_StartTextInput() | ||||
|  *  \sa SDL_StopTextInput() | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_IsTextInputActive(void); | ||||
|  | ||||
| /** | ||||
|  *  \brief Stop receiving any text input events. | ||||
|  *         This function will hide the on-screen keyboard if supported. | ||||
|  * | ||||
|  *  \sa SDL_StartTextInput() | ||||
|  *  \sa SDL_HasScreenKeyboardSupport() | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_StopTextInput(void); | ||||
|  | ||||
| /** | ||||
|  *  \brief Set the rectangle used to type Unicode text inputs. | ||||
|  *         This is used as a hint for IME and on-screen keyboard placement. | ||||
|  * | ||||
|  *  \sa SDL_StartTextInput() | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_SetTextInputRect(SDL_Rect *rect); | ||||
|  | ||||
| /** | ||||
|  *  \brief Returns whether the platform has some screen keyboard support. | ||||
|  * | ||||
|  *  \return SDL_TRUE if some keyboard support is available else SDL_FALSE. | ||||
|  * | ||||
|  *  \note Not all screen keyboard functions are supported on all platforms. | ||||
|  * | ||||
|  *  \sa SDL_IsScreenKeyboardShown() | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_HasScreenKeyboardSupport(void); | ||||
|  | ||||
| /** | ||||
|  *  \brief Returns whether the screen keyboard is shown for given window. | ||||
|  * | ||||
|  *  \param window The window for which screen keyboard should be queried. | ||||
|  * | ||||
|  *  \return SDL_TRUE if screen keyboard is shown else SDL_FALSE. | ||||
|  * | ||||
|  *  \sa SDL_HasScreenKeyboardSupport() | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_IsScreenKeyboardShown(SDL_Window *window); | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_keyboard_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,341 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_keycode.h | ||||
|  * | ||||
|  *  Defines constants which identify keyboard keys and modifiers. | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_keycode_h | ||||
| #define _SDL_keycode_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
| #include "SDL_scancode.h" | ||||
|  | ||||
| /** | ||||
|  *  \brief The SDL virtual key representation. | ||||
|  * | ||||
|  *  Values of this type are used to represent keyboard keys using the current | ||||
|  *  layout of the keyboard.  These values include Unicode values representing | ||||
|  *  the unmodified character that would be generated by pressing the key, or | ||||
|  *  an SDLK_* constant for those keys that do not generate characters. | ||||
|  */ | ||||
| typedef Sint32 SDL_Keycode; | ||||
|  | ||||
| #define SDLK_SCANCODE_MASK (1<<30) | ||||
| #define SDL_SCANCODE_TO_KEYCODE(X)  (X | SDLK_SCANCODE_MASK) | ||||
|  | ||||
| enum | ||||
| { | ||||
|     SDLK_UNKNOWN = 0, | ||||
|  | ||||
|     SDLK_RETURN = '\r', | ||||
|     SDLK_ESCAPE = '\033', | ||||
|     SDLK_BACKSPACE = '\b', | ||||
|     SDLK_TAB = '\t', | ||||
|     SDLK_SPACE = ' ', | ||||
|     SDLK_EXCLAIM = '!', | ||||
|     SDLK_QUOTEDBL = '"', | ||||
|     SDLK_HASH = '#', | ||||
|     SDLK_PERCENT = '%', | ||||
|     SDLK_DOLLAR = '$', | ||||
|     SDLK_AMPERSAND = '&', | ||||
|     SDLK_QUOTE = '\'', | ||||
|     SDLK_LEFTPAREN = '(', | ||||
|     SDLK_RIGHTPAREN = ')', | ||||
|     SDLK_ASTERISK = '*', | ||||
|     SDLK_PLUS = '+', | ||||
|     SDLK_COMMA = ',', | ||||
|     SDLK_MINUS = '-', | ||||
|     SDLK_PERIOD = '.', | ||||
|     SDLK_SLASH = '/', | ||||
|     SDLK_0 = '0', | ||||
|     SDLK_1 = '1', | ||||
|     SDLK_2 = '2', | ||||
|     SDLK_3 = '3', | ||||
|     SDLK_4 = '4', | ||||
|     SDLK_5 = '5', | ||||
|     SDLK_6 = '6', | ||||
|     SDLK_7 = '7', | ||||
|     SDLK_8 = '8', | ||||
|     SDLK_9 = '9', | ||||
|     SDLK_COLON = ':', | ||||
|     SDLK_SEMICOLON = ';', | ||||
|     SDLK_LESS = '<', | ||||
|     SDLK_EQUALS = '=', | ||||
|     SDLK_GREATER = '>', | ||||
|     SDLK_QUESTION = '?', | ||||
|     SDLK_AT = '@', | ||||
|     /* | ||||
|        Skip uppercase letters | ||||
|      */ | ||||
|     SDLK_LEFTBRACKET = '[', | ||||
|     SDLK_BACKSLASH = '\\', | ||||
|     SDLK_RIGHTBRACKET = ']', | ||||
|     SDLK_CARET = '^', | ||||
|     SDLK_UNDERSCORE = '_', | ||||
|     SDLK_BACKQUOTE = '`', | ||||
|     SDLK_a = 'a', | ||||
|     SDLK_b = 'b', | ||||
|     SDLK_c = 'c', | ||||
|     SDLK_d = 'd', | ||||
|     SDLK_e = 'e', | ||||
|     SDLK_f = 'f', | ||||
|     SDLK_g = 'g', | ||||
|     SDLK_h = 'h', | ||||
|     SDLK_i = 'i', | ||||
|     SDLK_j = 'j', | ||||
|     SDLK_k = 'k', | ||||
|     SDLK_l = 'l', | ||||
|     SDLK_m = 'm', | ||||
|     SDLK_n = 'n', | ||||
|     SDLK_o = 'o', | ||||
|     SDLK_p = 'p', | ||||
|     SDLK_q = 'q', | ||||
|     SDLK_r = 'r', | ||||
|     SDLK_s = 's', | ||||
|     SDLK_t = 't', | ||||
|     SDLK_u = 'u', | ||||
|     SDLK_v = 'v', | ||||
|     SDLK_w = 'w', | ||||
|     SDLK_x = 'x', | ||||
|     SDLK_y = 'y', | ||||
|     SDLK_z = 'z', | ||||
|  | ||||
|     SDLK_CAPSLOCK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CAPSLOCK), | ||||
|  | ||||
|     SDLK_F1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F1), | ||||
|     SDLK_F2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F2), | ||||
|     SDLK_F3 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F3), | ||||
|     SDLK_F4 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F4), | ||||
|     SDLK_F5 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F5), | ||||
|     SDLK_F6 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F6), | ||||
|     SDLK_F7 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F7), | ||||
|     SDLK_F8 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F8), | ||||
|     SDLK_F9 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F9), | ||||
|     SDLK_F10 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F10), | ||||
|     SDLK_F11 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F11), | ||||
|     SDLK_F12 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F12), | ||||
|  | ||||
|     SDLK_PRINTSCREEN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PRINTSCREEN), | ||||
|     SDLK_SCROLLLOCK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SCROLLLOCK), | ||||
|     SDLK_PAUSE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAUSE), | ||||
|     SDLK_INSERT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_INSERT), | ||||
|     SDLK_HOME = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_HOME), | ||||
|     SDLK_PAGEUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAGEUP), | ||||
|     SDLK_DELETE = '\177', | ||||
|     SDLK_END = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_END), | ||||
|     SDLK_PAGEDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAGEDOWN), | ||||
|     SDLK_RIGHT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RIGHT), | ||||
|     SDLK_LEFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LEFT), | ||||
|     SDLK_DOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DOWN), | ||||
|     SDLK_UP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_UP), | ||||
|  | ||||
|     SDLK_NUMLOCKCLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_NUMLOCKCLEAR), | ||||
|     SDLK_KP_DIVIDE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DIVIDE), | ||||
|     SDLK_KP_MULTIPLY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MULTIPLY), | ||||
|     SDLK_KP_MINUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MINUS), | ||||
|     SDLK_KP_PLUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PLUS), | ||||
|     SDLK_KP_ENTER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_ENTER), | ||||
|     SDLK_KP_1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_1), | ||||
|     SDLK_KP_2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_2), | ||||
|     SDLK_KP_3 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_3), | ||||
|     SDLK_KP_4 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_4), | ||||
|     SDLK_KP_5 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_5), | ||||
|     SDLK_KP_6 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_6), | ||||
|     SDLK_KP_7 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_7), | ||||
|     SDLK_KP_8 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_8), | ||||
|     SDLK_KP_9 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_9), | ||||
|     SDLK_KP_0 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_0), | ||||
|     SDLK_KP_PERIOD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PERIOD), | ||||
|  | ||||
|     SDLK_APPLICATION = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APPLICATION), | ||||
|     SDLK_POWER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_POWER), | ||||
|     SDLK_KP_EQUALS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EQUALS), | ||||
|     SDLK_F13 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F13), | ||||
|     SDLK_F14 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F14), | ||||
|     SDLK_F15 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F15), | ||||
|     SDLK_F16 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F16), | ||||
|     SDLK_F17 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F17), | ||||
|     SDLK_F18 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F18), | ||||
|     SDLK_F19 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F19), | ||||
|     SDLK_F20 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F20), | ||||
|     SDLK_F21 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F21), | ||||
|     SDLK_F22 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F22), | ||||
|     SDLK_F23 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F23), | ||||
|     SDLK_F24 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F24), | ||||
|     SDLK_EXECUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EXECUTE), | ||||
|     SDLK_HELP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_HELP), | ||||
|     SDLK_MENU = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MENU), | ||||
|     SDLK_SELECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SELECT), | ||||
|     SDLK_STOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_STOP), | ||||
|     SDLK_AGAIN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AGAIN), | ||||
|     SDLK_UNDO = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_UNDO), | ||||
|     SDLK_CUT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CUT), | ||||
|     SDLK_COPY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_COPY), | ||||
|     SDLK_PASTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PASTE), | ||||
|     SDLK_FIND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_FIND), | ||||
|     SDLK_MUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MUTE), | ||||
|     SDLK_VOLUMEUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_VOLUMEUP), | ||||
|     SDLK_VOLUMEDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_VOLUMEDOWN), | ||||
|     SDLK_KP_COMMA = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_COMMA), | ||||
|     SDLK_KP_EQUALSAS400 = | ||||
|         SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EQUALSAS400), | ||||
|  | ||||
|     SDLK_ALTERASE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_ALTERASE), | ||||
|     SDLK_SYSREQ = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SYSREQ), | ||||
|     SDLK_CANCEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CANCEL), | ||||
|     SDLK_CLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CLEAR), | ||||
|     SDLK_PRIOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PRIOR), | ||||
|     SDLK_RETURN2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RETURN2), | ||||
|     SDLK_SEPARATOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SEPARATOR), | ||||
|     SDLK_OUT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_OUT), | ||||
|     SDLK_OPER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_OPER), | ||||
|     SDLK_CLEARAGAIN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CLEARAGAIN), | ||||
|     SDLK_CRSEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CRSEL), | ||||
|     SDLK_EXSEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EXSEL), | ||||
|  | ||||
|     SDLK_KP_00 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_00), | ||||
|     SDLK_KP_000 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_000), | ||||
|     SDLK_THOUSANDSSEPARATOR = | ||||
|         SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_THOUSANDSSEPARATOR), | ||||
|     SDLK_DECIMALSEPARATOR = | ||||
|         SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DECIMALSEPARATOR), | ||||
|     SDLK_CURRENCYUNIT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CURRENCYUNIT), | ||||
|     SDLK_CURRENCYSUBUNIT = | ||||
|         SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CURRENCYSUBUNIT), | ||||
|     SDLK_KP_LEFTPAREN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LEFTPAREN), | ||||
|     SDLK_KP_RIGHTPAREN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_RIGHTPAREN), | ||||
|     SDLK_KP_LEFTBRACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LEFTBRACE), | ||||
|     SDLK_KP_RIGHTBRACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_RIGHTBRACE), | ||||
|     SDLK_KP_TAB = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_TAB), | ||||
|     SDLK_KP_BACKSPACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_BACKSPACE), | ||||
|     SDLK_KP_A = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_A), | ||||
|     SDLK_KP_B = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_B), | ||||
|     SDLK_KP_C = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_C), | ||||
|     SDLK_KP_D = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_D), | ||||
|     SDLK_KP_E = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_E), | ||||
|     SDLK_KP_F = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_F), | ||||
|     SDLK_KP_XOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_XOR), | ||||
|     SDLK_KP_POWER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_POWER), | ||||
|     SDLK_KP_PERCENT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PERCENT), | ||||
|     SDLK_KP_LESS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LESS), | ||||
|     SDLK_KP_GREATER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_GREATER), | ||||
|     SDLK_KP_AMPERSAND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_AMPERSAND), | ||||
|     SDLK_KP_DBLAMPERSAND = | ||||
|         SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DBLAMPERSAND), | ||||
|     SDLK_KP_VERTICALBAR = | ||||
|         SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_VERTICALBAR), | ||||
|     SDLK_KP_DBLVERTICALBAR = | ||||
|         SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DBLVERTICALBAR), | ||||
|     SDLK_KP_COLON = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_COLON), | ||||
|     SDLK_KP_HASH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_HASH), | ||||
|     SDLK_KP_SPACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_SPACE), | ||||
|     SDLK_KP_AT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_AT), | ||||
|     SDLK_KP_EXCLAM = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EXCLAM), | ||||
|     SDLK_KP_MEMSTORE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMSTORE), | ||||
|     SDLK_KP_MEMRECALL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMRECALL), | ||||
|     SDLK_KP_MEMCLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMCLEAR), | ||||
|     SDLK_KP_MEMADD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMADD), | ||||
|     SDLK_KP_MEMSUBTRACT = | ||||
|         SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMSUBTRACT), | ||||
|     SDLK_KP_MEMMULTIPLY = | ||||
|         SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMMULTIPLY), | ||||
|     SDLK_KP_MEMDIVIDE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMDIVIDE), | ||||
|     SDLK_KP_PLUSMINUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PLUSMINUS), | ||||
|     SDLK_KP_CLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_CLEAR), | ||||
|     SDLK_KP_CLEARENTRY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_CLEARENTRY), | ||||
|     SDLK_KP_BINARY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_BINARY), | ||||
|     SDLK_KP_OCTAL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_OCTAL), | ||||
|     SDLK_KP_DECIMAL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DECIMAL), | ||||
|     SDLK_KP_HEXADECIMAL = | ||||
|         SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_HEXADECIMAL), | ||||
|  | ||||
|     SDLK_LCTRL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LCTRL), | ||||
|     SDLK_LSHIFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LSHIFT), | ||||
|     SDLK_LALT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LALT), | ||||
|     SDLK_LGUI = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LGUI), | ||||
|     SDLK_RCTRL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RCTRL), | ||||
|     SDLK_RSHIFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RSHIFT), | ||||
|     SDLK_RALT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RALT), | ||||
|     SDLK_RGUI = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RGUI), | ||||
|  | ||||
|     SDLK_MODE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MODE), | ||||
|  | ||||
|     SDLK_AUDIONEXT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIONEXT), | ||||
|     SDLK_AUDIOPREV = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOPREV), | ||||
|     SDLK_AUDIOSTOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOSTOP), | ||||
|     SDLK_AUDIOPLAY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOPLAY), | ||||
|     SDLK_AUDIOMUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOMUTE), | ||||
|     SDLK_MEDIASELECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIASELECT), | ||||
|     SDLK_WWW = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_WWW), | ||||
|     SDLK_MAIL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MAIL), | ||||
|     SDLK_CALCULATOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CALCULATOR), | ||||
|     SDLK_COMPUTER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_COMPUTER), | ||||
|     SDLK_AC_SEARCH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_SEARCH), | ||||
|     SDLK_AC_HOME = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_HOME), | ||||
|     SDLK_AC_BACK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_BACK), | ||||
|     SDLK_AC_FORWARD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_FORWARD), | ||||
|     SDLK_AC_STOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_STOP), | ||||
|     SDLK_AC_REFRESH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_REFRESH), | ||||
|     SDLK_AC_BOOKMARKS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_BOOKMARKS), | ||||
|  | ||||
|     SDLK_BRIGHTNESSDOWN = | ||||
|         SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_BRIGHTNESSDOWN), | ||||
|     SDLK_BRIGHTNESSUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_BRIGHTNESSUP), | ||||
|     SDLK_DISPLAYSWITCH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DISPLAYSWITCH), | ||||
|     SDLK_KBDILLUMTOGGLE = | ||||
|         SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMTOGGLE), | ||||
|     SDLK_KBDILLUMDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMDOWN), | ||||
|     SDLK_KBDILLUMUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMUP), | ||||
|     SDLK_EJECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EJECT), | ||||
|     SDLK_SLEEP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SLEEP) | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * \brief Enumeration of valid key mods (possibly OR'd together). | ||||
|  */ | ||||
| typedef enum | ||||
| { | ||||
|     KMOD_NONE = 0x0000, | ||||
|     KMOD_LSHIFT = 0x0001, | ||||
|     KMOD_RSHIFT = 0x0002, | ||||
|     KMOD_LCTRL = 0x0040, | ||||
|     KMOD_RCTRL = 0x0080, | ||||
|     KMOD_LALT = 0x0100, | ||||
|     KMOD_RALT = 0x0200, | ||||
|     KMOD_LGUI = 0x0400, | ||||
|     KMOD_RGUI = 0x0800, | ||||
|     KMOD_NUM = 0x1000, | ||||
|     KMOD_CAPS = 0x2000, | ||||
|     KMOD_MODE = 0x4000, | ||||
|     KMOD_RESERVED = 0x8000 | ||||
| } SDL_Keymod; | ||||
|  | ||||
| #define KMOD_CTRL   (KMOD_LCTRL|KMOD_RCTRL) | ||||
| #define KMOD_SHIFT  (KMOD_LSHIFT|KMOD_RSHIFT) | ||||
| #define KMOD_ALT    (KMOD_LALT|KMOD_RALT) | ||||
| #define KMOD_GUI    (KMOD_LGUI|KMOD_RGUI) | ||||
|  | ||||
| #endif /* _SDL_keycode_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,81 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_loadso.h | ||||
|  * | ||||
|  *  System dependent library loading routines | ||||
|  * | ||||
|  *  Some things to keep in mind: | ||||
|  *  \li These functions only work on C function names.  Other languages may | ||||
|  *      have name mangling and intrinsic language support that varies from | ||||
|  *      compiler to compiler. | ||||
|  *  \li Make sure you declare your function pointers with the same calling | ||||
|  *      convention as the actual library function.  Your code will crash | ||||
|  *      mysteriously if you do not do this. | ||||
|  *  \li Avoid namespace collisions.  If you load a symbol from the library, | ||||
|  *      it is not defined whether or not it goes into the global symbol | ||||
|  *      namespace for the application.  If it does and it conflicts with | ||||
|  *      symbols in your code or other shared libraries, you will not get | ||||
|  *      the results you expect. :) | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_loadso_h | ||||
| #define _SDL_loadso_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
| #include "SDL_error.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  *  This function dynamically loads a shared object and returns a pointer | ||||
|  *  to the object handle (or NULL if there was an error). | ||||
|  *  The 'sofile' parameter is a system dependent name of the object file. | ||||
|  */ | ||||
| extern DECLSPEC void *SDLCALL SDL_LoadObject(const char *sofile); | ||||
|  | ||||
| /** | ||||
|  *  Given an object handle, this function looks up the address of the | ||||
|  *  named function in the shared object and returns it.  This address | ||||
|  *  is no longer valid after calling SDL_UnloadObject(). | ||||
|  */ | ||||
| extern DECLSPEC void *SDLCALL SDL_LoadFunction(void *handle, | ||||
|                                                const char *name); | ||||
|  | ||||
| /** | ||||
|  *  Unload a shared object from memory. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_UnloadObject(void *handle); | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_loadso_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,211 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_log.h | ||||
|  * | ||||
|  *  Simple log messages with categories and priorities. | ||||
|  * | ||||
|  *  By default logs are quiet, but if you're debugging SDL you might want: | ||||
|  * | ||||
|  *      SDL_LogSetAllPriority(SDL_LOG_PRIORITY_WARN); | ||||
|  * | ||||
|  *  Here's where the messages go on different platforms: | ||||
|  *      Windows: debug output stream | ||||
|  *      Android: log output | ||||
|  *      Others: standard error output (stderr) | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_log_h | ||||
| #define _SDL_log_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \brief The maximum size of a log message | ||||
|  * | ||||
|  *  Messages longer than the maximum size will be truncated | ||||
|  */ | ||||
| #define SDL_MAX_LOG_MESSAGE 4096 | ||||
|  | ||||
| /** | ||||
|  *  \brief The predefined log categories | ||||
|  * | ||||
|  *  By default the application category is enabled at the INFO level, | ||||
|  *  the assert category is enabled at the WARN level, test is enabled | ||||
|  *  at the VERBOSE level and all other categories are enabled at the | ||||
|  *  CRITICAL level. | ||||
|  */ | ||||
| enum | ||||
| { | ||||
|     SDL_LOG_CATEGORY_APPLICATION, | ||||
|     SDL_LOG_CATEGORY_ERROR, | ||||
|     SDL_LOG_CATEGORY_ASSERT, | ||||
|     SDL_LOG_CATEGORY_SYSTEM, | ||||
|     SDL_LOG_CATEGORY_AUDIO, | ||||
|     SDL_LOG_CATEGORY_VIDEO, | ||||
|     SDL_LOG_CATEGORY_RENDER, | ||||
|     SDL_LOG_CATEGORY_INPUT, | ||||
|     SDL_LOG_CATEGORY_TEST, | ||||
|  | ||||
|     /* Reserved for future SDL library use */ | ||||
|     SDL_LOG_CATEGORY_RESERVED1, | ||||
|     SDL_LOG_CATEGORY_RESERVED2, | ||||
|     SDL_LOG_CATEGORY_RESERVED3, | ||||
|     SDL_LOG_CATEGORY_RESERVED4, | ||||
|     SDL_LOG_CATEGORY_RESERVED5, | ||||
|     SDL_LOG_CATEGORY_RESERVED6, | ||||
|     SDL_LOG_CATEGORY_RESERVED7, | ||||
|     SDL_LOG_CATEGORY_RESERVED8, | ||||
|     SDL_LOG_CATEGORY_RESERVED9, | ||||
|     SDL_LOG_CATEGORY_RESERVED10, | ||||
|  | ||||
|     /* Beyond this point is reserved for application use, e.g. | ||||
|        enum { | ||||
|            MYAPP_CATEGORY_AWESOME1 = SDL_LOG_CATEGORY_CUSTOM, | ||||
|            MYAPP_CATEGORY_AWESOME2, | ||||
|            MYAPP_CATEGORY_AWESOME3, | ||||
|            ... | ||||
|        }; | ||||
|      */ | ||||
|     SDL_LOG_CATEGORY_CUSTOM | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  *  \brief The predefined log priorities | ||||
|  */ | ||||
| typedef enum | ||||
| { | ||||
|     SDL_LOG_PRIORITY_VERBOSE = 1, | ||||
|     SDL_LOG_PRIORITY_DEBUG, | ||||
|     SDL_LOG_PRIORITY_INFO, | ||||
|     SDL_LOG_PRIORITY_WARN, | ||||
|     SDL_LOG_PRIORITY_ERROR, | ||||
|     SDL_LOG_PRIORITY_CRITICAL, | ||||
|     SDL_NUM_LOG_PRIORITIES | ||||
| } SDL_LogPriority; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \brief Set the priority of all log categories | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_LogSetAllPriority(SDL_LogPriority priority); | ||||
|  | ||||
| /** | ||||
|  *  \brief Set the priority of a particular log category | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_LogSetPriority(int category, | ||||
|                                                 SDL_LogPriority priority); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the priority of a particular log category | ||||
|  */ | ||||
| extern DECLSPEC SDL_LogPriority SDLCALL SDL_LogGetPriority(int category); | ||||
|  | ||||
| /** | ||||
|  *  \brief Reset all priorities to default. | ||||
|  * | ||||
|  *  \note This is called in SDL_Quit(). | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_LogResetPriorities(void); | ||||
|  | ||||
| /** | ||||
|  *  \brief Log a message with SDL_LOG_CATEGORY_APPLICATION and SDL_LOG_PRIORITY_INFO | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); | ||||
|  | ||||
| /** | ||||
|  *  \brief Log a message with SDL_LOG_PRIORITY_VERBOSE | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_LogVerbose(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); | ||||
|  | ||||
| /** | ||||
|  *  \brief Log a message with SDL_LOG_PRIORITY_DEBUG | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_LogDebug(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); | ||||
|  | ||||
| /** | ||||
|  *  \brief Log a message with SDL_LOG_PRIORITY_INFO | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_LogInfo(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); | ||||
|  | ||||
| /** | ||||
|  *  \brief Log a message with SDL_LOG_PRIORITY_WARN | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_LogWarn(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); | ||||
|  | ||||
| /** | ||||
|  *  \brief Log a message with SDL_LOG_PRIORITY_ERROR | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_LogError(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); | ||||
|  | ||||
| /** | ||||
|  *  \brief Log a message with SDL_LOG_PRIORITY_CRITICAL | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_LogCritical(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); | ||||
|  | ||||
| /** | ||||
|  *  \brief Log a message with the specified category and priority. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_LogMessage(int category, | ||||
|                                             SDL_LogPriority priority, | ||||
|                                             SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(3); | ||||
|  | ||||
| /** | ||||
|  *  \brief Log a message with the specified category and priority. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_LogMessageV(int category, | ||||
|                                              SDL_LogPriority priority, | ||||
|                                              const char *fmt, va_list ap); | ||||
|  | ||||
| /** | ||||
|  *  \brief The prototype for the log output function | ||||
|  */ | ||||
| typedef void (*SDL_LogOutputFunction)(void *userdata, int category, SDL_LogPriority priority, const char *message); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the current log output function. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_LogGetOutputFunction(SDL_LogOutputFunction *callback, void **userdata); | ||||
|  | ||||
| /** | ||||
|  *  \brief This function allows you to replace the default log output | ||||
|  *         function with one of your own. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_LogSetOutputFunction(SDL_LogOutputFunction callback, void *userdata); | ||||
|  | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_log_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,161 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_main_h | ||||
| #define _SDL_main_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_main.h | ||||
|  * | ||||
|  *  Redefine main() on some platforms so that it is called by SDL. | ||||
|  */ | ||||
|  | ||||
| #ifndef SDL_MAIN_HANDLED | ||||
| #if defined(__WIN32__) | ||||
| /* On Windows SDL provides WinMain(), which parses the command line and passes | ||||
|    the arguments to your main function. | ||||
|  | ||||
|    If you provide your own WinMain(), you may define SDL_MAIN_HANDLED | ||||
|  */ | ||||
| #define SDL_MAIN_AVAILABLE | ||||
|  | ||||
| #elif defined(__WINRT__) | ||||
| /* On WinRT, SDL provides a main function that initializes CoreApplication, | ||||
|    creating an instance of IFrameworkView in the process. | ||||
|  | ||||
|    Please note that #include'ing SDL_main.h is not enough to get a main() | ||||
|    function working.  In non-XAML apps, the file, | ||||
|    src/main/winrt/SDL_WinRT_main_NonXAML.cpp, or a copy of it, must be compiled | ||||
|    into the app itself.  In XAML apps, the function, SDL_WinRTRunApp must be | ||||
|    called, with a pointer to the Direct3D-hosted XAML control passed in. | ||||
| */ | ||||
| #define SDL_MAIN_NEEDED | ||||
|  | ||||
| #elif defined(__IPHONEOS__) | ||||
| /* On iOS SDL provides a main function that creates an application delegate | ||||
|    and starts the iOS application run loop. | ||||
|  | ||||
|    See src/video/uikit/SDL_uikitappdelegate.m for more details. | ||||
|  */ | ||||
| #define SDL_MAIN_NEEDED | ||||
|  | ||||
| #elif defined(__ANDROID__) | ||||
| /* On Android SDL provides a Java class in SDLActivity.java that is the | ||||
|    main activity entry point. | ||||
|  | ||||
|    See README-android.txt for more details on extending that class. | ||||
|  */ | ||||
| #define SDL_MAIN_NEEDED | ||||
|  | ||||
| #elif defined(__NACL__) | ||||
| /* On NACL we use ppapi_simple to set up the application helper code, | ||||
|    then wait for the first PSE_INSTANCE_DIDCHANGEVIEW event before  | ||||
|    starting the user main function. | ||||
|    All user code is run in a separate thread by ppapi_simple, thus  | ||||
|    allowing for blocking io to take place via nacl_io | ||||
| */ | ||||
| #define SDL_MAIN_NEEDED | ||||
|  | ||||
| #endif | ||||
| #endif /* SDL_MAIN_HANDLED */ | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| #define C_LINKAGE   "C" | ||||
| #else | ||||
| #define C_LINKAGE | ||||
| #endif /* __cplusplus */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_main.h | ||||
|  * | ||||
|  *  The application's main() function must be called with C linkage, | ||||
|  *  and should be declared like this: | ||||
|  *  \code | ||||
|  *  #ifdef __cplusplus | ||||
|  *  extern "C" | ||||
|  *  #endif | ||||
|  *  int main(int argc, char *argv[]) | ||||
|  *  { | ||||
|  *  } | ||||
|  *  \endcode | ||||
|  */ | ||||
|  | ||||
| #if defined(SDL_MAIN_NEEDED) || defined(SDL_MAIN_AVAILABLE) | ||||
| #define main    SDL_main | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  *  The prototype for the application's main() function | ||||
|  */ | ||||
| extern C_LINKAGE int SDL_main(int argc, char *argv[]); | ||||
|  | ||||
|  | ||||
| #include "begin_code.h" | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  *  This is called by the real SDL main function to let the rest of the | ||||
|  *  library know that initialization was done properly. | ||||
|  * | ||||
|  *  Calling this yourself without knowing what you're doing can cause | ||||
|  *  crashes and hard to diagnose problems with your application. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_SetMainReady(void); | ||||
|  | ||||
| #ifdef __WIN32__ | ||||
|  | ||||
| /** | ||||
|  *  This can be called to set the application class at startup | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_RegisterApp(char *name, Uint32 style, | ||||
|                                             void *hInst); | ||||
| extern DECLSPEC void SDLCALL SDL_UnregisterApp(void); | ||||
|  | ||||
| #endif /* __WIN32__ */ | ||||
|  | ||||
|  | ||||
| #ifdef __WINRT__ | ||||
|  | ||||
| /** | ||||
|  *  \brief Initializes and launches an SDL/WinRT application. | ||||
|  * | ||||
|  *  \param mainFunction The SDL app's C-style main(). | ||||
|  *  \param reserved Reserved for future use; should be NULL | ||||
|  *  \return 0 on success, -1 on failure.  On failure, use SDL_GetError to retrieve more | ||||
|  *      information on the failure. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_WinRTRunApp(int (*mainFunction)(int, char **), void * reserved); | ||||
|  | ||||
| #endif /* __WINRT__ */ | ||||
|  | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_main_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,144 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_messagebox_h | ||||
| #define _SDL_messagebox_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
| #include "SDL_video.h"      /* For SDL_Window */ | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  * \brief SDL_MessageBox flags. If supported will display warning icon, etc. | ||||
|  */ | ||||
| typedef enum | ||||
| { | ||||
|     SDL_MESSAGEBOX_ERROR        = 0x00000010,   /**< error dialog */ | ||||
|     SDL_MESSAGEBOX_WARNING      = 0x00000020,   /**< warning dialog */ | ||||
|     SDL_MESSAGEBOX_INFORMATION  = 0x00000040    /**< informational dialog */ | ||||
| } SDL_MessageBoxFlags; | ||||
|  | ||||
| /** | ||||
|  * \brief Flags for SDL_MessageBoxButtonData. | ||||
|  */ | ||||
| typedef enum | ||||
| { | ||||
|     SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT = 0x00000001,  /**< Marks the default button when return is hit */ | ||||
|     SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT = 0x00000002   /**< Marks the default button when escape is hit */ | ||||
| } SDL_MessageBoxButtonFlags; | ||||
|  | ||||
| /** | ||||
|  *  \brief Individual button data. | ||||
|  */ | ||||
| typedef struct | ||||
| { | ||||
|     Uint32 flags;       /**< ::SDL_MessageBoxButtonFlags */ | ||||
|     int buttonid;       /**< User defined button id (value returned via SDL_ShowMessageBox) */ | ||||
|     const char * text;  /**< The UTF-8 button text */ | ||||
| } SDL_MessageBoxButtonData; | ||||
|  | ||||
| /** | ||||
|  * \brief RGB value used in a message box color scheme | ||||
|  */ | ||||
| typedef struct | ||||
| { | ||||
|     Uint8 r, g, b; | ||||
| } SDL_MessageBoxColor; | ||||
|  | ||||
| typedef enum | ||||
| { | ||||
|     SDL_MESSAGEBOX_COLOR_BACKGROUND, | ||||
|     SDL_MESSAGEBOX_COLOR_TEXT, | ||||
|     SDL_MESSAGEBOX_COLOR_BUTTON_BORDER, | ||||
|     SDL_MESSAGEBOX_COLOR_BUTTON_BACKGROUND, | ||||
|     SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED, | ||||
|     SDL_MESSAGEBOX_COLOR_MAX | ||||
| } SDL_MessageBoxColorType; | ||||
|  | ||||
| /** | ||||
|  * \brief A set of colors to use for message box dialogs | ||||
|  */ | ||||
| typedef struct | ||||
| { | ||||
|     SDL_MessageBoxColor colors[SDL_MESSAGEBOX_COLOR_MAX]; | ||||
| } SDL_MessageBoxColorScheme; | ||||
|  | ||||
| /** | ||||
|  *  \brief MessageBox structure containing title, text, window, etc. | ||||
|  */ | ||||
| typedef struct | ||||
| { | ||||
|     Uint32 flags;                       /**< ::SDL_MessageBoxFlags */ | ||||
|     SDL_Window *window;                 /**< Parent window, can be NULL */ | ||||
|     const char *title;                  /**< UTF-8 title */ | ||||
|     const char *message;                /**< UTF-8 message text */ | ||||
|  | ||||
|     int numbuttons; | ||||
|     const SDL_MessageBoxButtonData *buttons; | ||||
|  | ||||
|     const SDL_MessageBoxColorScheme *colorScheme;   /**< ::SDL_MessageBoxColorScheme, can be NULL to use system settings */ | ||||
| } SDL_MessageBoxData; | ||||
|  | ||||
| /** | ||||
|  *  \brief Create a modal message box. | ||||
|  * | ||||
|  *  \param messageboxdata The SDL_MessageBoxData structure with title, text, etc. | ||||
|  *  \param buttonid The pointer to which user id of hit button should be copied. | ||||
|  * | ||||
|  *  \return -1 on error, otherwise 0 and buttonid contains user id of button | ||||
|  *          hit or -1 if dialog was closed. | ||||
|  * | ||||
|  *  \note This function should be called on the thread that created the parent | ||||
|  *        window, or on the main thread if the messagebox has no parent.  It will | ||||
|  *        block execution of that thread until the user clicks a button or | ||||
|  *        closes the messagebox. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid); | ||||
|  | ||||
| /** | ||||
|  *  \brief Create a simple modal message box | ||||
|  * | ||||
|  *  \param flags    ::SDL_MessageBoxFlags | ||||
|  *  \param title    UTF-8 title text | ||||
|  *  \param message  UTF-8 message text | ||||
|  *  \param window   The parent window, or NULL for no parent | ||||
|  * | ||||
|  *  \return 0 on success, -1 on error | ||||
|  * | ||||
|  *  \sa SDL_ShowMessageBox | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_ShowSimpleMessageBox(Uint32 flags, const char *title, const char *message, SDL_Window *window); | ||||
|  | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_messagebox_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,300 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_mouse.h | ||||
|  * | ||||
|  *  Include file for SDL mouse event handling. | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_mouse_h | ||||
| #define _SDL_mouse_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
| #include "SDL_error.h" | ||||
| #include "SDL_video.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| typedef struct SDL_Cursor SDL_Cursor;   /* Implementation dependent */ | ||||
|  | ||||
| /** | ||||
|  * \brief Cursor types for SDL_CreateSystemCursor. | ||||
|  */ | ||||
| typedef enum | ||||
| { | ||||
|     SDL_SYSTEM_CURSOR_ARROW,     /**< Arrow */ | ||||
|     SDL_SYSTEM_CURSOR_IBEAM,     /**< I-beam */ | ||||
|     SDL_SYSTEM_CURSOR_WAIT,      /**< Wait */ | ||||
|     SDL_SYSTEM_CURSOR_CROSSHAIR, /**< Crosshair */ | ||||
|     SDL_SYSTEM_CURSOR_WAITARROW, /**< Small wait cursor (or Wait if not available) */ | ||||
|     SDL_SYSTEM_CURSOR_SIZENWSE,  /**< Double arrow pointing northwest and southeast */ | ||||
|     SDL_SYSTEM_CURSOR_SIZENESW,  /**< Double arrow pointing northeast and southwest */ | ||||
|     SDL_SYSTEM_CURSOR_SIZEWE,    /**< Double arrow pointing west and east */ | ||||
|     SDL_SYSTEM_CURSOR_SIZENS,    /**< Double arrow pointing north and south */ | ||||
|     SDL_SYSTEM_CURSOR_SIZEALL,   /**< Four pointed arrow pointing north, south, east, and west */ | ||||
|     SDL_SYSTEM_CURSOR_NO,        /**< Slashed circle or crossbones */ | ||||
|     SDL_SYSTEM_CURSOR_HAND,      /**< Hand */ | ||||
|     SDL_NUM_SYSTEM_CURSORS | ||||
| } SDL_SystemCursor; | ||||
|  | ||||
| /** | ||||
|  * \brief Scroll direction types for the Scroll event | ||||
|  */ | ||||
| typedef enum | ||||
| { | ||||
|     SDL_MOUSEWHEEL_NORMAL,    /**< The scroll direction is normal */ | ||||
|     SDL_MOUSEWHEEL_FLIPPED    /**< The scroll direction is flipped / natural */ | ||||
| } SDL_MouseWheelDirection; | ||||
|  | ||||
| /* Function prototypes */ | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the window which currently has mouse focus. | ||||
|  */ | ||||
| extern DECLSPEC SDL_Window * SDLCALL SDL_GetMouseFocus(void); | ||||
|  | ||||
| /** | ||||
|  *  \brief Retrieve the current state of the mouse. | ||||
|  * | ||||
|  *  The current button state is returned as a button bitmask, which can | ||||
|  *  be tested using the SDL_BUTTON(X) macros, and x and y are set to the | ||||
|  *  mouse cursor position relative to the focus window for the currently | ||||
|  *  selected mouse.  You can pass NULL for either x or y. | ||||
|  */ | ||||
| extern DECLSPEC Uint32 SDLCALL SDL_GetMouseState(int *x, int *y); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the current state of the mouse, in relation to the desktop | ||||
|  * | ||||
|  *  This works just like SDL_GetMouseState(), but the coordinates will be | ||||
|  *  reported relative to the top-left of the desktop. This can be useful if | ||||
|  *  you need to track the mouse outside of a specific window and | ||||
|  *  SDL_CaptureMouse() doesn't fit your needs. For example, it could be | ||||
|  *  useful if you need to track the mouse while dragging a window, where | ||||
|  *  coordinates relative to a window might not be in sync at all times. | ||||
|  * | ||||
|  *  \note SDL_GetMouseState() returns the mouse position as SDL understands | ||||
|  *        it from the last pump of the event queue. This function, however, | ||||
|  *        queries the OS for the current mouse position, and as such, might | ||||
|  *        be a slightly less efficient function. Unless you know what you're | ||||
|  *        doing and have a good reason to use this function, you probably want | ||||
|  *        SDL_GetMouseState() instead. | ||||
|  * | ||||
|  *  \param x Returns the current X coord, relative to the desktop. Can be NULL. | ||||
|  *  \param y Returns the current Y coord, relative to the desktop. Can be NULL. | ||||
|  *  \return The current button state as a bitmask, which can be tested using the SDL_BUTTON(X) macros. | ||||
|  * | ||||
|  *  \sa SDL_GetMouseState | ||||
|  */ | ||||
| extern DECLSPEC Uint32 SDLCALL SDL_GetGlobalMouseState(int *x, int *y); | ||||
|  | ||||
| /** | ||||
|  *  \brief Retrieve the relative state of the mouse. | ||||
|  * | ||||
|  *  The current button state is returned as a button bitmask, which can | ||||
|  *  be tested using the SDL_BUTTON(X) macros, and x and y are set to the | ||||
|  *  mouse deltas since the last call to SDL_GetRelativeMouseState(). | ||||
|  */ | ||||
| extern DECLSPEC Uint32 SDLCALL SDL_GetRelativeMouseState(int *x, int *y); | ||||
|  | ||||
| /** | ||||
|  *  \brief Moves the mouse to the given position within the window. | ||||
|  * | ||||
|  *  \param window The window to move the mouse into, or NULL for the current mouse focus | ||||
|  *  \param x The x coordinate within the window | ||||
|  *  \param y The y coordinate within the window | ||||
|  * | ||||
|  *  \note This function generates a mouse motion event | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_WarpMouseInWindow(SDL_Window * window, | ||||
|                                                    int x, int y); | ||||
|  | ||||
| /** | ||||
|  *  \brief Moves the mouse to the given position in global screen space. | ||||
|  * | ||||
|  *  \param x The x coordinate | ||||
|  *  \param y The y coordinate | ||||
|  *  \return 0 on success, -1 on error (usually: unsupported by a platform). | ||||
|  * | ||||
|  *  \note This function generates a mouse motion event | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_WarpMouseGlobal(int x, int y); | ||||
|  | ||||
| /** | ||||
|  *  \brief Set relative mouse mode. | ||||
|  * | ||||
|  *  \param enabled Whether or not to enable relative mode | ||||
|  * | ||||
|  *  \return 0 on success, or -1 if relative mode is not supported. | ||||
|  * | ||||
|  *  While the mouse is in relative mode, the cursor is hidden, and the | ||||
|  *  driver will try to report continuous motion in the current window. | ||||
|  *  Only relative motion events will be delivered, the mouse position | ||||
|  *  will not change. | ||||
|  * | ||||
|  *  \note This function will flush any pending mouse motion. | ||||
|  * | ||||
|  *  \sa SDL_GetRelativeMouseMode() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_SetRelativeMouseMode(SDL_bool enabled); | ||||
|  | ||||
| /** | ||||
|  *  \brief Capture the mouse, to track input outside an SDL window. | ||||
|  * | ||||
|  *  \param enabled Whether or not to enable capturing | ||||
|  * | ||||
|  *  Capturing enables your app to obtain mouse events globally, instead of | ||||
|  *  just within your window. Not all video targets support this function. | ||||
|  *  When capturing is enabled, the current window will get all mouse events, | ||||
|  *  but unlike relative mode, no change is made to the cursor and it is | ||||
|  *  not restrained to your window. | ||||
|  * | ||||
|  *  This function may also deny mouse input to other windows--both those in | ||||
|  *  your application and others on the system--so you should use this | ||||
|  *  function sparingly, and in small bursts. For example, you might want to | ||||
|  *  track the mouse while the user is dragging something, until the user | ||||
|  *  releases a mouse button. It is not recommended that you capture the mouse | ||||
|  *  for long periods of time, such as the entire time your app is running. | ||||
|  * | ||||
|  *  While captured, mouse events still report coordinates relative to the | ||||
|  *  current (foreground) window, but those coordinates may be outside the | ||||
|  *  bounds of the window (including negative values). Capturing is only | ||||
|  *  allowed for the foreground window. If the window loses focus while | ||||
|  *  capturing, the capture will be disabled automatically. | ||||
|  * | ||||
|  *  While capturing is enabled, the current window will have the | ||||
|  *  SDL_WINDOW_MOUSE_CAPTURE flag set. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 if not supported. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_CaptureMouse(SDL_bool enabled); | ||||
|  | ||||
| /** | ||||
|  *  \brief Query whether relative mouse mode is enabled. | ||||
|  * | ||||
|  *  \sa SDL_SetRelativeMouseMode() | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_GetRelativeMouseMode(void); | ||||
|  | ||||
| /** | ||||
|  *  \brief Create a cursor, using the specified bitmap data and | ||||
|  *         mask (in MSB format). | ||||
|  * | ||||
|  *  The cursor width must be a multiple of 8 bits. | ||||
|  * | ||||
|  *  The cursor is created in black and white according to the following: | ||||
|  *  <table> | ||||
|  *  <tr><td> data </td><td> mask </td><td> resulting pixel on screen </td></tr> | ||||
|  *  <tr><td>  0   </td><td>  1   </td><td> White </td></tr> | ||||
|  *  <tr><td>  1   </td><td>  1   </td><td> Black </td></tr> | ||||
|  *  <tr><td>  0   </td><td>  0   </td><td> Transparent </td></tr> | ||||
|  *  <tr><td>  1   </td><td>  0   </td><td> Inverted color if possible, black | ||||
|  *                                         if not. </td></tr> | ||||
|  *  </table> | ||||
|  * | ||||
|  *  \sa SDL_FreeCursor() | ||||
|  */ | ||||
| extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateCursor(const Uint8 * data, | ||||
|                                                      const Uint8 * mask, | ||||
|                                                      int w, int h, int hot_x, | ||||
|                                                      int hot_y); | ||||
|  | ||||
| /** | ||||
|  *  \brief Create a color cursor. | ||||
|  * | ||||
|  *  \sa SDL_FreeCursor() | ||||
|  */ | ||||
| extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateColorCursor(SDL_Surface *surface, | ||||
|                                                           int hot_x, | ||||
|                                                           int hot_y); | ||||
|  | ||||
| /** | ||||
|  *  \brief Create a system cursor. | ||||
|  * | ||||
|  *  \sa SDL_FreeCursor() | ||||
|  */ | ||||
| extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateSystemCursor(SDL_SystemCursor id); | ||||
|  | ||||
| /** | ||||
|  *  \brief Set the active cursor. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_SetCursor(SDL_Cursor * cursor); | ||||
|  | ||||
| /** | ||||
|  *  \brief Return the active cursor. | ||||
|  */ | ||||
| extern DECLSPEC SDL_Cursor *SDLCALL SDL_GetCursor(void); | ||||
|  | ||||
| /** | ||||
|  *  \brief Return the default cursor. | ||||
|  */ | ||||
| extern DECLSPEC SDL_Cursor *SDLCALL SDL_GetDefaultCursor(void); | ||||
|  | ||||
| /** | ||||
|  *  \brief Frees a cursor created with SDL_CreateCursor(). | ||||
|  * | ||||
|  *  \sa SDL_CreateCursor() | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_FreeCursor(SDL_Cursor * cursor); | ||||
|  | ||||
| /** | ||||
|  *  \brief Toggle whether or not the cursor is shown. | ||||
|  * | ||||
|  *  \param toggle 1 to show the cursor, 0 to hide it, -1 to query the current | ||||
|  *                state. | ||||
|  * | ||||
|  *  \return 1 if the cursor is shown, or 0 if the cursor is hidden. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_ShowCursor(int toggle); | ||||
|  | ||||
| /** | ||||
|  *  Used as a mask when testing buttons in buttonstate. | ||||
|  *   - Button 1:  Left mouse button | ||||
|  *   - Button 2:  Middle mouse button | ||||
|  *   - Button 3:  Right mouse button | ||||
|  */ | ||||
| #define SDL_BUTTON(X)       (1 << ((X)-1)) | ||||
| #define SDL_BUTTON_LEFT     1 | ||||
| #define SDL_BUTTON_MIDDLE   2 | ||||
| #define SDL_BUTTON_RIGHT    3 | ||||
| #define SDL_BUTTON_X1       4 | ||||
| #define SDL_BUTTON_X2       5 | ||||
| #define SDL_BUTTON_LMASK    SDL_BUTTON(SDL_BUTTON_LEFT) | ||||
| #define SDL_BUTTON_MMASK    SDL_BUTTON(SDL_BUTTON_MIDDLE) | ||||
| #define SDL_BUTTON_RMASK    SDL_BUTTON(SDL_BUTTON_RIGHT) | ||||
| #define SDL_BUTTON_X1MASK   SDL_BUTTON(SDL_BUTTON_X1) | ||||
| #define SDL_BUTTON_X2MASK   SDL_BUTTON(SDL_BUTTON_X2) | ||||
|  | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_mouse_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,251 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_mutex_h | ||||
| #define _SDL_mutex_h | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_mutex.h | ||||
|  * | ||||
|  *  Functions to provide thread synchronization primitives. | ||||
|  */ | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
| #include "SDL_error.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  *  Synchronization functions which can time out return this value | ||||
|  *  if they time out. | ||||
|  */ | ||||
| #define SDL_MUTEX_TIMEDOUT  1 | ||||
|  | ||||
| /** | ||||
|  *  This is the timeout value which corresponds to never time out. | ||||
|  */ | ||||
| #define SDL_MUTEX_MAXWAIT   (~(Uint32)0) | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \name Mutex functions | ||||
|  */ | ||||
| /* @{ */ | ||||
|  | ||||
| /* The SDL mutex structure, defined in SDL_sysmutex.c */ | ||||
| struct SDL_mutex; | ||||
| typedef struct SDL_mutex SDL_mutex; | ||||
|  | ||||
| /** | ||||
|  *  Create a mutex, initialized unlocked. | ||||
|  */ | ||||
| extern DECLSPEC SDL_mutex *SDLCALL SDL_CreateMutex(void); | ||||
|  | ||||
| /** | ||||
|  *  Lock the mutex. | ||||
|  * | ||||
|  *  \return 0, or -1 on error. | ||||
|  */ | ||||
| #define SDL_mutexP(m)   SDL_LockMutex(m) | ||||
| extern DECLSPEC int SDLCALL SDL_LockMutex(SDL_mutex * mutex); | ||||
|  | ||||
| /** | ||||
|  *  Try to lock the mutex | ||||
|  * | ||||
|  *  \return 0, SDL_MUTEX_TIMEDOUT, or -1 on error | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_TryLockMutex(SDL_mutex * mutex); | ||||
|  | ||||
| /** | ||||
|  *  Unlock the mutex. | ||||
|  * | ||||
|  *  \return 0, or -1 on error. | ||||
|  * | ||||
|  *  \warning It is an error to unlock a mutex that has not been locked by | ||||
|  *           the current thread, and doing so results in undefined behavior. | ||||
|  */ | ||||
| #define SDL_mutexV(m)   SDL_UnlockMutex(m) | ||||
| extern DECLSPEC int SDLCALL SDL_UnlockMutex(SDL_mutex * mutex); | ||||
|  | ||||
| /** | ||||
|  *  Destroy a mutex. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_DestroyMutex(SDL_mutex * mutex); | ||||
|  | ||||
| /* @} *//* Mutex functions */ | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \name Semaphore functions | ||||
|  */ | ||||
| /* @{ */ | ||||
|  | ||||
| /* The SDL semaphore structure, defined in SDL_syssem.c */ | ||||
| struct SDL_semaphore; | ||||
| typedef struct SDL_semaphore SDL_sem; | ||||
|  | ||||
| /** | ||||
|  *  Create a semaphore, initialized with value, returns NULL on failure. | ||||
|  */ | ||||
| extern DECLSPEC SDL_sem *SDLCALL SDL_CreateSemaphore(Uint32 initial_value); | ||||
|  | ||||
| /** | ||||
|  *  Destroy a semaphore. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_DestroySemaphore(SDL_sem * sem); | ||||
|  | ||||
| /** | ||||
|  *  This function suspends the calling thread until the semaphore pointed | ||||
|  *  to by \c sem has a positive count. It then atomically decreases the | ||||
|  *  semaphore count. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_SemWait(SDL_sem * sem); | ||||
|  | ||||
| /** | ||||
|  *  Non-blocking variant of SDL_SemWait(). | ||||
|  * | ||||
|  *  \return 0 if the wait succeeds, ::SDL_MUTEX_TIMEDOUT if the wait would | ||||
|  *          block, and -1 on error. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_SemTryWait(SDL_sem * sem); | ||||
|  | ||||
| /** | ||||
|  *  Variant of SDL_SemWait() with a timeout in milliseconds. | ||||
|  * | ||||
|  *  \return 0 if the wait succeeds, ::SDL_MUTEX_TIMEDOUT if the wait does not | ||||
|  *          succeed in the allotted time, and -1 on error. | ||||
|  * | ||||
|  *  \warning On some platforms this function is implemented by looping with a | ||||
|  *           delay of 1 ms, and so should be avoided if possible. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_SemWaitTimeout(SDL_sem * sem, Uint32 ms); | ||||
|  | ||||
| /** | ||||
|  *  Atomically increases the semaphore's count (not blocking). | ||||
|  * | ||||
|  *  \return 0, or -1 on error. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_SemPost(SDL_sem * sem); | ||||
|  | ||||
| /** | ||||
|  *  Returns the current count of the semaphore. | ||||
|  */ | ||||
| extern DECLSPEC Uint32 SDLCALL SDL_SemValue(SDL_sem * sem); | ||||
|  | ||||
| /* @} *//* Semaphore functions */ | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \name Condition variable functions | ||||
|  */ | ||||
| /* @{ */ | ||||
|  | ||||
| /* The SDL condition variable structure, defined in SDL_syscond.c */ | ||||
| struct SDL_cond; | ||||
| typedef struct SDL_cond SDL_cond; | ||||
|  | ||||
| /** | ||||
|  *  Create a condition variable. | ||||
|  * | ||||
|  *  Typical use of condition variables: | ||||
|  * | ||||
|  *  Thread A: | ||||
|  *    SDL_LockMutex(lock); | ||||
|  *    while ( ! condition ) { | ||||
|  *        SDL_CondWait(cond, lock); | ||||
|  *    } | ||||
|  *    SDL_UnlockMutex(lock); | ||||
|  * | ||||
|  *  Thread B: | ||||
|  *    SDL_LockMutex(lock); | ||||
|  *    ... | ||||
|  *    condition = true; | ||||
|  *    ... | ||||
|  *    SDL_CondSignal(cond); | ||||
|  *    SDL_UnlockMutex(lock); | ||||
|  * | ||||
|  *  There is some discussion whether to signal the condition variable | ||||
|  *  with the mutex locked or not.  There is some potential performance | ||||
|  *  benefit to unlocking first on some platforms, but there are some | ||||
|  *  potential race conditions depending on how your code is structured. | ||||
|  * | ||||
|  *  In general it's safer to signal the condition variable while the | ||||
|  *  mutex is locked. | ||||
|  */ | ||||
| extern DECLSPEC SDL_cond *SDLCALL SDL_CreateCond(void); | ||||
|  | ||||
| /** | ||||
|  *  Destroy a condition variable. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_DestroyCond(SDL_cond * cond); | ||||
|  | ||||
| /** | ||||
|  *  Restart one of the threads that are waiting on the condition variable. | ||||
|  * | ||||
|  *  \return 0 or -1 on error. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_CondSignal(SDL_cond * cond); | ||||
|  | ||||
| /** | ||||
|  *  Restart all threads that are waiting on the condition variable. | ||||
|  * | ||||
|  *  \return 0 or -1 on error. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_CondBroadcast(SDL_cond * cond); | ||||
|  | ||||
| /** | ||||
|  *  Wait on the condition variable, unlocking the provided mutex. | ||||
|  * | ||||
|  *  \warning The mutex must be locked before entering this function! | ||||
|  * | ||||
|  *  The mutex is re-locked once the condition variable is signaled. | ||||
|  * | ||||
|  *  \return 0 when it is signaled, or -1 on error. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_CondWait(SDL_cond * cond, SDL_mutex * mutex); | ||||
|  | ||||
| /** | ||||
|  *  Waits for at most \c ms milliseconds, and returns 0 if the condition | ||||
|  *  variable is signaled, ::SDL_MUTEX_TIMEDOUT if the condition is not | ||||
|  *  signaled in the allotted time, and -1 on error. | ||||
|  * | ||||
|  *  \warning On some platforms this function is implemented by looping with a | ||||
|  *           delay of 1 ms, and so should be avoided if possible. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_CondWaitTimeout(SDL_cond * cond, | ||||
|                                                 SDL_mutex * mutex, Uint32 ms); | ||||
|  | ||||
| /* @} *//* Condition variable functions */ | ||||
|  | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_mutex_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,33 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| #ifndef _SDLname_h_ | ||||
| #define _SDLname_h_ | ||||
|  | ||||
| #if defined(__STDC__) || defined(__cplusplus) | ||||
| #define NeedFunctionPrototypes 1 | ||||
| #endif | ||||
|  | ||||
| #define SDL_NAME(X) SDL_##X | ||||
|  | ||||
| #endif /* _SDLname_h_ */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -0,0 +1,38 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_opengles.h | ||||
|  * | ||||
|  *  This is a simple file to encapsulate the OpenGL ES 1.X API headers. | ||||
|  */ | ||||
|  | ||||
| #ifdef __IPHONEOS__ | ||||
| #include <OpenGLES/ES1/gl.h> | ||||
| #include <OpenGLES/ES1/glext.h> | ||||
| #else | ||||
| #include <GLES/gl.h> | ||||
| #include <GLES/glext.h> | ||||
| #endif | ||||
|  | ||||
| #ifndef APIENTRY | ||||
| #define APIENTRY | ||||
| #endif | ||||
| @@ -0,0 +1,50 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_opengles2.h | ||||
|  * | ||||
|  *  This is a simple file to encapsulate the OpenGL ES 2.0 API headers. | ||||
|  */ | ||||
| #ifndef _MSC_VER | ||||
|  | ||||
| #ifdef __IPHONEOS__ | ||||
| #include <OpenGLES/ES2/gl.h> | ||||
| #include <OpenGLES/ES2/glext.h> | ||||
| #else | ||||
| #include <GLES2/gl2platform.h> | ||||
| #include <GLES2/gl2.h> | ||||
| #include <GLES2/gl2ext.h> | ||||
| #endif | ||||
|  | ||||
| #else /* _MSC_VER */ | ||||
|  | ||||
| /* OpenGL ES2 headers for Visual Studio */ | ||||
| #include "SDL_opengles2_khrplatform.h" | ||||
| #include "SDL_opengles2_gl2platform.h" | ||||
| #include "SDL_opengles2_gl2.h" | ||||
| #include "SDL_opengles2_gl2ext.h" | ||||
|  | ||||
| #endif /* _MSC_VER */ | ||||
|  | ||||
| #ifndef APIENTRY | ||||
| #define APIENTRY GL_APIENTRY | ||||
| #endif | ||||
| @@ -0,0 +1,621 @@ | ||||
| #ifndef __gl2_h_ | ||||
| #define __gl2_h_ | ||||
|  | ||||
| /* $Revision: 20555 $ on $Date:: 2013-02-12 14:32:47 -0800 #$ */ | ||||
|  | ||||
| /*#include <GLES2/gl2platform.h>*/ | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /* | ||||
|  * This document is licensed under the SGI Free Software B License Version | ||||
|  * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . | ||||
|  */ | ||||
|  | ||||
| /*------------------------------------------------------------------------- | ||||
|  * Data type definitions | ||||
|  *-----------------------------------------------------------------------*/ | ||||
|  | ||||
| typedef void             GLvoid; | ||||
| typedef char             GLchar; | ||||
| typedef unsigned int     GLenum; | ||||
| typedef unsigned char    GLboolean; | ||||
| typedef unsigned int     GLbitfield; | ||||
| typedef khronos_int8_t   GLbyte; | ||||
| typedef short            GLshort; | ||||
| typedef int              GLint; | ||||
| typedef int              GLsizei; | ||||
| typedef khronos_uint8_t  GLubyte; | ||||
| typedef unsigned short   GLushort; | ||||
| typedef unsigned int     GLuint; | ||||
| typedef khronos_float_t  GLfloat; | ||||
| typedef khronos_float_t  GLclampf; | ||||
| typedef khronos_int32_t  GLfixed; | ||||
|  | ||||
| /* GL types for handling large vertex buffer objects */ | ||||
| typedef khronos_intptr_t GLintptr; | ||||
| typedef khronos_ssize_t  GLsizeiptr; | ||||
|  | ||||
| /* OpenGL ES core versions */ | ||||
| #define GL_ES_VERSION_2_0                 1 | ||||
|  | ||||
| /* ClearBufferMask */ | ||||
| #define GL_DEPTH_BUFFER_BIT               0x00000100 | ||||
| #define GL_STENCIL_BUFFER_BIT             0x00000400 | ||||
| #define GL_COLOR_BUFFER_BIT               0x00004000 | ||||
|  | ||||
| /* Boolean */ | ||||
| #define GL_FALSE                          0 | ||||
| #define GL_TRUE                           1 | ||||
|  | ||||
| /* BeginMode */ | ||||
| #define GL_POINTS                         0x0000 | ||||
| #define GL_LINES                          0x0001 | ||||
| #define GL_LINE_LOOP                      0x0002 | ||||
| #define GL_LINE_STRIP                     0x0003 | ||||
| #define GL_TRIANGLES                      0x0004 | ||||
| #define GL_TRIANGLE_STRIP                 0x0005 | ||||
| #define GL_TRIANGLE_FAN                   0x0006 | ||||
|  | ||||
| /* AlphaFunction (not supported in ES20) */ | ||||
| /*      GL_NEVER */ | ||||
| /*      GL_LESS */ | ||||
| /*      GL_EQUAL */ | ||||
| /*      GL_LEQUAL */ | ||||
| /*      GL_GREATER */ | ||||
| /*      GL_NOTEQUAL */ | ||||
| /*      GL_GEQUAL */ | ||||
| /*      GL_ALWAYS */ | ||||
|  | ||||
| /* BlendingFactorDest */ | ||||
| #define GL_ZERO                           0 | ||||
| #define GL_ONE                            1 | ||||
| #define GL_SRC_COLOR                      0x0300 | ||||
| #define GL_ONE_MINUS_SRC_COLOR            0x0301 | ||||
| #define GL_SRC_ALPHA                      0x0302 | ||||
| #define GL_ONE_MINUS_SRC_ALPHA            0x0303 | ||||
| #define GL_DST_ALPHA                      0x0304 | ||||
| #define GL_ONE_MINUS_DST_ALPHA            0x0305 | ||||
|  | ||||
| /* BlendingFactorSrc */ | ||||
| /*      GL_ZERO */ | ||||
| /*      GL_ONE */ | ||||
| #define GL_DST_COLOR                      0x0306 | ||||
| #define GL_ONE_MINUS_DST_COLOR            0x0307 | ||||
| #define GL_SRC_ALPHA_SATURATE             0x0308 | ||||
| /*      GL_SRC_ALPHA */ | ||||
| /*      GL_ONE_MINUS_SRC_ALPHA */ | ||||
| /*      GL_DST_ALPHA */ | ||||
| /*      GL_ONE_MINUS_DST_ALPHA */ | ||||
|  | ||||
| /* BlendEquationSeparate */ | ||||
| #define GL_FUNC_ADD                       0x8006 | ||||
| #define GL_BLEND_EQUATION                 0x8009 | ||||
| #define GL_BLEND_EQUATION_RGB             0x8009    /* same as BLEND_EQUATION */ | ||||
| #define GL_BLEND_EQUATION_ALPHA           0x883D | ||||
|  | ||||
| /* BlendSubtract */ | ||||
| #define GL_FUNC_SUBTRACT                  0x800A | ||||
| #define GL_FUNC_REVERSE_SUBTRACT          0x800B | ||||
|  | ||||
| /* Separate Blend Functions */ | ||||
| #define GL_BLEND_DST_RGB                  0x80C8 | ||||
| #define GL_BLEND_SRC_RGB                  0x80C9 | ||||
| #define GL_BLEND_DST_ALPHA                0x80CA | ||||
| #define GL_BLEND_SRC_ALPHA                0x80CB | ||||
| #define GL_CONSTANT_COLOR                 0x8001 | ||||
| #define GL_ONE_MINUS_CONSTANT_COLOR       0x8002 | ||||
| #define GL_CONSTANT_ALPHA                 0x8003 | ||||
| #define GL_ONE_MINUS_CONSTANT_ALPHA       0x8004 | ||||
| #define GL_BLEND_COLOR                    0x8005 | ||||
|  | ||||
| /* Buffer Objects */ | ||||
| #define GL_ARRAY_BUFFER                   0x8892 | ||||
| #define GL_ELEMENT_ARRAY_BUFFER           0x8893 | ||||
| #define GL_ARRAY_BUFFER_BINDING           0x8894 | ||||
| #define GL_ELEMENT_ARRAY_BUFFER_BINDING   0x8895 | ||||
|  | ||||
| #define GL_STREAM_DRAW                    0x88E0 | ||||
| #define GL_STATIC_DRAW                    0x88E4 | ||||
| #define GL_DYNAMIC_DRAW                   0x88E8 | ||||
|  | ||||
| #define GL_BUFFER_SIZE                    0x8764 | ||||
| #define GL_BUFFER_USAGE                   0x8765 | ||||
|  | ||||
| #define GL_CURRENT_VERTEX_ATTRIB          0x8626 | ||||
|  | ||||
| /* CullFaceMode */ | ||||
| #define GL_FRONT                          0x0404 | ||||
| #define GL_BACK                           0x0405 | ||||
| #define GL_FRONT_AND_BACK                 0x0408 | ||||
|  | ||||
| /* DepthFunction */ | ||||
| /*      GL_NEVER */ | ||||
| /*      GL_LESS */ | ||||
| /*      GL_EQUAL */ | ||||
| /*      GL_LEQUAL */ | ||||
| /*      GL_GREATER */ | ||||
| /*      GL_NOTEQUAL */ | ||||
| /*      GL_GEQUAL */ | ||||
| /*      GL_ALWAYS */ | ||||
|  | ||||
| /* EnableCap */ | ||||
| #define GL_TEXTURE_2D                     0x0DE1 | ||||
| #define GL_CULL_FACE                      0x0B44 | ||||
| #define GL_BLEND                          0x0BE2 | ||||
| #define GL_DITHER                         0x0BD0 | ||||
| #define GL_STENCIL_TEST                   0x0B90 | ||||
| #define GL_DEPTH_TEST                     0x0B71 | ||||
| #define GL_SCISSOR_TEST                   0x0C11 | ||||
| #define GL_POLYGON_OFFSET_FILL            0x8037 | ||||
| #define GL_SAMPLE_ALPHA_TO_COVERAGE       0x809E | ||||
| #define GL_SAMPLE_COVERAGE                0x80A0 | ||||
|  | ||||
| /* ErrorCode */ | ||||
| #define GL_NO_ERROR                       0 | ||||
| #define GL_INVALID_ENUM                   0x0500 | ||||
| #define GL_INVALID_VALUE                  0x0501 | ||||
| #define GL_INVALID_OPERATION              0x0502 | ||||
| #define GL_OUT_OF_MEMORY                  0x0505 | ||||
|  | ||||
| /* FrontFaceDirection */ | ||||
| #define GL_CW                             0x0900 | ||||
| #define GL_CCW                            0x0901 | ||||
|  | ||||
| /* GetPName */ | ||||
| #define GL_LINE_WIDTH                     0x0B21 | ||||
| #define GL_ALIASED_POINT_SIZE_RANGE       0x846D | ||||
| #define GL_ALIASED_LINE_WIDTH_RANGE       0x846E | ||||
| #define GL_CULL_FACE_MODE                 0x0B45 | ||||
| #define GL_FRONT_FACE                     0x0B46 | ||||
| #define GL_DEPTH_RANGE                    0x0B70 | ||||
| #define GL_DEPTH_WRITEMASK                0x0B72 | ||||
| #define GL_DEPTH_CLEAR_VALUE              0x0B73 | ||||
| #define GL_DEPTH_FUNC                     0x0B74 | ||||
| #define GL_STENCIL_CLEAR_VALUE            0x0B91 | ||||
| #define GL_STENCIL_FUNC                   0x0B92 | ||||
| #define GL_STENCIL_FAIL                   0x0B94 | ||||
| #define GL_STENCIL_PASS_DEPTH_FAIL        0x0B95 | ||||
| #define GL_STENCIL_PASS_DEPTH_PASS        0x0B96 | ||||
| #define GL_STENCIL_REF                    0x0B97 | ||||
| #define GL_STENCIL_VALUE_MASK             0x0B93 | ||||
| #define GL_STENCIL_WRITEMASK              0x0B98 | ||||
| #define GL_STENCIL_BACK_FUNC              0x8800 | ||||
| #define GL_STENCIL_BACK_FAIL              0x8801 | ||||
| #define GL_STENCIL_BACK_PASS_DEPTH_FAIL   0x8802 | ||||
| #define GL_STENCIL_BACK_PASS_DEPTH_PASS   0x8803 | ||||
| #define GL_STENCIL_BACK_REF               0x8CA3 | ||||
| #define GL_STENCIL_BACK_VALUE_MASK        0x8CA4 | ||||
| #define GL_STENCIL_BACK_WRITEMASK         0x8CA5 | ||||
| #define GL_VIEWPORT                       0x0BA2 | ||||
| #define GL_SCISSOR_BOX                    0x0C10 | ||||
| /*      GL_SCISSOR_TEST */ | ||||
| #define GL_COLOR_CLEAR_VALUE              0x0C22 | ||||
| #define GL_COLOR_WRITEMASK                0x0C23 | ||||
| #define GL_UNPACK_ALIGNMENT               0x0CF5 | ||||
| #define GL_PACK_ALIGNMENT                 0x0D05 | ||||
| #define GL_MAX_TEXTURE_SIZE               0x0D33 | ||||
| #define GL_MAX_VIEWPORT_DIMS              0x0D3A | ||||
| #define GL_SUBPIXEL_BITS                  0x0D50 | ||||
| #define GL_RED_BITS                       0x0D52 | ||||
| #define GL_GREEN_BITS                     0x0D53 | ||||
| #define GL_BLUE_BITS                      0x0D54 | ||||
| #define GL_ALPHA_BITS                     0x0D55 | ||||
| #define GL_DEPTH_BITS                     0x0D56 | ||||
| #define GL_STENCIL_BITS                   0x0D57 | ||||
| #define GL_POLYGON_OFFSET_UNITS           0x2A00 | ||||
| /*      GL_POLYGON_OFFSET_FILL */ | ||||
| #define GL_POLYGON_OFFSET_FACTOR          0x8038 | ||||
| #define GL_TEXTURE_BINDING_2D             0x8069 | ||||
| #define GL_SAMPLE_BUFFERS                 0x80A8 | ||||
| #define GL_SAMPLES                        0x80A9 | ||||
| #define GL_SAMPLE_COVERAGE_VALUE          0x80AA | ||||
| #define GL_SAMPLE_COVERAGE_INVERT         0x80AB | ||||
|  | ||||
| /* GetTextureParameter */ | ||||
| /*      GL_TEXTURE_MAG_FILTER */ | ||||
| /*      GL_TEXTURE_MIN_FILTER */ | ||||
| /*      GL_TEXTURE_WRAP_S */ | ||||
| /*      GL_TEXTURE_WRAP_T */ | ||||
|  | ||||
| #define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 | ||||
| #define GL_COMPRESSED_TEXTURE_FORMATS     0x86A3 | ||||
|  | ||||
| /* HintMode */ | ||||
| #define GL_DONT_CARE                      0x1100 | ||||
| #define GL_FASTEST                        0x1101 | ||||
| #define GL_NICEST                         0x1102 | ||||
|  | ||||
| /* HintTarget */ | ||||
| #define GL_GENERATE_MIPMAP_HINT            0x8192 | ||||
|  | ||||
| /* DataType */ | ||||
| #define GL_BYTE                           0x1400 | ||||
| #define GL_UNSIGNED_BYTE                  0x1401 | ||||
| #define GL_SHORT                          0x1402 | ||||
| #define GL_UNSIGNED_SHORT                 0x1403 | ||||
| #define GL_INT                            0x1404 | ||||
| #define GL_UNSIGNED_INT                   0x1405 | ||||
| #define GL_FLOAT                          0x1406 | ||||
| #define GL_FIXED                          0x140C | ||||
|  | ||||
| /* PixelFormat */ | ||||
| #define GL_DEPTH_COMPONENT                0x1902 | ||||
| #define GL_ALPHA                          0x1906 | ||||
| #define GL_RGB                            0x1907 | ||||
| #define GL_RGBA                           0x1908 | ||||
| #define GL_LUMINANCE                      0x1909 | ||||
| #define GL_LUMINANCE_ALPHA                0x190A | ||||
|  | ||||
| /* PixelType */ | ||||
| /*      GL_UNSIGNED_BYTE */ | ||||
| #define GL_UNSIGNED_SHORT_4_4_4_4         0x8033 | ||||
| #define GL_UNSIGNED_SHORT_5_5_5_1         0x8034 | ||||
| #define GL_UNSIGNED_SHORT_5_6_5           0x8363 | ||||
|  | ||||
| /* Shaders */ | ||||
| #define GL_FRAGMENT_SHADER                  0x8B30 | ||||
| #define GL_VERTEX_SHADER                    0x8B31 | ||||
| #define GL_MAX_VERTEX_ATTRIBS               0x8869 | ||||
| #define GL_MAX_VERTEX_UNIFORM_VECTORS       0x8DFB | ||||
| #define GL_MAX_VARYING_VECTORS              0x8DFC | ||||
| #define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D | ||||
| #define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS   0x8B4C | ||||
| #define GL_MAX_TEXTURE_IMAGE_UNITS          0x8872 | ||||
| #define GL_MAX_FRAGMENT_UNIFORM_VECTORS     0x8DFD | ||||
| #define GL_SHADER_TYPE                      0x8B4F | ||||
| #define GL_DELETE_STATUS                    0x8B80 | ||||
| #define GL_LINK_STATUS                      0x8B82 | ||||
| #define GL_VALIDATE_STATUS                  0x8B83 | ||||
| #define GL_ATTACHED_SHADERS                 0x8B85 | ||||
| #define GL_ACTIVE_UNIFORMS                  0x8B86 | ||||
| #define GL_ACTIVE_UNIFORM_MAX_LENGTH        0x8B87 | ||||
| #define GL_ACTIVE_ATTRIBUTES                0x8B89 | ||||
| #define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH      0x8B8A | ||||
| #define GL_SHADING_LANGUAGE_VERSION         0x8B8C | ||||
| #define GL_CURRENT_PROGRAM                  0x8B8D | ||||
|  | ||||
| /* StencilFunction */ | ||||
| #define GL_NEVER                          0x0200 | ||||
| #define GL_LESS                           0x0201 | ||||
| #define GL_EQUAL                          0x0202 | ||||
| #define GL_LEQUAL                         0x0203 | ||||
| #define GL_GREATER                        0x0204 | ||||
| #define GL_NOTEQUAL                       0x0205 | ||||
| #define GL_GEQUAL                         0x0206 | ||||
| #define GL_ALWAYS                         0x0207 | ||||
|  | ||||
| /* StencilOp */ | ||||
| /*      GL_ZERO */ | ||||
| #define GL_KEEP                           0x1E00 | ||||
| #define GL_REPLACE                        0x1E01 | ||||
| #define GL_INCR                           0x1E02 | ||||
| #define GL_DECR                           0x1E03 | ||||
| #define GL_INVERT                         0x150A | ||||
| #define GL_INCR_WRAP                      0x8507 | ||||
| #define GL_DECR_WRAP                      0x8508 | ||||
|  | ||||
| /* StringName */ | ||||
| #define GL_VENDOR                         0x1F00 | ||||
| #define GL_RENDERER                       0x1F01 | ||||
| #define GL_VERSION                        0x1F02 | ||||
| #define GL_EXTENSIONS                     0x1F03 | ||||
|  | ||||
| /* TextureMagFilter */ | ||||
| #define GL_NEAREST                        0x2600 | ||||
| #define GL_LINEAR                         0x2601 | ||||
|  | ||||
| /* TextureMinFilter */ | ||||
| /*      GL_NEAREST */ | ||||
| /*      GL_LINEAR */ | ||||
| #define GL_NEAREST_MIPMAP_NEAREST         0x2700 | ||||
| #define GL_LINEAR_MIPMAP_NEAREST          0x2701 | ||||
| #define GL_NEAREST_MIPMAP_LINEAR          0x2702 | ||||
| #define GL_LINEAR_MIPMAP_LINEAR           0x2703 | ||||
|  | ||||
| /* TextureParameterName */ | ||||
| #define GL_TEXTURE_MAG_FILTER             0x2800 | ||||
| #define GL_TEXTURE_MIN_FILTER             0x2801 | ||||
| #define GL_TEXTURE_WRAP_S                 0x2802 | ||||
| #define GL_TEXTURE_WRAP_T                 0x2803 | ||||
|  | ||||
| /* TextureTarget */ | ||||
| /*      GL_TEXTURE_2D */ | ||||
| #define GL_TEXTURE                        0x1702 | ||||
|  | ||||
| #define GL_TEXTURE_CUBE_MAP               0x8513 | ||||
| #define GL_TEXTURE_BINDING_CUBE_MAP       0x8514 | ||||
| #define GL_TEXTURE_CUBE_MAP_POSITIVE_X    0x8515 | ||||
| #define GL_TEXTURE_CUBE_MAP_NEGATIVE_X    0x8516 | ||||
| #define GL_TEXTURE_CUBE_MAP_POSITIVE_Y    0x8517 | ||||
| #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y    0x8518 | ||||
| #define GL_TEXTURE_CUBE_MAP_POSITIVE_Z    0x8519 | ||||
| #define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z    0x851A | ||||
| #define GL_MAX_CUBE_MAP_TEXTURE_SIZE      0x851C | ||||
|  | ||||
| /* TextureUnit */ | ||||
| #define GL_TEXTURE0                       0x84C0 | ||||
| #define GL_TEXTURE1                       0x84C1 | ||||
| #define GL_TEXTURE2                       0x84C2 | ||||
| #define GL_TEXTURE3                       0x84C3 | ||||
| #define GL_TEXTURE4                       0x84C4 | ||||
| #define GL_TEXTURE5                       0x84C5 | ||||
| #define GL_TEXTURE6                       0x84C6 | ||||
| #define GL_TEXTURE7                       0x84C7 | ||||
| #define GL_TEXTURE8                       0x84C8 | ||||
| #define GL_TEXTURE9                       0x84C9 | ||||
| #define GL_TEXTURE10                      0x84CA | ||||
| #define GL_TEXTURE11                      0x84CB | ||||
| #define GL_TEXTURE12                      0x84CC | ||||
| #define GL_TEXTURE13                      0x84CD | ||||
| #define GL_TEXTURE14                      0x84CE | ||||
| #define GL_TEXTURE15                      0x84CF | ||||
| #define GL_TEXTURE16                      0x84D0 | ||||
| #define GL_TEXTURE17                      0x84D1 | ||||
| #define GL_TEXTURE18                      0x84D2 | ||||
| #define GL_TEXTURE19                      0x84D3 | ||||
| #define GL_TEXTURE20                      0x84D4 | ||||
| #define GL_TEXTURE21                      0x84D5 | ||||
| #define GL_TEXTURE22                      0x84D6 | ||||
| #define GL_TEXTURE23                      0x84D7 | ||||
| #define GL_TEXTURE24                      0x84D8 | ||||
| #define GL_TEXTURE25                      0x84D9 | ||||
| #define GL_TEXTURE26                      0x84DA | ||||
| #define GL_TEXTURE27                      0x84DB | ||||
| #define GL_TEXTURE28                      0x84DC | ||||
| #define GL_TEXTURE29                      0x84DD | ||||
| #define GL_TEXTURE30                      0x84DE | ||||
| #define GL_TEXTURE31                      0x84DF | ||||
| #define GL_ACTIVE_TEXTURE                 0x84E0 | ||||
|  | ||||
| /* TextureWrapMode */ | ||||
| #define GL_REPEAT                         0x2901 | ||||
| #define GL_CLAMP_TO_EDGE                  0x812F | ||||
| #define GL_MIRRORED_REPEAT                0x8370 | ||||
|  | ||||
| /* Uniform Types */ | ||||
| #define GL_FLOAT_VEC2                     0x8B50 | ||||
| #define GL_FLOAT_VEC3                     0x8B51 | ||||
| #define GL_FLOAT_VEC4                     0x8B52 | ||||
| #define GL_INT_VEC2                       0x8B53 | ||||
| #define GL_INT_VEC3                       0x8B54 | ||||
| #define GL_INT_VEC4                       0x8B55 | ||||
| #define GL_BOOL                           0x8B56 | ||||
| #define GL_BOOL_VEC2                      0x8B57 | ||||
| #define GL_BOOL_VEC3                      0x8B58 | ||||
| #define GL_BOOL_VEC4                      0x8B59 | ||||
| #define GL_FLOAT_MAT2                     0x8B5A | ||||
| #define GL_FLOAT_MAT3                     0x8B5B | ||||
| #define GL_FLOAT_MAT4                     0x8B5C | ||||
| #define GL_SAMPLER_2D                     0x8B5E | ||||
| #define GL_SAMPLER_CUBE                   0x8B60 | ||||
|  | ||||
| /* Vertex Arrays */ | ||||
| #define GL_VERTEX_ATTRIB_ARRAY_ENABLED        0x8622 | ||||
| #define GL_VERTEX_ATTRIB_ARRAY_SIZE           0x8623 | ||||
| #define GL_VERTEX_ATTRIB_ARRAY_STRIDE         0x8624 | ||||
| #define GL_VERTEX_ATTRIB_ARRAY_TYPE           0x8625 | ||||
| #define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED     0x886A | ||||
| #define GL_VERTEX_ATTRIB_ARRAY_POINTER        0x8645 | ||||
| #define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F | ||||
|  | ||||
| /* Read Format */ | ||||
| #define GL_IMPLEMENTATION_COLOR_READ_TYPE   0x8B9A | ||||
| #define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B | ||||
|  | ||||
| /* Shader Source */ | ||||
| #define GL_COMPILE_STATUS                 0x8B81 | ||||
| #define GL_INFO_LOG_LENGTH                0x8B84 | ||||
| #define GL_SHADER_SOURCE_LENGTH           0x8B88 | ||||
| #define GL_SHADER_COMPILER                0x8DFA | ||||
|  | ||||
| /* Shader Binary */ | ||||
| #define GL_SHADER_BINARY_FORMATS          0x8DF8 | ||||
| #define GL_NUM_SHADER_BINARY_FORMATS      0x8DF9 | ||||
|  | ||||
| /* Shader Precision-Specified Types */ | ||||
| #define GL_LOW_FLOAT                      0x8DF0 | ||||
| #define GL_MEDIUM_FLOAT                   0x8DF1 | ||||
| #define GL_HIGH_FLOAT                     0x8DF2 | ||||
| #define GL_LOW_INT                        0x8DF3 | ||||
| #define GL_MEDIUM_INT                     0x8DF4 | ||||
| #define GL_HIGH_INT                       0x8DF5 | ||||
|  | ||||
| /* Framebuffer Object. */ | ||||
| #define GL_FRAMEBUFFER                    0x8D40 | ||||
| #define GL_RENDERBUFFER                   0x8D41 | ||||
|  | ||||
| #define GL_RGBA4                          0x8056 | ||||
| #define GL_RGB5_A1                        0x8057 | ||||
| #define GL_RGB565                         0x8D62 | ||||
| #define GL_DEPTH_COMPONENT16              0x81A5 | ||||
| #define GL_STENCIL_INDEX8                 0x8D48 | ||||
|  | ||||
| #define GL_RENDERBUFFER_WIDTH             0x8D42 | ||||
| #define GL_RENDERBUFFER_HEIGHT            0x8D43 | ||||
| #define GL_RENDERBUFFER_INTERNAL_FORMAT   0x8D44 | ||||
| #define GL_RENDERBUFFER_RED_SIZE          0x8D50 | ||||
| #define GL_RENDERBUFFER_GREEN_SIZE        0x8D51 | ||||
| #define GL_RENDERBUFFER_BLUE_SIZE         0x8D52 | ||||
| #define GL_RENDERBUFFER_ALPHA_SIZE        0x8D53 | ||||
| #define GL_RENDERBUFFER_DEPTH_SIZE        0x8D54 | ||||
| #define GL_RENDERBUFFER_STENCIL_SIZE      0x8D55 | ||||
|  | ||||
| #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE           0x8CD0 | ||||
| #define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME           0x8CD1 | ||||
| #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL         0x8CD2 | ||||
| #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 | ||||
|  | ||||
| #define GL_COLOR_ATTACHMENT0              0x8CE0 | ||||
| #define GL_DEPTH_ATTACHMENT               0x8D00 | ||||
| #define GL_STENCIL_ATTACHMENT             0x8D20 | ||||
|  | ||||
| #define GL_NONE                           0 | ||||
|  | ||||
| #define GL_FRAMEBUFFER_COMPLETE                      0x8CD5 | ||||
| #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT         0x8CD6 | ||||
| #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 | ||||
| #define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS         0x8CD9 | ||||
| #define GL_FRAMEBUFFER_UNSUPPORTED                   0x8CDD | ||||
|  | ||||
| #define GL_FRAMEBUFFER_BINDING            0x8CA6 | ||||
| #define GL_RENDERBUFFER_BINDING           0x8CA7 | ||||
| #define GL_MAX_RENDERBUFFER_SIZE          0x84E8 | ||||
|  | ||||
| #define GL_INVALID_FRAMEBUFFER_OPERATION  0x0506 | ||||
|  | ||||
| /*------------------------------------------------------------------------- | ||||
|  * GL core functions. | ||||
|  *-----------------------------------------------------------------------*/ | ||||
|  | ||||
| GL_APICALL void         GL_APIENTRY glActiveTexture (GLenum texture); | ||||
| GL_APICALL void         GL_APIENTRY glAttachShader (GLuint program, GLuint shader); | ||||
| GL_APICALL void         GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar* name); | ||||
| GL_APICALL void         GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer); | ||||
| GL_APICALL void         GL_APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); | ||||
| GL_APICALL void         GL_APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); | ||||
| GL_APICALL void         GL_APIENTRY glBindTexture (GLenum target, GLuint texture); | ||||
| GL_APICALL void         GL_APIENTRY glBlendColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); | ||||
| GL_APICALL void         GL_APIENTRY glBlendEquation ( GLenum mode ); | ||||
| GL_APICALL void         GL_APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); | ||||
| GL_APICALL void         GL_APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); | ||||
| GL_APICALL void         GL_APIENTRY glBlendFuncSeparate (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); | ||||
| GL_APICALL void         GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); | ||||
| GL_APICALL void         GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); | ||||
| GL_APICALL GLenum       GL_APIENTRY glCheckFramebufferStatus (GLenum target); | ||||
| GL_APICALL void         GL_APIENTRY glClear (GLbitfield mask); | ||||
| GL_APICALL void         GL_APIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); | ||||
| GL_APICALL void         GL_APIENTRY glClearDepthf (GLclampf depth); | ||||
| GL_APICALL void         GL_APIENTRY glClearStencil (GLint s); | ||||
| GL_APICALL void         GL_APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); | ||||
| GL_APICALL void         GL_APIENTRY glCompileShader (GLuint shader); | ||||
| GL_APICALL void         GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); | ||||
| GL_APICALL void         GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); | ||||
| GL_APICALL void         GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); | ||||
| GL_APICALL void         GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); | ||||
| GL_APICALL GLuint       GL_APIENTRY glCreateProgram (void); | ||||
| GL_APICALL GLuint       GL_APIENTRY glCreateShader (GLenum type); | ||||
| GL_APICALL void         GL_APIENTRY glCullFace (GLenum mode); | ||||
| GL_APICALL void         GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint* buffers); | ||||
| GL_APICALL void         GL_APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint* framebuffers); | ||||
| GL_APICALL void         GL_APIENTRY glDeleteProgram (GLuint program); | ||||
| GL_APICALL void         GL_APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint* renderbuffers); | ||||
| GL_APICALL void         GL_APIENTRY glDeleteShader (GLuint shader); | ||||
| GL_APICALL void         GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint* textures); | ||||
| GL_APICALL void         GL_APIENTRY glDepthFunc (GLenum func); | ||||
| GL_APICALL void         GL_APIENTRY glDepthMask (GLboolean flag); | ||||
| GL_APICALL void         GL_APIENTRY glDepthRangef (GLclampf zNear, GLclampf zFar); | ||||
| GL_APICALL void         GL_APIENTRY glDetachShader (GLuint program, GLuint shader); | ||||
| GL_APICALL void         GL_APIENTRY glDisable (GLenum cap); | ||||
| GL_APICALL void         GL_APIENTRY glDisableVertexAttribArray (GLuint index); | ||||
| GL_APICALL void         GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); | ||||
| GL_APICALL void         GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid* indices); | ||||
| GL_APICALL void         GL_APIENTRY glEnable (GLenum cap); | ||||
| GL_APICALL void         GL_APIENTRY glEnableVertexAttribArray (GLuint index); | ||||
| GL_APICALL void         GL_APIENTRY glFinish (void); | ||||
| GL_APICALL void         GL_APIENTRY glFlush (void); | ||||
| GL_APICALL void         GL_APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); | ||||
| GL_APICALL void         GL_APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); | ||||
| GL_APICALL void         GL_APIENTRY glFrontFace (GLenum mode); | ||||
| GL_APICALL void         GL_APIENTRY glGenBuffers (GLsizei n, GLuint* buffers); | ||||
| GL_APICALL void         GL_APIENTRY glGenerateMipmap (GLenum target); | ||||
| GL_APICALL void         GL_APIENTRY glGenFramebuffers (GLsizei n, GLuint* framebuffers); | ||||
| GL_APICALL void         GL_APIENTRY glGenRenderbuffers (GLsizei n, GLuint* renderbuffers); | ||||
| GL_APICALL void         GL_APIENTRY glGenTextures (GLsizei n, GLuint* textures); | ||||
| GL_APICALL void         GL_APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); | ||||
| GL_APICALL void         GL_APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); | ||||
| GL_APICALL void         GL_APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders); | ||||
| GL_APICALL GLint        GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar* name); | ||||
| GL_APICALL void         GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean* params); | ||||
| GL_APICALL void         GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint* params); | ||||
| GL_APICALL GLenum       GL_APIENTRY glGetError (void); | ||||
| GL_APICALL void         GL_APIENTRY glGetFloatv (GLenum pname, GLfloat* params); | ||||
| GL_APICALL void         GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint* params); | ||||
| GL_APICALL void         GL_APIENTRY glGetIntegerv (GLenum pname, GLint* params); | ||||
| GL_APICALL void         GL_APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint* params); | ||||
| GL_APICALL void         GL_APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog); | ||||
| GL_APICALL void         GL_APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint* params); | ||||
| GL_APICALL void         GL_APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint* params); | ||||
| GL_APICALL void         GL_APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog); | ||||
| GL_APICALL void         GL_APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision); | ||||
| GL_APICALL void         GL_APIENTRY glGetShaderSource (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source); | ||||
| GL_APICALL const GLubyte* GL_APIENTRY glGetString (GLenum name); | ||||
| GL_APICALL void         GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat* params); | ||||
| GL_APICALL void         GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint* params); | ||||
| GL_APICALL void         GL_APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat* params); | ||||
| GL_APICALL void         GL_APIENTRY glGetUniformiv (GLuint program, GLint location, GLint* params); | ||||
| GL_APICALL GLint        GL_APIENTRY glGetUniformLocation (GLuint program, const GLchar* name); | ||||
| GL_APICALL void         GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat* params); | ||||
| GL_APICALL void         GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint* params); | ||||
| GL_APICALL void         GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid** pointer); | ||||
| GL_APICALL void         GL_APIENTRY glHint (GLenum target, GLenum mode); | ||||
| GL_APICALL GLboolean    GL_APIENTRY glIsBuffer (GLuint buffer); | ||||
| GL_APICALL GLboolean    GL_APIENTRY glIsEnabled (GLenum cap); | ||||
| GL_APICALL GLboolean    GL_APIENTRY glIsFramebuffer (GLuint framebuffer); | ||||
| GL_APICALL GLboolean    GL_APIENTRY glIsProgram (GLuint program); | ||||
| GL_APICALL GLboolean    GL_APIENTRY glIsRenderbuffer (GLuint renderbuffer); | ||||
| GL_APICALL GLboolean    GL_APIENTRY glIsShader (GLuint shader); | ||||
| GL_APICALL GLboolean    GL_APIENTRY glIsTexture (GLuint texture); | ||||
| GL_APICALL void         GL_APIENTRY glLineWidth (GLfloat width); | ||||
| GL_APICALL void         GL_APIENTRY glLinkProgram (GLuint program); | ||||
| GL_APICALL void         GL_APIENTRY glPixelStorei (GLenum pname, GLint param); | ||||
| GL_APICALL void         GL_APIENTRY glPolygonOffset (GLfloat factor, GLfloat units); | ||||
| GL_APICALL void         GL_APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels); | ||||
| GL_APICALL void         GL_APIENTRY glReleaseShaderCompiler (void); | ||||
| GL_APICALL void         GL_APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); | ||||
| GL_APICALL void         GL_APIENTRY glSampleCoverage (GLclampf value, GLboolean invert); | ||||
| GL_APICALL void         GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); | ||||
| GL_APICALL void         GL_APIENTRY glShaderBinary (GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length); | ||||
| GL_APICALL void         GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length); | ||||
| GL_APICALL void         GL_APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); | ||||
| GL_APICALL void         GL_APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); | ||||
| GL_APICALL void         GL_APIENTRY glStencilMask (GLuint mask); | ||||
| GL_APICALL void         GL_APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); | ||||
| GL_APICALL void         GL_APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); | ||||
| GL_APICALL void         GL_APIENTRY glStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass); | ||||
| GL_APICALL void         GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels); | ||||
| GL_APICALL void         GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); | ||||
| GL_APICALL void         GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat* params); | ||||
| GL_APICALL void         GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); | ||||
| GL_APICALL void         GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint* params); | ||||
| GL_APICALL void         GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels); | ||||
| GL_APICALL void         GL_APIENTRY glUniform1f (GLint location, GLfloat x); | ||||
| GL_APICALL void         GL_APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat* v); | ||||
| GL_APICALL void         GL_APIENTRY glUniform1i (GLint location, GLint x); | ||||
| GL_APICALL void         GL_APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint* v); | ||||
| GL_APICALL void         GL_APIENTRY glUniform2f (GLint location, GLfloat x, GLfloat y); | ||||
| GL_APICALL void         GL_APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat* v); | ||||
| GL_APICALL void         GL_APIENTRY glUniform2i (GLint location, GLint x, GLint y); | ||||
| GL_APICALL void         GL_APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint* v); | ||||
| GL_APICALL void         GL_APIENTRY glUniform3f (GLint location, GLfloat x, GLfloat y, GLfloat z); | ||||
| GL_APICALL void         GL_APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat* v); | ||||
| GL_APICALL void         GL_APIENTRY glUniform3i (GLint location, GLint x, GLint y, GLint z); | ||||
| GL_APICALL void         GL_APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint* v); | ||||
| GL_APICALL void         GL_APIENTRY glUniform4f (GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); | ||||
| GL_APICALL void         GL_APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat* v); | ||||
| GL_APICALL void         GL_APIENTRY glUniform4i (GLint location, GLint x, GLint y, GLint z, GLint w); | ||||
| GL_APICALL void         GL_APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint* v); | ||||
| GL_APICALL void         GL_APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); | ||||
| GL_APICALL void         GL_APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); | ||||
| GL_APICALL void         GL_APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); | ||||
| GL_APICALL void         GL_APIENTRY glUseProgram (GLuint program); | ||||
| GL_APICALL void         GL_APIENTRY glValidateProgram (GLuint program); | ||||
| GL_APICALL void         GL_APIENTRY glVertexAttrib1f (GLuint indx, GLfloat x); | ||||
| GL_APICALL void         GL_APIENTRY glVertexAttrib1fv (GLuint indx, const GLfloat* values); | ||||
| GL_APICALL void         GL_APIENTRY glVertexAttrib2f (GLuint indx, GLfloat x, GLfloat y); | ||||
| GL_APICALL void         GL_APIENTRY glVertexAttrib2fv (GLuint indx, const GLfloat* values); | ||||
| GL_APICALL void         GL_APIENTRY glVertexAttrib3f (GLuint indx, GLfloat x, GLfloat y, GLfloat z); | ||||
| GL_APICALL void         GL_APIENTRY glVertexAttrib3fv (GLuint indx, const GLfloat* values); | ||||
| GL_APICALL void         GL_APIENTRY glVertexAttrib4f (GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w); | ||||
| GL_APICALL void         GL_APIENTRY glVertexAttrib4fv (GLuint indx, const GLfloat* values); | ||||
| GL_APICALL void         GL_APIENTRY glVertexAttribPointer (GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr); | ||||
| GL_APICALL void         GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #endif /* __gl2_h_ */ | ||||
|  | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -0,0 +1,30 @@ | ||||
| #ifndef __gl2platform_h_ | ||||
| #define __gl2platform_h_ | ||||
|  | ||||
| /* $Revision: 10602 $ on $Date:: 2010-03-04 22:35:34 -0800 #$ */ | ||||
|  | ||||
| /* | ||||
|  * This document is licensed under the SGI Free Software B License Version | ||||
|  * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . | ||||
|  */ | ||||
|  | ||||
| /* Platform-specific types and definitions for OpenGL ES 2.X  gl2.h | ||||
|  * | ||||
|  * Adopters may modify khrplatform.h and this file to suit their platform. | ||||
|  * You are encouraged to submit all modifications to the Khronos group so that | ||||
|  * they can be included in future versions of this file.  Please submit changes | ||||
|  * by sending them to the public Khronos Bugzilla (http://khronos.org/bugzilla) | ||||
|  * by filing a bug against product "OpenGL-ES" component "Registry". | ||||
|  */ | ||||
|  | ||||
| /*#include <KHR/khrplatform.h>*/ | ||||
|  | ||||
| #ifndef GL_APICALL | ||||
| #define GL_APICALL  KHRONOS_APICALL | ||||
| #endif | ||||
|  | ||||
| #ifndef GL_APIENTRY | ||||
| #define GL_APIENTRY KHRONOS_APIENTRY | ||||
| #endif | ||||
|  | ||||
| #endif /* __gl2platform_h_ */ | ||||
| @@ -0,0 +1,282 @@ | ||||
| #ifndef __khrplatform_h_ | ||||
| #define __khrplatform_h_ | ||||
|  | ||||
| /* | ||||
| ** Copyright (c) 2008-2009 The Khronos Group Inc. | ||||
| ** | ||||
| ** Permission is hereby granted, free of charge, to any person obtaining a | ||||
| ** copy of this software and/or associated documentation files (the | ||||
| ** "Materials"), to deal in the Materials without restriction, including | ||||
| ** without limitation the rights to use, copy, modify, merge, publish, | ||||
| ** distribute, sublicense, and/or sell copies of the Materials, and to | ||||
| ** permit persons to whom the Materials are furnished to do so, subject to | ||||
| ** the following conditions: | ||||
| ** | ||||
| ** The above copyright notice and this permission notice shall be included | ||||
| ** in all copies or substantial portions of the Materials. | ||||
| ** | ||||
| ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||||
| ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||||
| ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | ||||
| ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY | ||||
| ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | ||||
| ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE | ||||
| ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. | ||||
| */ | ||||
|  | ||||
| /* Khronos platform-specific types and definitions. | ||||
|  * | ||||
|  * $Revision: 23298 $ on $Date: 2013-09-30 17:07:13 -0700 (Mon, 30 Sep 2013) $ | ||||
|  * | ||||
|  * Adopters may modify this file to suit their platform. Adopters are | ||||
|  * encouraged to submit platform specific modifications to the Khronos | ||||
|  * group so that they can be included in future versions of this file. | ||||
|  * Please submit changes by sending them to the public Khronos Bugzilla | ||||
|  * (http://khronos.org/bugzilla) by filing a bug against product | ||||
|  * "Khronos (general)" component "Registry". | ||||
|  * | ||||
|  * A predefined template which fills in some of the bug fields can be | ||||
|  * reached using http://tinyurl.com/khrplatform-h-bugreport, but you | ||||
|  * must create a Bugzilla login first. | ||||
|  * | ||||
|  * | ||||
|  * See the Implementer's Guidelines for information about where this file | ||||
|  * should be located on your system and for more details of its use: | ||||
|  *    http://www.khronos.org/registry/implementers_guide.pdf | ||||
|  * | ||||
|  * This file should be included as | ||||
|  *        #include <KHR/khrplatform.h> | ||||
|  * by Khronos client API header files that use its types and defines. | ||||
|  * | ||||
|  * The types in khrplatform.h should only be used to define API-specific types. | ||||
|  * | ||||
|  * Types defined in khrplatform.h: | ||||
|  *    khronos_int8_t              signed   8  bit | ||||
|  *    khronos_uint8_t             unsigned 8  bit | ||||
|  *    khronos_int16_t             signed   16 bit | ||||
|  *    khronos_uint16_t            unsigned 16 bit | ||||
|  *    khronos_int32_t             signed   32 bit | ||||
|  *    khronos_uint32_t            unsigned 32 bit | ||||
|  *    khronos_int64_t             signed   64 bit | ||||
|  *    khronos_uint64_t            unsigned 64 bit | ||||
|  *    khronos_intptr_t            signed   same number of bits as a pointer | ||||
|  *    khronos_uintptr_t           unsigned same number of bits as a pointer | ||||
|  *    khronos_ssize_t             signed   size | ||||
|  *    khronos_usize_t             unsigned size | ||||
|  *    khronos_float_t             signed   32 bit floating point | ||||
|  *    khronos_time_ns_t           unsigned 64 bit time in nanoseconds | ||||
|  *    khronos_utime_nanoseconds_t unsigned time interval or absolute time in | ||||
|  *                                         nanoseconds | ||||
|  *    khronos_stime_nanoseconds_t signed time interval in nanoseconds | ||||
|  *    khronos_boolean_enum_t      enumerated boolean type. This should | ||||
|  *      only be used as a base type when a client API's boolean type is | ||||
|  *      an enum. Client APIs which use an integer or other type for | ||||
|  *      booleans cannot use this as the base type for their boolean. | ||||
|  * | ||||
|  * Tokens defined in khrplatform.h: | ||||
|  * | ||||
|  *    KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. | ||||
|  * | ||||
|  *    KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. | ||||
|  *    KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. | ||||
|  * | ||||
|  * Calling convention macros defined in this file: | ||||
|  *    KHRONOS_APICALL | ||||
|  *    KHRONOS_APIENTRY | ||||
|  *    KHRONOS_APIATTRIBUTES | ||||
|  * | ||||
|  * These may be used in function prototypes as: | ||||
|  * | ||||
|  *      KHRONOS_APICALL void KHRONOS_APIENTRY funcname( | ||||
|  *                                  int arg1, | ||||
|  *                                  int arg2) KHRONOS_APIATTRIBUTES; | ||||
|  */ | ||||
|  | ||||
| /*------------------------------------------------------------------------- | ||||
|  * Definition of KHRONOS_APICALL | ||||
|  *------------------------------------------------------------------------- | ||||
|  * This precedes the return type of the function in the function prototype. | ||||
|  */ | ||||
| #if defined(_WIN32) && !defined(__SCITECH_SNAP__) | ||||
| #   define KHRONOS_APICALL __declspec(dllimport) | ||||
| #elif defined (__SYMBIAN32__) | ||||
| #   define KHRONOS_APICALL IMPORT_C | ||||
| #else | ||||
| #   define KHRONOS_APICALL | ||||
| #endif | ||||
|  | ||||
| /*------------------------------------------------------------------------- | ||||
|  * Definition of KHRONOS_APIENTRY | ||||
|  *------------------------------------------------------------------------- | ||||
|  * This follows the return type of the function  and precedes the function | ||||
|  * name in the function prototype. | ||||
|  */ | ||||
| #if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) | ||||
|     /* Win32 but not WinCE */ | ||||
| #   define KHRONOS_APIENTRY __stdcall | ||||
| #else | ||||
| #   define KHRONOS_APIENTRY | ||||
| #endif | ||||
|  | ||||
| /*------------------------------------------------------------------------- | ||||
|  * Definition of KHRONOS_APIATTRIBUTES | ||||
|  *------------------------------------------------------------------------- | ||||
|  * This follows the closing parenthesis of the function prototype arguments. | ||||
|  */ | ||||
| #if defined (__ARMCC_2__) | ||||
| #define KHRONOS_APIATTRIBUTES __softfp | ||||
| #else | ||||
| #define KHRONOS_APIATTRIBUTES | ||||
| #endif | ||||
|  | ||||
| /*------------------------------------------------------------------------- | ||||
|  * basic type definitions | ||||
|  *-----------------------------------------------------------------------*/ | ||||
| #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * Using <stdint.h> | ||||
|  */ | ||||
| #include <stdint.h> | ||||
| typedef int32_t                 khronos_int32_t; | ||||
| typedef uint32_t                khronos_uint32_t; | ||||
| typedef int64_t                 khronos_int64_t; | ||||
| typedef uint64_t                khronos_uint64_t; | ||||
| #define KHRONOS_SUPPORT_INT64   1 | ||||
| #define KHRONOS_SUPPORT_FLOAT   1 | ||||
|  | ||||
| #elif defined(__VMS ) || defined(__sgi) | ||||
|  | ||||
| /* | ||||
|  * Using <inttypes.h> | ||||
|  */ | ||||
| #include <inttypes.h> | ||||
| typedef int32_t                 khronos_int32_t; | ||||
| typedef uint32_t                khronos_uint32_t; | ||||
| typedef int64_t                 khronos_int64_t; | ||||
| typedef uint64_t                khronos_uint64_t; | ||||
| #define KHRONOS_SUPPORT_INT64   1 | ||||
| #define KHRONOS_SUPPORT_FLOAT   1 | ||||
|  | ||||
| #elif defined(_WIN32) && !defined(__SCITECH_SNAP__) | ||||
|  | ||||
| /* | ||||
|  * Win32 | ||||
|  */ | ||||
| typedef __int32                 khronos_int32_t; | ||||
| typedef unsigned __int32        khronos_uint32_t; | ||||
| typedef __int64                 khronos_int64_t; | ||||
| typedef unsigned __int64        khronos_uint64_t; | ||||
| #define KHRONOS_SUPPORT_INT64   1 | ||||
| #define KHRONOS_SUPPORT_FLOAT   1 | ||||
|  | ||||
| #elif defined(__sun__) || defined(__digital__) | ||||
|  | ||||
| /* | ||||
|  * Sun or Digital | ||||
|  */ | ||||
| typedef int                     khronos_int32_t; | ||||
| typedef unsigned int            khronos_uint32_t; | ||||
| #if defined(__arch64__) || defined(_LP64) | ||||
| typedef long int                khronos_int64_t; | ||||
| typedef unsigned long int       khronos_uint64_t; | ||||
| #else | ||||
| typedef long long int           khronos_int64_t; | ||||
| typedef unsigned long long int  khronos_uint64_t; | ||||
| #endif /* __arch64__ */ | ||||
| #define KHRONOS_SUPPORT_INT64   1 | ||||
| #define KHRONOS_SUPPORT_FLOAT   1 | ||||
|  | ||||
| #elif 0 | ||||
|  | ||||
| /* | ||||
|  * Hypothetical platform with no float or int64 support | ||||
|  */ | ||||
| typedef int                     khronos_int32_t; | ||||
| typedef unsigned int            khronos_uint32_t; | ||||
| #define KHRONOS_SUPPORT_INT64   0 | ||||
| #define KHRONOS_SUPPORT_FLOAT   0 | ||||
|  | ||||
| #else | ||||
|  | ||||
| /* | ||||
|  * Generic fallback | ||||
|  */ | ||||
| #include <stdint.h> | ||||
| typedef int32_t                 khronos_int32_t; | ||||
| typedef uint32_t                khronos_uint32_t; | ||||
| typedef int64_t                 khronos_int64_t; | ||||
| typedef uint64_t                khronos_uint64_t; | ||||
| #define KHRONOS_SUPPORT_INT64   1 | ||||
| #define KHRONOS_SUPPORT_FLOAT   1 | ||||
|  | ||||
| #endif | ||||
|  | ||||
|  | ||||
| /* | ||||
|  * Types that are (so far) the same on all platforms | ||||
|  */ | ||||
| typedef signed   char          khronos_int8_t; | ||||
| typedef unsigned char          khronos_uint8_t; | ||||
| typedef signed   short int     khronos_int16_t; | ||||
| typedef unsigned short int     khronos_uint16_t; | ||||
|  | ||||
| /* | ||||
|  * Types that differ between LLP64 and LP64 architectures - in LLP64,  | ||||
|  * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears | ||||
|  * to be the only LLP64 architecture in current use. | ||||
|  */ | ||||
| #ifdef _WIN64 | ||||
| typedef signed   long long int khronos_intptr_t; | ||||
| typedef unsigned long long int khronos_uintptr_t; | ||||
| typedef signed   long long int khronos_ssize_t; | ||||
| typedef unsigned long long int khronos_usize_t; | ||||
| #else | ||||
| typedef signed   long  int     khronos_intptr_t; | ||||
| typedef unsigned long  int     khronos_uintptr_t; | ||||
| typedef signed   long  int     khronos_ssize_t; | ||||
| typedef unsigned long  int     khronos_usize_t; | ||||
| #endif | ||||
|  | ||||
| #if KHRONOS_SUPPORT_FLOAT | ||||
| /* | ||||
|  * Float type | ||||
|  */ | ||||
| typedef          float         khronos_float_t; | ||||
| #endif | ||||
|  | ||||
| #if KHRONOS_SUPPORT_INT64 | ||||
| /* Time types | ||||
|  * | ||||
|  * These types can be used to represent a time interval in nanoseconds or | ||||
|  * an absolute Unadjusted System Time.  Unadjusted System Time is the number | ||||
|  * of nanoseconds since some arbitrary system event (e.g. since the last | ||||
|  * time the system booted).  The Unadjusted System Time is an unsigned | ||||
|  * 64 bit value that wraps back to 0 every 584 years.  Time intervals | ||||
|  * may be either signed or unsigned. | ||||
|  */ | ||||
| typedef khronos_uint64_t       khronos_utime_nanoseconds_t; | ||||
| typedef khronos_int64_t        khronos_stime_nanoseconds_t; | ||||
| #endif | ||||
|  | ||||
| /* | ||||
|  * Dummy value used to pad enum types to 32 bits. | ||||
|  */ | ||||
| #ifndef KHRONOS_MAX_ENUM | ||||
| #define KHRONOS_MAX_ENUM 0x7FFFFFFF | ||||
| #endif | ||||
|  | ||||
| /* | ||||
|  * Enumerated boolean type | ||||
|  * | ||||
|  * Values other than zero should be considered to be true.  Therefore | ||||
|  * comparisons should not be made against KHRONOS_TRUE. | ||||
|  */ | ||||
| typedef enum { | ||||
|     KHRONOS_FALSE = 0, | ||||
|     KHRONOS_TRUE  = 1, | ||||
|     KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM | ||||
| } khronos_boolean_enum_t; | ||||
|  | ||||
| #endif /* __khrplatform_h_ */ | ||||
| @@ -0,0 +1,454 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_pixels.h | ||||
|  * | ||||
|  *  Header for the enumerated pixel format definitions. | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_pixels_h | ||||
| #define _SDL_pixels_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  *  \name Transparency definitions | ||||
|  * | ||||
|  *  These define alpha as the opacity of a surface. | ||||
|  */ | ||||
| /* @{ */ | ||||
| #define SDL_ALPHA_OPAQUE 255 | ||||
| #define SDL_ALPHA_TRANSPARENT 0 | ||||
| /* @} */ | ||||
|  | ||||
| /** Pixel type. */ | ||||
| enum | ||||
| { | ||||
|     SDL_PIXELTYPE_UNKNOWN, | ||||
|     SDL_PIXELTYPE_INDEX1, | ||||
|     SDL_PIXELTYPE_INDEX4, | ||||
|     SDL_PIXELTYPE_INDEX8, | ||||
|     SDL_PIXELTYPE_PACKED8, | ||||
|     SDL_PIXELTYPE_PACKED16, | ||||
|     SDL_PIXELTYPE_PACKED32, | ||||
|     SDL_PIXELTYPE_ARRAYU8, | ||||
|     SDL_PIXELTYPE_ARRAYU16, | ||||
|     SDL_PIXELTYPE_ARRAYU32, | ||||
|     SDL_PIXELTYPE_ARRAYF16, | ||||
|     SDL_PIXELTYPE_ARRAYF32 | ||||
| }; | ||||
|  | ||||
| /** Bitmap pixel order, high bit -> low bit. */ | ||||
| enum | ||||
| { | ||||
|     SDL_BITMAPORDER_NONE, | ||||
|     SDL_BITMAPORDER_4321, | ||||
|     SDL_BITMAPORDER_1234 | ||||
| }; | ||||
|  | ||||
| /** Packed component order, high bit -> low bit. */ | ||||
| enum | ||||
| { | ||||
|     SDL_PACKEDORDER_NONE, | ||||
|     SDL_PACKEDORDER_XRGB, | ||||
|     SDL_PACKEDORDER_RGBX, | ||||
|     SDL_PACKEDORDER_ARGB, | ||||
|     SDL_PACKEDORDER_RGBA, | ||||
|     SDL_PACKEDORDER_XBGR, | ||||
|     SDL_PACKEDORDER_BGRX, | ||||
|     SDL_PACKEDORDER_ABGR, | ||||
|     SDL_PACKEDORDER_BGRA | ||||
| }; | ||||
|  | ||||
| /** Array component order, low byte -> high byte. */ | ||||
| /* !!! FIXME: in 2.1, make these not overlap differently with | ||||
|    !!! FIXME:  SDL_PACKEDORDER_*, so we can simplify SDL_ISPIXELFORMAT_ALPHA */ | ||||
| enum | ||||
| { | ||||
|     SDL_ARRAYORDER_NONE, | ||||
|     SDL_ARRAYORDER_RGB, | ||||
|     SDL_ARRAYORDER_RGBA, | ||||
|     SDL_ARRAYORDER_ARGB, | ||||
|     SDL_ARRAYORDER_BGR, | ||||
|     SDL_ARRAYORDER_BGRA, | ||||
|     SDL_ARRAYORDER_ABGR | ||||
| }; | ||||
|  | ||||
| /** Packed component layout. */ | ||||
| enum | ||||
| { | ||||
|     SDL_PACKEDLAYOUT_NONE, | ||||
|     SDL_PACKEDLAYOUT_332, | ||||
|     SDL_PACKEDLAYOUT_4444, | ||||
|     SDL_PACKEDLAYOUT_1555, | ||||
|     SDL_PACKEDLAYOUT_5551, | ||||
|     SDL_PACKEDLAYOUT_565, | ||||
|     SDL_PACKEDLAYOUT_8888, | ||||
|     SDL_PACKEDLAYOUT_2101010, | ||||
|     SDL_PACKEDLAYOUT_1010102 | ||||
| }; | ||||
|  | ||||
| #define SDL_DEFINE_PIXELFOURCC(A, B, C, D) SDL_FOURCC(A, B, C, D) | ||||
|  | ||||
| #define SDL_DEFINE_PIXELFORMAT(type, order, layout, bits, bytes) \ | ||||
|     ((1 << 28) | ((type) << 24) | ((order) << 20) | ((layout) << 16) | \ | ||||
|      ((bits) << 8) | ((bytes) << 0)) | ||||
|  | ||||
| #define SDL_PIXELFLAG(X)    (((X) >> 28) & 0x0F) | ||||
| #define SDL_PIXELTYPE(X)    (((X) >> 24) & 0x0F) | ||||
| #define SDL_PIXELORDER(X)   (((X) >> 20) & 0x0F) | ||||
| #define SDL_PIXELLAYOUT(X)  (((X) >> 16) & 0x0F) | ||||
| #define SDL_BITSPERPIXEL(X) (((X) >> 8) & 0xFF) | ||||
| #define SDL_BYTESPERPIXEL(X) \ | ||||
|     (SDL_ISPIXELFORMAT_FOURCC(X) ? \ | ||||
|         ((((X) == SDL_PIXELFORMAT_YUY2) || \ | ||||
|           ((X) == SDL_PIXELFORMAT_UYVY) || \ | ||||
|           ((X) == SDL_PIXELFORMAT_YVYU)) ? 2 : 1) : (((X) >> 0) & 0xFF)) | ||||
|  | ||||
| #define SDL_ISPIXELFORMAT_INDEXED(format)   \ | ||||
|     (!SDL_ISPIXELFORMAT_FOURCC(format) && \ | ||||
|      ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX1) || \ | ||||
|       (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX4) || \ | ||||
|       (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX8))) | ||||
|  | ||||
| #define SDL_ISPIXELFORMAT_PACKED(format) \ | ||||
|     (!SDL_ISPIXELFORMAT_FOURCC(format) && \ | ||||
|      ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED8) || \ | ||||
|       (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED16) || \ | ||||
|       (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED32))) | ||||
|  | ||||
| #define SDL_ISPIXELFORMAT_ARRAY(format) \ | ||||
|     (!SDL_ISPIXELFORMAT_FOURCC(format) && \ | ||||
|      ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU8) || \ | ||||
|       (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU16) || \ | ||||
|       (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU32) || \ | ||||
|       (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF16) || \ | ||||
|       (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF32))) | ||||
|  | ||||
| #define SDL_ISPIXELFORMAT_ALPHA(format)   \ | ||||
|     ((SDL_ISPIXELFORMAT_PACKED(format) && \ | ||||
|      ((SDL_PIXELORDER(format) == SDL_PACKEDORDER_ARGB) || \ | ||||
|       (SDL_PIXELORDER(format) == SDL_PACKEDORDER_RGBA) || \ | ||||
|       (SDL_PIXELORDER(format) == SDL_PACKEDORDER_ABGR) || \ | ||||
|       (SDL_PIXELORDER(format) == SDL_PACKEDORDER_BGRA))) || \ | ||||
|     (SDL_ISPIXELFORMAT_ARRAY(format) && \ | ||||
|      ((SDL_PIXELORDER(format) == SDL_ARRAYORDER_ARGB) || \ | ||||
|       (SDL_PIXELORDER(format) == SDL_ARRAYORDER_RGBA) || \ | ||||
|       (SDL_PIXELORDER(format) == SDL_ARRAYORDER_ABGR) || \ | ||||
|       (SDL_PIXELORDER(format) == SDL_ARRAYORDER_BGRA)))) | ||||
|  | ||||
| /* The flag is set to 1 because 0x1? is not in the printable ASCII range */ | ||||
| #define SDL_ISPIXELFORMAT_FOURCC(format)    \ | ||||
|     ((format) && (SDL_PIXELFLAG(format) != 1)) | ||||
|  | ||||
| /* Note: If you modify this list, update SDL_GetPixelFormatName() */ | ||||
| enum | ||||
| { | ||||
|     SDL_PIXELFORMAT_UNKNOWN, | ||||
|     SDL_PIXELFORMAT_INDEX1LSB = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_4321, 0, | ||||
|                                1, 0), | ||||
|     SDL_PIXELFORMAT_INDEX1MSB = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_1234, 0, | ||||
|                                1, 0), | ||||
|     SDL_PIXELFORMAT_INDEX4LSB = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_4321, 0, | ||||
|                                4, 0), | ||||
|     SDL_PIXELFORMAT_INDEX4MSB = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_1234, 0, | ||||
|                                4, 0), | ||||
|     SDL_PIXELFORMAT_INDEX8 = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX8, 0, 0, 8, 1), | ||||
|     SDL_PIXELFORMAT_RGB332 = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED8, SDL_PACKEDORDER_XRGB, | ||||
|                                SDL_PACKEDLAYOUT_332, 8, 1), | ||||
|     SDL_PIXELFORMAT_RGB444 = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, | ||||
|                                SDL_PACKEDLAYOUT_4444, 12, 2), | ||||
|     SDL_PIXELFORMAT_RGB555 = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, | ||||
|                                SDL_PACKEDLAYOUT_1555, 15, 2), | ||||
|     SDL_PIXELFORMAT_BGR555 = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, | ||||
|                                SDL_PACKEDLAYOUT_1555, 15, 2), | ||||
|     SDL_PIXELFORMAT_ARGB4444 = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, | ||||
|                                SDL_PACKEDLAYOUT_4444, 16, 2), | ||||
|     SDL_PIXELFORMAT_RGBA4444 = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA, | ||||
|                                SDL_PACKEDLAYOUT_4444, 16, 2), | ||||
|     SDL_PIXELFORMAT_ABGR4444 = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR, | ||||
|                                SDL_PACKEDLAYOUT_4444, 16, 2), | ||||
|     SDL_PIXELFORMAT_BGRA4444 = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA, | ||||
|                                SDL_PACKEDLAYOUT_4444, 16, 2), | ||||
|     SDL_PIXELFORMAT_ARGB1555 = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, | ||||
|                                SDL_PACKEDLAYOUT_1555, 16, 2), | ||||
|     SDL_PIXELFORMAT_RGBA5551 = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA, | ||||
|                                SDL_PACKEDLAYOUT_5551, 16, 2), | ||||
|     SDL_PIXELFORMAT_ABGR1555 = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR, | ||||
|                                SDL_PACKEDLAYOUT_1555, 16, 2), | ||||
|     SDL_PIXELFORMAT_BGRA5551 = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA, | ||||
|                                SDL_PACKEDLAYOUT_5551, 16, 2), | ||||
|     SDL_PIXELFORMAT_RGB565 = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, | ||||
|                                SDL_PACKEDLAYOUT_565, 16, 2), | ||||
|     SDL_PIXELFORMAT_BGR565 = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, | ||||
|                                SDL_PACKEDLAYOUT_565, 16, 2), | ||||
|     SDL_PIXELFORMAT_RGB24 = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_RGB, 0, | ||||
|                                24, 3), | ||||
|     SDL_PIXELFORMAT_BGR24 = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_BGR, 0, | ||||
|                                24, 3), | ||||
|     SDL_PIXELFORMAT_RGB888 = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XRGB, | ||||
|                                SDL_PACKEDLAYOUT_8888, 24, 4), | ||||
|     SDL_PIXELFORMAT_RGBX8888 = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBX, | ||||
|                                SDL_PACKEDLAYOUT_8888, 24, 4), | ||||
|     SDL_PIXELFORMAT_BGR888 = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XBGR, | ||||
|                                SDL_PACKEDLAYOUT_8888, 24, 4), | ||||
|     SDL_PIXELFORMAT_BGRX8888 = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRX, | ||||
|                                SDL_PACKEDLAYOUT_8888, 24, 4), | ||||
|     SDL_PIXELFORMAT_ARGB8888 = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, | ||||
|                                SDL_PACKEDLAYOUT_8888, 32, 4), | ||||
|     SDL_PIXELFORMAT_RGBA8888 = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBA, | ||||
|                                SDL_PACKEDLAYOUT_8888, 32, 4), | ||||
|     SDL_PIXELFORMAT_ABGR8888 = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ABGR, | ||||
|                                SDL_PACKEDLAYOUT_8888, 32, 4), | ||||
|     SDL_PIXELFORMAT_BGRA8888 = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRA, | ||||
|                                SDL_PACKEDLAYOUT_8888, 32, 4), | ||||
|     SDL_PIXELFORMAT_ARGB2101010 = | ||||
|         SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, | ||||
|                                SDL_PACKEDLAYOUT_2101010, 32, 4), | ||||
|  | ||||
|     SDL_PIXELFORMAT_YV12 =      /**< Planar mode: Y + V + U  (3 planes) */ | ||||
|         SDL_DEFINE_PIXELFOURCC('Y', 'V', '1', '2'), | ||||
|     SDL_PIXELFORMAT_IYUV =      /**< Planar mode: Y + U + V  (3 planes) */ | ||||
|         SDL_DEFINE_PIXELFOURCC('I', 'Y', 'U', 'V'), | ||||
|     SDL_PIXELFORMAT_YUY2 =      /**< Packed mode: Y0+U0+Y1+V0 (1 plane) */ | ||||
|         SDL_DEFINE_PIXELFOURCC('Y', 'U', 'Y', '2'), | ||||
|     SDL_PIXELFORMAT_UYVY =      /**< Packed mode: U0+Y0+V0+Y1 (1 plane) */ | ||||
|         SDL_DEFINE_PIXELFOURCC('U', 'Y', 'V', 'Y'), | ||||
|     SDL_PIXELFORMAT_YVYU =      /**< Packed mode: Y0+V0+Y1+U0 (1 plane) */ | ||||
|         SDL_DEFINE_PIXELFOURCC('Y', 'V', 'Y', 'U'), | ||||
|     SDL_PIXELFORMAT_NV12 =      /**< Planar mode: Y + U/V interleaved  (2 planes) */ | ||||
|         SDL_DEFINE_PIXELFOURCC('N', 'V', '1', '2'), | ||||
|     SDL_PIXELFORMAT_NV21 =      /**< Planar mode: Y + V/U interleaved  (2 planes) */ | ||||
|         SDL_DEFINE_PIXELFOURCC('N', 'V', '2', '1') | ||||
| }; | ||||
|  | ||||
| typedef struct SDL_Color | ||||
| { | ||||
|     Uint8 r; | ||||
|     Uint8 g; | ||||
|     Uint8 b; | ||||
|     Uint8 a; | ||||
| } SDL_Color; | ||||
| #define SDL_Colour SDL_Color | ||||
|  | ||||
| typedef struct SDL_Palette | ||||
| { | ||||
|     int ncolors; | ||||
|     SDL_Color *colors; | ||||
|     Uint32 version; | ||||
|     int refcount; | ||||
| } SDL_Palette; | ||||
|  | ||||
| /** | ||||
|  *  \note Everything in the pixel format structure is read-only. | ||||
|  */ | ||||
| typedef struct SDL_PixelFormat | ||||
| { | ||||
|     Uint32 format; | ||||
|     SDL_Palette *palette; | ||||
|     Uint8 BitsPerPixel; | ||||
|     Uint8 BytesPerPixel; | ||||
|     Uint8 padding[2]; | ||||
|     Uint32 Rmask; | ||||
|     Uint32 Gmask; | ||||
|     Uint32 Bmask; | ||||
|     Uint32 Amask; | ||||
|     Uint8 Rloss; | ||||
|     Uint8 Gloss; | ||||
|     Uint8 Bloss; | ||||
|     Uint8 Aloss; | ||||
|     Uint8 Rshift; | ||||
|     Uint8 Gshift; | ||||
|     Uint8 Bshift; | ||||
|     Uint8 Ashift; | ||||
|     int refcount; | ||||
|     struct SDL_PixelFormat *next; | ||||
| } SDL_PixelFormat; | ||||
|  | ||||
| /** | ||||
|  * \brief Get the human readable name of a pixel format | ||||
|  */ | ||||
| extern DECLSPEC const char* SDLCALL SDL_GetPixelFormatName(Uint32 format); | ||||
|  | ||||
| /** | ||||
|  *  \brief Convert one of the enumerated pixel formats to a bpp and RGBA masks. | ||||
|  * | ||||
|  *  \return SDL_TRUE, or SDL_FALSE if the conversion wasn't possible. | ||||
|  * | ||||
|  *  \sa SDL_MasksToPixelFormatEnum() | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_PixelFormatEnumToMasks(Uint32 format, | ||||
|                                                             int *bpp, | ||||
|                                                             Uint32 * Rmask, | ||||
|                                                             Uint32 * Gmask, | ||||
|                                                             Uint32 * Bmask, | ||||
|                                                             Uint32 * Amask); | ||||
|  | ||||
| /** | ||||
|  *  \brief Convert a bpp and RGBA masks to an enumerated pixel format. | ||||
|  * | ||||
|  *  \return The pixel format, or ::SDL_PIXELFORMAT_UNKNOWN if the conversion | ||||
|  *          wasn't possible. | ||||
|  * | ||||
|  *  \sa SDL_PixelFormatEnumToMasks() | ||||
|  */ | ||||
| extern DECLSPEC Uint32 SDLCALL SDL_MasksToPixelFormatEnum(int bpp, | ||||
|                                                           Uint32 Rmask, | ||||
|                                                           Uint32 Gmask, | ||||
|                                                           Uint32 Bmask, | ||||
|                                                           Uint32 Amask); | ||||
|  | ||||
| /** | ||||
|  *  \brief Create an SDL_PixelFormat structure from a pixel format enum. | ||||
|  */ | ||||
| extern DECLSPEC SDL_PixelFormat * SDLCALL SDL_AllocFormat(Uint32 pixel_format); | ||||
|  | ||||
| /** | ||||
|  *  \brief Free an SDL_PixelFormat structure. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_FreeFormat(SDL_PixelFormat *format); | ||||
|  | ||||
| /** | ||||
|  *  \brief Create a palette structure with the specified number of color | ||||
|  *         entries. | ||||
|  * | ||||
|  *  \return A new palette, or NULL if there wasn't enough memory. | ||||
|  * | ||||
|  *  \note The palette entries are initialized to white. | ||||
|  * | ||||
|  *  \sa SDL_FreePalette() | ||||
|  */ | ||||
| extern DECLSPEC SDL_Palette *SDLCALL SDL_AllocPalette(int ncolors); | ||||
|  | ||||
| /** | ||||
|  *  \brief Set the palette for a pixel format structure. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_SetPixelFormatPalette(SDL_PixelFormat * format, | ||||
|                                                       SDL_Palette *palette); | ||||
|  | ||||
| /** | ||||
|  *  \brief Set a range of colors in a palette. | ||||
|  * | ||||
|  *  \param palette    The palette to modify. | ||||
|  *  \param colors     An array of colors to copy into the palette. | ||||
|  *  \param firstcolor The index of the first palette entry to modify. | ||||
|  *  \param ncolors    The number of entries to modify. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 if not all of the colors could be set. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_SetPaletteColors(SDL_Palette * palette, | ||||
|                                                  const SDL_Color * colors, | ||||
|                                                  int firstcolor, int ncolors); | ||||
|  | ||||
| /** | ||||
|  *  \brief Free a palette created with SDL_AllocPalette(). | ||||
|  * | ||||
|  *  \sa SDL_AllocPalette() | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_FreePalette(SDL_Palette * palette); | ||||
|  | ||||
| /** | ||||
|  *  \brief Maps an RGB triple to an opaque pixel value for a given pixel format. | ||||
|  * | ||||
|  *  \sa SDL_MapRGBA | ||||
|  */ | ||||
| extern DECLSPEC Uint32 SDLCALL SDL_MapRGB(const SDL_PixelFormat * format, | ||||
|                                           Uint8 r, Uint8 g, Uint8 b); | ||||
|  | ||||
| /** | ||||
|  *  \brief Maps an RGBA quadruple to a pixel value for a given pixel format. | ||||
|  * | ||||
|  *  \sa SDL_MapRGB | ||||
|  */ | ||||
| extern DECLSPEC Uint32 SDLCALL SDL_MapRGBA(const SDL_PixelFormat * format, | ||||
|                                            Uint8 r, Uint8 g, Uint8 b, | ||||
|                                            Uint8 a); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the RGB components from a pixel of the specified format. | ||||
|  * | ||||
|  *  \sa SDL_GetRGBA | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_GetRGB(Uint32 pixel, | ||||
|                                         const SDL_PixelFormat * format, | ||||
|                                         Uint8 * r, Uint8 * g, Uint8 * b); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the RGBA components from a pixel of the specified format. | ||||
|  * | ||||
|  *  \sa SDL_GetRGB | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_GetRGBA(Uint32 pixel, | ||||
|                                          const SDL_PixelFormat * format, | ||||
|                                          Uint8 * r, Uint8 * g, Uint8 * b, | ||||
|                                          Uint8 * a); | ||||
|  | ||||
| /** | ||||
|  *  \brief Calculate a 256 entry gamma ramp for a gamma value. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_CalculateGammaRamp(float gamma, Uint16 * ramp); | ||||
|  | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_pixels_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,181 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_platform.h | ||||
|  * | ||||
|  *  Try to get a standard set of platform defines. | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_platform_h | ||||
| #define _SDL_platform_h | ||||
|  | ||||
| #if defined(_AIX) | ||||
| #undef __AIX__ | ||||
| #define __AIX__     1 | ||||
| #endif | ||||
| #if defined(__HAIKU__) | ||||
| #undef __HAIKU__ | ||||
| #define __HAIKU__   1 | ||||
| #endif | ||||
| #if defined(bsdi) || defined(__bsdi) || defined(__bsdi__) | ||||
| #undef __BSDI__ | ||||
| #define __BSDI__    1 | ||||
| #endif | ||||
| #if defined(_arch_dreamcast) | ||||
| #undef __DREAMCAST__ | ||||
| #define __DREAMCAST__   1 | ||||
| #endif | ||||
| #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) | ||||
| #undef __FREEBSD__ | ||||
| #define __FREEBSD__ 1 | ||||
| #endif | ||||
| #if defined(hpux) || defined(__hpux) || defined(__hpux__) | ||||
| #undef __HPUX__ | ||||
| #define __HPUX__    1 | ||||
| #endif | ||||
| #if defined(sgi) || defined(__sgi) || defined(__sgi__) || defined(_SGI_SOURCE) | ||||
| #undef __IRIX__ | ||||
| #define __IRIX__    1 | ||||
| #endif | ||||
| #if (defined(linux) || defined(__linux) || defined(__linux__)) | ||||
| #undef __LINUX__ | ||||
| #define __LINUX__   1 | ||||
| #endif | ||||
| #if defined(ANDROID) || defined(__ANDROID__) | ||||
| #undef __ANDROID__ | ||||
| #undef __LINUX__ /* do we need to do this? */ | ||||
| #define __ANDROID__ 1 | ||||
| #endif | ||||
|  | ||||
| #if defined(__APPLE__) | ||||
| /* lets us know what version of Mac OS X we're compiling on */ | ||||
| #include "AvailabilityMacros.h" | ||||
| #include "TargetConditionals.h" | ||||
| #if TARGET_OS_IPHONE | ||||
| /* if compiling for iPhone */ | ||||
| #undef __IPHONEOS__ | ||||
| #define __IPHONEOS__ 1 | ||||
| #undef __MACOSX__ | ||||
| #else | ||||
| /* if not compiling for iPhone */ | ||||
| #undef __MACOSX__ | ||||
| #define __MACOSX__  1 | ||||
| #if MAC_OS_X_VERSION_MIN_REQUIRED < 1050 | ||||
| # error SDL for Mac OS X only supports deploying on 10.5 and above. | ||||
| #endif /* MAC_OS_X_VERSION_MIN_REQUIRED < 1050 */ | ||||
| #endif /* TARGET_OS_IPHONE */ | ||||
| #endif /* defined(__APPLE__) */ | ||||
|  | ||||
| #if defined(__NetBSD__) | ||||
| #undef __NETBSD__ | ||||
| #define __NETBSD__  1 | ||||
| #endif | ||||
| #if defined(__OpenBSD__) | ||||
| #undef __OPENBSD__ | ||||
| #define __OPENBSD__ 1 | ||||
| #endif | ||||
| #if defined(__OS2__) | ||||
| #undef __OS2__ | ||||
| #define __OS2__     1 | ||||
| #endif | ||||
| #if defined(osf) || defined(__osf) || defined(__osf__) || defined(_OSF_SOURCE) | ||||
| #undef __OSF__ | ||||
| #define __OSF__     1 | ||||
| #endif | ||||
| #if defined(__QNXNTO__) | ||||
| #undef __QNXNTO__ | ||||
| #define __QNXNTO__  1 | ||||
| #endif | ||||
| #if defined(riscos) || defined(__riscos) || defined(__riscos__) | ||||
| #undef __RISCOS__ | ||||
| #define __RISCOS__  1 | ||||
| #endif | ||||
| #if defined(__sun) && defined(__SVR4) | ||||
| #undef __SOLARIS__ | ||||
| #define __SOLARIS__ 1 | ||||
| #endif | ||||
|  | ||||
| #if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) | ||||
| /* Try to find out if we're compiling for WinRT or non-WinRT */ | ||||
| /* If _USING_V110_SDK71_ is defined it means we are using the v110_xp or v120_xp toolset. */ | ||||
| #if (defined(_MSC_VER) && (_MSC_VER >= 1700) && !_USING_V110_SDK71_)	/* _MSC_VER==1700 for MSVC 2012 */ | ||||
| #include <winapifamily.h> | ||||
| #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) | ||||
| #undef __WINDOWS__ | ||||
| #define __WINDOWS__   1 | ||||
| /* See if we're compiling for WinRT: */ | ||||
| #elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) | ||||
| #undef __WINRT__ | ||||
| #define __WINRT__ 1 | ||||
| #endif | ||||
| #else | ||||
| #undef __WINDOWS__ | ||||
| #define __WINDOWS__   1 | ||||
| #endif /* _MSC_VER < 1700 */ | ||||
| #endif /* defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) */ | ||||
|  | ||||
| #if defined(__WINDOWS__) | ||||
| #undef __WIN32__ | ||||
| #define __WIN32__ 1 | ||||
| #endif | ||||
| #if defined(__PSP__) | ||||
| #undef __PSP__ | ||||
| #define __PSP__ 1 | ||||
| #endif | ||||
|  | ||||
| /* The NACL compiler defines __native_client__ and __pnacl__ | ||||
|  * Ref: http://www.chromium.org/nativeclient/pnacl/stability-of-the-pnacl-bitcode-abi | ||||
|  */ | ||||
| #if defined(__native_client__) | ||||
| #undef __LINUX__ | ||||
| #undef __NACL__ | ||||
| #define __NACL__ 1 | ||||
| #endif | ||||
| #if defined(__pnacl__) | ||||
| #undef __LINUX__ | ||||
| #undef __PNACL__ | ||||
| #define __PNACL__ 1 | ||||
| /* PNACL with newlib supports static linking only */ | ||||
| #define __SDL_NOGETPROCADDR__ | ||||
| #endif | ||||
|  | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  *  \brief Gets the name of the platform. | ||||
|  */ | ||||
| extern DECLSPEC const char * SDLCALL SDL_GetPlatform (void); | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_platform_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,75 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_power_h | ||||
| #define _SDL_power_h | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_power.h | ||||
|  * | ||||
|  *  Header for the SDL power management routines. | ||||
|  */ | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  *  \brief The basic state for the system's power supply. | ||||
|  */ | ||||
| typedef enum | ||||
| { | ||||
|     SDL_POWERSTATE_UNKNOWN,      /**< cannot determine power status */ | ||||
|     SDL_POWERSTATE_ON_BATTERY,   /**< Not plugged in, running on the battery */ | ||||
|     SDL_POWERSTATE_NO_BATTERY,   /**< Plugged in, no battery available */ | ||||
|     SDL_POWERSTATE_CHARGING,     /**< Plugged in, charging battery */ | ||||
|     SDL_POWERSTATE_CHARGED       /**< Plugged in, battery charged */ | ||||
| } SDL_PowerState; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the current power supply details. | ||||
|  * | ||||
|  *  \param secs Seconds of battery life left. You can pass a NULL here if | ||||
|  *              you don't care. Will return -1 if we can't determine a | ||||
|  *              value, or we're not running on a battery. | ||||
|  * | ||||
|  *  \param pct Percentage of battery life left, between 0 and 100. You can | ||||
|  *             pass a NULL here if you don't care. Will return -1 if we | ||||
|  *             can't determine a value, or we're not running on a battery. | ||||
|  * | ||||
|  *  \return The state of the battery (if any). | ||||
|  */ | ||||
| extern DECLSPEC SDL_PowerState SDLCALL SDL_GetPowerInfo(int *secs, int *pct); | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_power_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,58 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_quit.h | ||||
|  * | ||||
|  *  Include file for SDL quit event handling. | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_quit_h | ||||
| #define _SDL_quit_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
| #include "SDL_error.h" | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_quit.h | ||||
|  * | ||||
|  *  An ::SDL_QUIT event is generated when the user tries to close the application | ||||
|  *  window.  If it is ignored or filtered out, the window will remain open. | ||||
|  *  If it is not ignored or filtered, it is queued normally and the window | ||||
|  *  is allowed to close.  When the window is closed, screen updates will | ||||
|  *  complete, but have no effect. | ||||
|  * | ||||
|  *  SDL_Init() installs signal handlers for SIGINT (keyboard interrupt) | ||||
|  *  and SIGTERM (system termination request), if handlers do not already | ||||
|  *  exist, that generate ::SDL_QUIT events as well.  There is no way | ||||
|  *  to determine the cause of an ::SDL_QUIT event, but setting a signal | ||||
|  *  handler in your application will override the default generation of | ||||
|  *  quit events for that signal. | ||||
|  * | ||||
|  *  \sa SDL_Quit() | ||||
|  */ | ||||
|  | ||||
| /* There are no functions directly affecting the quit event */ | ||||
|  | ||||
| #define SDL_QuitRequested() \ | ||||
|         (SDL_PumpEvents(), (SDL_PeepEvents(NULL,0,SDL_PEEKEVENT,SDL_QUIT,SDL_QUIT) > 0)) | ||||
|  | ||||
| #endif /* _SDL_quit_h */ | ||||
| @@ -0,0 +1,148 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_rect.h | ||||
|  * | ||||
|  *  Header file for SDL_rect definition and management functions. | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_rect_h | ||||
| #define _SDL_rect_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
| #include "SDL_error.h" | ||||
| #include "SDL_pixels.h" | ||||
| #include "SDL_rwops.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  *  \brief  The structure that defines a point | ||||
|  * | ||||
|  *  \sa SDL_EnclosePoints | ||||
|  *  \sa SDL_PointInRect | ||||
|  */ | ||||
| typedef struct SDL_Point | ||||
| { | ||||
|     int x; | ||||
|     int y; | ||||
| } SDL_Point; | ||||
|  | ||||
| /** | ||||
|  *  \brief A rectangle, with the origin at the upper left. | ||||
|  * | ||||
|  *  \sa SDL_RectEmpty | ||||
|  *  \sa SDL_RectEquals | ||||
|  *  \sa SDL_HasIntersection | ||||
|  *  \sa SDL_IntersectRect | ||||
|  *  \sa SDL_UnionRect | ||||
|  *  \sa SDL_EnclosePoints | ||||
|  */ | ||||
| typedef struct SDL_Rect | ||||
| { | ||||
|     int x, y; | ||||
|     int w, h; | ||||
| } SDL_Rect; | ||||
|  | ||||
| /** | ||||
|  *  \brief Returns true if point resides inside a rectangle. | ||||
|  */ | ||||
| SDL_FORCE_INLINE SDL_bool SDL_PointInRect(const SDL_Point *p, const SDL_Rect *r) | ||||
| { | ||||
|     return ( (p->x >= r->x) && (p->x < (r->x + r->w)) && | ||||
|              (p->y >= r->y) && (p->y < (r->y + r->h)) ) ? SDL_TRUE : SDL_FALSE; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  *  \brief Returns true if the rectangle has no area. | ||||
|  */ | ||||
| SDL_FORCE_INLINE SDL_bool SDL_RectEmpty(const SDL_Rect *r) | ||||
| { | ||||
|     return ((!r) || (r->w <= 0) || (r->h <= 0)) ? SDL_TRUE : SDL_FALSE; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  *  \brief Returns true if the two rectangles are equal. | ||||
|  */ | ||||
| SDL_FORCE_INLINE SDL_bool SDL_RectEquals(const SDL_Rect *a, const SDL_Rect *b) | ||||
| { | ||||
|     return (a && b && (a->x == b->x) && (a->y == b->y) && | ||||
|             (a->w == b->w) && (a->h == b->h)) ? SDL_TRUE : SDL_FALSE; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  *  \brief Determine whether two rectangles intersect. | ||||
|  * | ||||
|  *  \return SDL_TRUE if there is an intersection, SDL_FALSE otherwise. | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_HasIntersection(const SDL_Rect * A, | ||||
|                                                      const SDL_Rect * B); | ||||
|  | ||||
| /** | ||||
|  *  \brief Calculate the intersection of two rectangles. | ||||
|  * | ||||
|  *  \return SDL_TRUE if there is an intersection, SDL_FALSE otherwise. | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_IntersectRect(const SDL_Rect * A, | ||||
|                                                    const SDL_Rect * B, | ||||
|                                                    SDL_Rect * result); | ||||
|  | ||||
| /** | ||||
|  *  \brief Calculate the union of two rectangles. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_UnionRect(const SDL_Rect * A, | ||||
|                                            const SDL_Rect * B, | ||||
|                                            SDL_Rect * result); | ||||
|  | ||||
| /** | ||||
|  *  \brief Calculate a minimal rectangle enclosing a set of points | ||||
|  * | ||||
|  *  \return SDL_TRUE if any points were within the clipping rect | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_EnclosePoints(const SDL_Point * points, | ||||
|                                                    int count, | ||||
|                                                    const SDL_Rect * clip, | ||||
|                                                    SDL_Rect * result); | ||||
|  | ||||
| /** | ||||
|  *  \brief Calculate the intersection of a rectangle and line segment. | ||||
|  * | ||||
|  *  \return SDL_TRUE if there is an intersection, SDL_FALSE otherwise. | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_IntersectRectAndLine(const SDL_Rect * | ||||
|                                                           rect, int *X1, | ||||
|                                                           int *Y1, int *X2, | ||||
|                                                           int *Y2); | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_rect_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,880 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_render.h | ||||
|  * | ||||
|  *  Header file for SDL 2D rendering functions. | ||||
|  * | ||||
|  *  This API supports the following features: | ||||
|  *      * single pixel points | ||||
|  *      * single pixel lines | ||||
|  *      * filled rectangles | ||||
|  *      * texture images | ||||
|  * | ||||
|  *  The primitives may be drawn in opaque, blended, or additive modes. | ||||
|  * | ||||
|  *  The texture images may be drawn in opaque, blended, or additive modes. | ||||
|  *  They can have an additional color tint or alpha modulation applied to | ||||
|  *  them, and may also be stretched with linear interpolation. | ||||
|  * | ||||
|  *  This API is designed to accelerate simple 2D operations. You may | ||||
|  *  want more functionality such as polygons and particle effects and | ||||
|  *  in that case you should use SDL's OpenGL/Direct3D support or one | ||||
|  *  of the many good 3D engines. | ||||
|  * | ||||
|  *  These functions must be called from the main thread. | ||||
|  *  See this bug for details: http://bugzilla.libsdl.org/show_bug.cgi?id=1995 | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_render_h | ||||
| #define _SDL_render_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
| #include "SDL_rect.h" | ||||
| #include "SDL_video.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  *  \brief Flags used when creating a rendering context | ||||
|  */ | ||||
| typedef enum | ||||
| { | ||||
|     SDL_RENDERER_SOFTWARE = 0x00000001,         /**< The renderer is a software fallback */ | ||||
|     SDL_RENDERER_ACCELERATED = 0x00000002,      /**< The renderer uses hardware | ||||
|                                                      acceleration */ | ||||
|     SDL_RENDERER_PRESENTVSYNC = 0x00000004,     /**< Present is synchronized | ||||
|                                                      with the refresh rate */ | ||||
|     SDL_RENDERER_TARGETTEXTURE = 0x00000008     /**< The renderer supports | ||||
|                                                      rendering to texture */ | ||||
| } SDL_RendererFlags; | ||||
|  | ||||
| /** | ||||
|  *  \brief Information on the capabilities of a render driver or context. | ||||
|  */ | ||||
| typedef struct SDL_RendererInfo | ||||
| { | ||||
|     const char *name;           /**< The name of the renderer */ | ||||
|     Uint32 flags;               /**< Supported ::SDL_RendererFlags */ | ||||
|     Uint32 num_texture_formats; /**< The number of available texture formats */ | ||||
|     Uint32 texture_formats[16]; /**< The available texture formats */ | ||||
|     int max_texture_width;      /**< The maximum texture width */ | ||||
|     int max_texture_height;     /**< The maximum texture height */ | ||||
| } SDL_RendererInfo; | ||||
|  | ||||
| /** | ||||
|  *  \brief The access pattern allowed for a texture. | ||||
|  */ | ||||
| typedef enum | ||||
| { | ||||
|     SDL_TEXTUREACCESS_STATIC,    /**< Changes rarely, not lockable */ | ||||
|     SDL_TEXTUREACCESS_STREAMING, /**< Changes frequently, lockable */ | ||||
|     SDL_TEXTUREACCESS_TARGET     /**< Texture can be used as a render target */ | ||||
| } SDL_TextureAccess; | ||||
|  | ||||
| /** | ||||
|  *  \brief The texture channel modulation used in SDL_RenderCopy(). | ||||
|  */ | ||||
| typedef enum | ||||
| { | ||||
|     SDL_TEXTUREMODULATE_NONE = 0x00000000,     /**< No modulation */ | ||||
|     SDL_TEXTUREMODULATE_COLOR = 0x00000001,    /**< srcC = srcC * color */ | ||||
|     SDL_TEXTUREMODULATE_ALPHA = 0x00000002     /**< srcA = srcA * alpha */ | ||||
| } SDL_TextureModulate; | ||||
|  | ||||
| /** | ||||
|  *  \brief Flip constants for SDL_RenderCopyEx | ||||
|  */ | ||||
| typedef enum | ||||
| { | ||||
|     SDL_FLIP_NONE = 0x00000000,     /**< Do not flip */ | ||||
|     SDL_FLIP_HORIZONTAL = 0x00000001,    /**< flip horizontally */ | ||||
|     SDL_FLIP_VERTICAL = 0x00000002     /**< flip vertically */ | ||||
| } SDL_RendererFlip; | ||||
|  | ||||
| /** | ||||
|  *  \brief A structure representing rendering state | ||||
|  */ | ||||
| struct SDL_Renderer; | ||||
| typedef struct SDL_Renderer SDL_Renderer; | ||||
|  | ||||
| /** | ||||
|  *  \brief An efficient driver-specific representation of pixel data | ||||
|  */ | ||||
| struct SDL_Texture; | ||||
| typedef struct SDL_Texture SDL_Texture; | ||||
|  | ||||
|  | ||||
| /* Function prototypes */ | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the number of 2D rendering drivers available for the current | ||||
|  *         display. | ||||
|  * | ||||
|  *  A render driver is a set of code that handles rendering and texture | ||||
|  *  management on a particular display.  Normally there is only one, but | ||||
|  *  some drivers may have several available with different capabilities. | ||||
|  * | ||||
|  *  \sa SDL_GetRenderDriverInfo() | ||||
|  *  \sa SDL_CreateRenderer() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_GetNumRenderDrivers(void); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get information about a specific 2D rendering driver for the current | ||||
|  *         display. | ||||
|  * | ||||
|  *  \param index The index of the driver to query information about. | ||||
|  *  \param info  A pointer to an SDL_RendererInfo struct to be filled with | ||||
|  *               information on the rendering driver. | ||||
|  * | ||||
|  *  \return 0 on success, -1 if the index was out of range. | ||||
|  * | ||||
|  *  \sa SDL_CreateRenderer() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_GetRenderDriverInfo(int index, | ||||
|                                                     SDL_RendererInfo * info); | ||||
|  | ||||
| /** | ||||
|  *  \brief Create a window and default renderer | ||||
|  * | ||||
|  *  \param width    The width of the window | ||||
|  *  \param height   The height of the window | ||||
|  *  \param window_flags The flags used to create the window | ||||
|  *  \param window   A pointer filled with the window, or NULL on error | ||||
|  *  \param renderer A pointer filled with the renderer, or NULL on error | ||||
|  * | ||||
|  *  \return 0 on success, or -1 on error | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_CreateWindowAndRenderer( | ||||
|                                 int width, int height, Uint32 window_flags, | ||||
|                                 SDL_Window **window, SDL_Renderer **renderer); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \brief Create a 2D rendering context for a window. | ||||
|  * | ||||
|  *  \param window The window where rendering is displayed. | ||||
|  *  \param index    The index of the rendering driver to initialize, or -1 to | ||||
|  *                  initialize the first one supporting the requested flags. | ||||
|  *  \param flags    ::SDL_RendererFlags. | ||||
|  * | ||||
|  *  \return A valid rendering context or NULL if there was an error. | ||||
|  * | ||||
|  *  \sa SDL_CreateSoftwareRenderer() | ||||
|  *  \sa SDL_GetRendererInfo() | ||||
|  *  \sa SDL_DestroyRenderer() | ||||
|  */ | ||||
| extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateRenderer(SDL_Window * window, | ||||
|                                                int index, Uint32 flags); | ||||
|  | ||||
| /** | ||||
|  *  \brief Create a 2D software rendering context for a surface. | ||||
|  * | ||||
|  *  \param surface The surface where rendering is done. | ||||
|  * | ||||
|  *  \return A valid rendering context or NULL if there was an error. | ||||
|  * | ||||
|  *  \sa SDL_CreateRenderer() | ||||
|  *  \sa SDL_DestroyRenderer() | ||||
|  */ | ||||
| extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateSoftwareRenderer(SDL_Surface * surface); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the renderer associated with a window. | ||||
|  */ | ||||
| extern DECLSPEC SDL_Renderer * SDLCALL SDL_GetRenderer(SDL_Window * window); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get information about a rendering context. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_GetRendererInfo(SDL_Renderer * renderer, | ||||
|                                                 SDL_RendererInfo * info); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the output size in pixels of a rendering context. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_GetRendererOutputSize(SDL_Renderer * renderer, | ||||
|                                                       int *w, int *h); | ||||
|  | ||||
| /** | ||||
|  *  \brief Create a texture for a rendering context. | ||||
|  * | ||||
|  *  \param renderer The renderer. | ||||
|  *  \param format The format of the texture. | ||||
|  *  \param access One of the enumerated values in ::SDL_TextureAccess. | ||||
|  *  \param w      The width of the texture in pixels. | ||||
|  *  \param h      The height of the texture in pixels. | ||||
|  * | ||||
|  *  \return The created texture is returned, or NULL if no rendering context was | ||||
|  *          active,  the format was unsupported, or the width or height were out | ||||
|  *          of range. | ||||
|  * | ||||
|  *  \sa SDL_QueryTexture() | ||||
|  *  \sa SDL_UpdateTexture() | ||||
|  *  \sa SDL_DestroyTexture() | ||||
|  */ | ||||
| extern DECLSPEC SDL_Texture * SDLCALL SDL_CreateTexture(SDL_Renderer * renderer, | ||||
|                                                         Uint32 format, | ||||
|                                                         int access, int w, | ||||
|                                                         int h); | ||||
|  | ||||
| /** | ||||
|  *  \brief Create a texture from an existing surface. | ||||
|  * | ||||
|  *  \param renderer The renderer. | ||||
|  *  \param surface The surface containing pixel data used to fill the texture. | ||||
|  * | ||||
|  *  \return The created texture is returned, or NULL on error. | ||||
|  * | ||||
|  *  \note The surface is not modified or freed by this function. | ||||
|  * | ||||
|  *  \sa SDL_QueryTexture() | ||||
|  *  \sa SDL_DestroyTexture() | ||||
|  */ | ||||
| extern DECLSPEC SDL_Texture * SDLCALL SDL_CreateTextureFromSurface(SDL_Renderer * renderer, SDL_Surface * surface); | ||||
|  | ||||
| /** | ||||
|  *  \brief Query the attributes of a texture | ||||
|  * | ||||
|  *  \param texture A texture to be queried. | ||||
|  *  \param format  A pointer filled in with the raw format of the texture.  The | ||||
|  *                 actual format may differ, but pixel transfers will use this | ||||
|  *                 format. | ||||
|  *  \param access  A pointer filled in with the actual access to the texture. | ||||
|  *  \param w       A pointer filled in with the width of the texture in pixels. | ||||
|  *  \param h       A pointer filled in with the height of the texture in pixels. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 if the texture is not valid. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_QueryTexture(SDL_Texture * texture, | ||||
|                                              Uint32 * format, int *access, | ||||
|                                              int *w, int *h); | ||||
|  | ||||
| /** | ||||
|  *  \brief Set an additional color value used in render copy operations. | ||||
|  * | ||||
|  *  \param texture The texture to update. | ||||
|  *  \param r       The red color value multiplied into copy operations. | ||||
|  *  \param g       The green color value multiplied into copy operations. | ||||
|  *  \param b       The blue color value multiplied into copy operations. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 if the texture is not valid or color modulation | ||||
|  *          is not supported. | ||||
|  * | ||||
|  *  \sa SDL_GetTextureColorMod() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_SetTextureColorMod(SDL_Texture * texture, | ||||
|                                                    Uint8 r, Uint8 g, Uint8 b); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the additional color value used in render copy operations. | ||||
|  * | ||||
|  *  \param texture The texture to query. | ||||
|  *  \param r         A pointer filled in with the current red color value. | ||||
|  *  \param g         A pointer filled in with the current green color value. | ||||
|  *  \param b         A pointer filled in with the current blue color value. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 if the texture is not valid. | ||||
|  * | ||||
|  *  \sa SDL_SetTextureColorMod() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_GetTextureColorMod(SDL_Texture * texture, | ||||
|                                                    Uint8 * r, Uint8 * g, | ||||
|                                                    Uint8 * b); | ||||
|  | ||||
| /** | ||||
|  *  \brief Set an additional alpha value used in render copy operations. | ||||
|  * | ||||
|  *  \param texture The texture to update. | ||||
|  *  \param alpha     The alpha value multiplied into copy operations. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 if the texture is not valid or alpha modulation | ||||
|  *          is not supported. | ||||
|  * | ||||
|  *  \sa SDL_GetTextureAlphaMod() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_SetTextureAlphaMod(SDL_Texture * texture, | ||||
|                                                    Uint8 alpha); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the additional alpha value used in render copy operations. | ||||
|  * | ||||
|  *  \param texture The texture to query. | ||||
|  *  \param alpha     A pointer filled in with the current alpha value. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 if the texture is not valid. | ||||
|  * | ||||
|  *  \sa SDL_SetTextureAlphaMod() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_GetTextureAlphaMod(SDL_Texture * texture, | ||||
|                                                    Uint8 * alpha); | ||||
|  | ||||
| /** | ||||
|  *  \brief Set the blend mode used for texture copy operations. | ||||
|  * | ||||
|  *  \param texture The texture to update. | ||||
|  *  \param blendMode ::SDL_BlendMode to use for texture blending. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 if the texture is not valid or the blend mode is | ||||
|  *          not supported. | ||||
|  * | ||||
|  *  \note If the blend mode is not supported, the closest supported mode is | ||||
|  *        chosen. | ||||
|  * | ||||
|  *  \sa SDL_GetTextureBlendMode() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_SetTextureBlendMode(SDL_Texture * texture, | ||||
|                                                     SDL_BlendMode blendMode); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the blend mode used for texture copy operations. | ||||
|  * | ||||
|  *  \param texture   The texture to query. | ||||
|  *  \param blendMode A pointer filled in with the current blend mode. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 if the texture is not valid. | ||||
|  * | ||||
|  *  \sa SDL_SetTextureBlendMode() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_GetTextureBlendMode(SDL_Texture * texture, | ||||
|                                                     SDL_BlendMode *blendMode); | ||||
|  | ||||
| /** | ||||
|  *  \brief Update the given texture rectangle with new pixel data. | ||||
|  * | ||||
|  *  \param texture   The texture to update | ||||
|  *  \param rect      A pointer to the rectangle of pixels to update, or NULL to | ||||
|  *                   update the entire texture. | ||||
|  *  \param pixels    The raw pixel data. | ||||
|  *  \param pitch     The number of bytes in a row of pixel data, including padding between lines. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 if the texture is not valid. | ||||
|  * | ||||
|  *  \note This is a fairly slow function. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_UpdateTexture(SDL_Texture * texture, | ||||
|                                               const SDL_Rect * rect, | ||||
|                                               const void *pixels, int pitch); | ||||
|  | ||||
| /** | ||||
|  *  \brief Update a rectangle within a planar YV12 or IYUV texture with new pixel data. | ||||
|  * | ||||
|  *  \param texture   The texture to update | ||||
|  *  \param rect      A pointer to the rectangle of pixels to update, or NULL to | ||||
|  *                   update the entire texture. | ||||
|  *  \param Yplane    The raw pixel data for the Y plane. | ||||
|  *  \param Ypitch    The number of bytes between rows of pixel data for the Y plane. | ||||
|  *  \param Uplane    The raw pixel data for the U plane. | ||||
|  *  \param Upitch    The number of bytes between rows of pixel data for the U plane. | ||||
|  *  \param Vplane    The raw pixel data for the V plane. | ||||
|  *  \param Vpitch    The number of bytes between rows of pixel data for the V plane. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 if the texture is not valid. | ||||
|  * | ||||
|  *  \note You can use SDL_UpdateTexture() as long as your pixel data is | ||||
|  *        a contiguous block of Y and U/V planes in the proper order, but | ||||
|  *        this function is available if your pixel data is not contiguous. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_UpdateYUVTexture(SDL_Texture * texture, | ||||
|                                                  const SDL_Rect * rect, | ||||
|                                                  const Uint8 *Yplane, int Ypitch, | ||||
|                                                  const Uint8 *Uplane, int Upitch, | ||||
|                                                  const Uint8 *Vplane, int Vpitch); | ||||
|  | ||||
| /** | ||||
|  *  \brief Lock a portion of the texture for write-only pixel access. | ||||
|  * | ||||
|  *  \param texture   The texture to lock for access, which was created with | ||||
|  *                   ::SDL_TEXTUREACCESS_STREAMING. | ||||
|  *  \param rect      A pointer to the rectangle to lock for access. If the rect | ||||
|  *                   is NULL, the entire texture will be locked. | ||||
|  *  \param pixels    This is filled in with a pointer to the locked pixels, | ||||
|  *                   appropriately offset by the locked area. | ||||
|  *  \param pitch     This is filled in with the pitch of the locked pixels. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 if the texture is not valid or was not created with ::SDL_TEXTUREACCESS_STREAMING. | ||||
|  * | ||||
|  *  \sa SDL_UnlockTexture() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_LockTexture(SDL_Texture * texture, | ||||
|                                             const SDL_Rect * rect, | ||||
|                                             void **pixels, int *pitch); | ||||
|  | ||||
| /** | ||||
|  *  \brief Unlock a texture, uploading the changes to video memory, if needed. | ||||
|  * | ||||
|  *  \sa SDL_LockTexture() | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_UnlockTexture(SDL_Texture * texture); | ||||
|  | ||||
| /** | ||||
|  * \brief Determines whether a window supports the use of render targets | ||||
|  * | ||||
|  * \param renderer The renderer that will be checked | ||||
|  * | ||||
|  * \return SDL_TRUE if supported, SDL_FALSE if not. | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_RenderTargetSupported(SDL_Renderer *renderer); | ||||
|  | ||||
| /** | ||||
|  * \brief Set a texture as the current rendering target. | ||||
|  * | ||||
|  * \param renderer The renderer. | ||||
|  * \param texture The targeted texture, which must be created with the SDL_TEXTUREACCESS_TARGET flag, or NULL for the default render target | ||||
|  * | ||||
|  * \return 0 on success, or -1 on error | ||||
|  * | ||||
|  *  \sa SDL_GetRenderTarget() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_SetRenderTarget(SDL_Renderer *renderer, | ||||
|                                                 SDL_Texture *texture); | ||||
|  | ||||
| /** | ||||
|  * \brief Get the current render target or NULL for the default render target. | ||||
|  * | ||||
|  * \return The current render target | ||||
|  * | ||||
|  *  \sa SDL_SetRenderTarget() | ||||
|  */ | ||||
| extern DECLSPEC SDL_Texture * SDLCALL SDL_GetRenderTarget(SDL_Renderer *renderer); | ||||
|  | ||||
| /** | ||||
|  *  \brief Set device independent resolution for rendering | ||||
|  * | ||||
|  *  \param renderer The renderer for which resolution should be set. | ||||
|  *  \param w      The width of the logical resolution | ||||
|  *  \param h      The height of the logical resolution | ||||
|  * | ||||
|  *  This function uses the viewport and scaling functionality to allow a fixed logical | ||||
|  *  resolution for rendering, regardless of the actual output resolution.  If the actual | ||||
|  *  output resolution doesn't have the same aspect ratio the output rendering will be | ||||
|  *  centered within the output display. | ||||
|  * | ||||
|  *  If the output display is a window, mouse events in the window will be filtered | ||||
|  *  and scaled so they seem to arrive within the logical resolution. | ||||
|  * | ||||
|  *  \note If this function results in scaling or subpixel drawing by the | ||||
|  *        rendering backend, it will be handled using the appropriate | ||||
|  *        quality hints. | ||||
|  * | ||||
|  *  \sa SDL_RenderGetLogicalSize() | ||||
|  *  \sa SDL_RenderSetScale() | ||||
|  *  \sa SDL_RenderSetViewport() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_RenderSetLogicalSize(SDL_Renderer * renderer, int w, int h); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get device independent resolution for rendering | ||||
|  * | ||||
|  *  \param renderer The renderer from which resolution should be queried. | ||||
|  *  \param w      A pointer filled with the width of the logical resolution | ||||
|  *  \param h      A pointer filled with the height of the logical resolution | ||||
|  * | ||||
|  *  \sa SDL_RenderSetLogicalSize() | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_RenderGetLogicalSize(SDL_Renderer * renderer, int *w, int *h); | ||||
|  | ||||
| /** | ||||
|  *  \brief Set the drawing area for rendering on the current target. | ||||
|  * | ||||
|  *  \param renderer The renderer for which the drawing area should be set. | ||||
|  *  \param rect The rectangle representing the drawing area, or NULL to set the viewport to the entire target. | ||||
|  * | ||||
|  *  The x,y of the viewport rect represents the origin for rendering. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 on error | ||||
|  * | ||||
|  *  \note If the window associated with the renderer is resized, the viewport is automatically reset. | ||||
|  * | ||||
|  *  \sa SDL_RenderGetViewport() | ||||
|  *  \sa SDL_RenderSetLogicalSize() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_RenderSetViewport(SDL_Renderer * renderer, | ||||
|                                                   const SDL_Rect * rect); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the drawing area for the current target. | ||||
|  * | ||||
|  *  \sa SDL_RenderSetViewport() | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_RenderGetViewport(SDL_Renderer * renderer, | ||||
|                                                    SDL_Rect * rect); | ||||
|  | ||||
| /** | ||||
|  *  \brief Set the clip rectangle for the current target. | ||||
|  * | ||||
|  *  \param renderer The renderer for which clip rectangle should be set. | ||||
|  *  \param rect   A pointer to the rectangle to set as the clip rectangle, or | ||||
|  *                NULL to disable clipping. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 on error | ||||
|  * | ||||
|  *  \sa SDL_RenderGetClipRect() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_RenderSetClipRect(SDL_Renderer * renderer, | ||||
|                                                   const SDL_Rect * rect); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the clip rectangle for the current target. | ||||
|  * | ||||
|  *  \param renderer The renderer from which clip rectangle should be queried. | ||||
|  *  \param rect   A pointer filled in with the current clip rectangle, or | ||||
|  *                an empty rectangle if clipping is disabled. | ||||
|  * | ||||
|  *  \sa SDL_RenderSetClipRect() | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_RenderGetClipRect(SDL_Renderer * renderer, | ||||
|                                                    SDL_Rect * rect); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get whether clipping is enabled on the given renderer. | ||||
|  * | ||||
|  *  \param renderer The renderer from which clip state should be queried. | ||||
|  * | ||||
|  *  \sa SDL_RenderGetClipRect() | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_RenderIsClipEnabled(SDL_Renderer * renderer); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \brief Set the drawing scale for rendering on the current target. | ||||
|  * | ||||
|  *  \param renderer The renderer for which the drawing scale should be set. | ||||
|  *  \param scaleX The horizontal scaling factor | ||||
|  *  \param scaleY The vertical scaling factor | ||||
|  * | ||||
|  *  The drawing coordinates are scaled by the x/y scaling factors | ||||
|  *  before they are used by the renderer.  This allows resolution | ||||
|  *  independent drawing with a single coordinate system. | ||||
|  * | ||||
|  *  \note If this results in scaling or subpixel drawing by the | ||||
|  *        rendering backend, it will be handled using the appropriate | ||||
|  *        quality hints.  For best results use integer scaling factors. | ||||
|  * | ||||
|  *  \sa SDL_RenderGetScale() | ||||
|  *  \sa SDL_RenderSetLogicalSize() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_RenderSetScale(SDL_Renderer * renderer, | ||||
|                                                float scaleX, float scaleY); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the drawing scale for the current target. | ||||
|  * | ||||
|  *  \param renderer The renderer from which drawing scale should be queried. | ||||
|  *  \param scaleX A pointer filled in with the horizontal scaling factor | ||||
|  *  \param scaleY A pointer filled in with the vertical scaling factor | ||||
|  * | ||||
|  *  \sa SDL_RenderSetScale() | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_RenderGetScale(SDL_Renderer * renderer, | ||||
|                                                float *scaleX, float *scaleY); | ||||
|  | ||||
| /** | ||||
|  *  \brief Set the color used for drawing operations (Rect, Line and Clear). | ||||
|  * | ||||
|  *  \param renderer The renderer for which drawing color should be set. | ||||
|  *  \param r The red value used to draw on the rendering target. | ||||
|  *  \param g The green value used to draw on the rendering target. | ||||
|  *  \param b The blue value used to draw on the rendering target. | ||||
|  *  \param a The alpha value used to draw on the rendering target, usually | ||||
|  *           ::SDL_ALPHA_OPAQUE (255). | ||||
|  * | ||||
|  *  \return 0 on success, or -1 on error | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_SetRenderDrawColor(SDL_Renderer * renderer, | ||||
|                                            Uint8 r, Uint8 g, Uint8 b, | ||||
|                                            Uint8 a); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the color used for drawing operations (Rect, Line and Clear). | ||||
|  * | ||||
|  *  \param renderer The renderer from which drawing color should be queried. | ||||
|  *  \param r A pointer to the red value used to draw on the rendering target. | ||||
|  *  \param g A pointer to the green value used to draw on the rendering target. | ||||
|  *  \param b A pointer to the blue value used to draw on the rendering target. | ||||
|  *  \param a A pointer to the alpha value used to draw on the rendering target, | ||||
|  *           usually ::SDL_ALPHA_OPAQUE (255). | ||||
|  * | ||||
|  *  \return 0 on success, or -1 on error | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_GetRenderDrawColor(SDL_Renderer * renderer, | ||||
|                                            Uint8 * r, Uint8 * g, Uint8 * b, | ||||
|                                            Uint8 * a); | ||||
|  | ||||
| /** | ||||
|  *  \brief Set the blend mode used for drawing operations (Fill and Line). | ||||
|  * | ||||
|  *  \param renderer The renderer for which blend mode should be set. | ||||
|  *  \param blendMode ::SDL_BlendMode to use for blending. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 on error | ||||
|  * | ||||
|  *  \note If the blend mode is not supported, the closest supported mode is | ||||
|  *        chosen. | ||||
|  * | ||||
|  *  \sa SDL_GetRenderDrawBlendMode() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_SetRenderDrawBlendMode(SDL_Renderer * renderer, | ||||
|                                                        SDL_BlendMode blendMode); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the blend mode used for drawing operations. | ||||
|  * | ||||
|  *  \param renderer The renderer from which blend mode should be queried. | ||||
|  *  \param blendMode A pointer filled in with the current blend mode. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 on error | ||||
|  * | ||||
|  *  \sa SDL_SetRenderDrawBlendMode() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_GetRenderDrawBlendMode(SDL_Renderer * renderer, | ||||
|                                                        SDL_BlendMode *blendMode); | ||||
|  | ||||
| /** | ||||
|  *  \brief Clear the current rendering target with the drawing color | ||||
|  * | ||||
|  *  This function clears the entire rendering target, ignoring the viewport. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 on error | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_RenderClear(SDL_Renderer * renderer); | ||||
|  | ||||
| /** | ||||
|  *  \brief Draw a point on the current rendering target. | ||||
|  * | ||||
|  *  \param renderer The renderer which should draw a point. | ||||
|  *  \param x The x coordinate of the point. | ||||
|  *  \param y The y coordinate of the point. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 on error | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_RenderDrawPoint(SDL_Renderer * renderer, | ||||
|                                                 int x, int y); | ||||
|  | ||||
| /** | ||||
|  *  \brief Draw multiple points on the current rendering target. | ||||
|  * | ||||
|  *  \param renderer The renderer which should draw multiple points. | ||||
|  *  \param points The points to draw | ||||
|  *  \param count The number of points to draw | ||||
|  * | ||||
|  *  \return 0 on success, or -1 on error | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_RenderDrawPoints(SDL_Renderer * renderer, | ||||
|                                                  const SDL_Point * points, | ||||
|                                                  int count); | ||||
|  | ||||
| /** | ||||
|  *  \brief Draw a line on the current rendering target. | ||||
|  * | ||||
|  *  \param renderer The renderer which should draw a line. | ||||
|  *  \param x1 The x coordinate of the start point. | ||||
|  *  \param y1 The y coordinate of the start point. | ||||
|  *  \param x2 The x coordinate of the end point. | ||||
|  *  \param y2 The y coordinate of the end point. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 on error | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_RenderDrawLine(SDL_Renderer * renderer, | ||||
|                                                int x1, int y1, int x2, int y2); | ||||
|  | ||||
| /** | ||||
|  *  \brief Draw a series of connected lines on the current rendering target. | ||||
|  * | ||||
|  *  \param renderer The renderer which should draw multiple lines. | ||||
|  *  \param points The points along the lines | ||||
|  *  \param count The number of points, drawing count-1 lines | ||||
|  * | ||||
|  *  \return 0 on success, or -1 on error | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_RenderDrawLines(SDL_Renderer * renderer, | ||||
|                                                 const SDL_Point * points, | ||||
|                                                 int count); | ||||
|  | ||||
| /** | ||||
|  *  \brief Draw a rectangle on the current rendering target. | ||||
|  * | ||||
|  *  \param renderer The renderer which should draw a rectangle. | ||||
|  *  \param rect A pointer to the destination rectangle, or NULL to outline the entire rendering target. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 on error | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_RenderDrawRect(SDL_Renderer * renderer, | ||||
|                                                const SDL_Rect * rect); | ||||
|  | ||||
| /** | ||||
|  *  \brief Draw some number of rectangles on the current rendering target. | ||||
|  * | ||||
|  *  \param renderer The renderer which should draw multiple rectangles. | ||||
|  *  \param rects A pointer to an array of destination rectangles. | ||||
|  *  \param count The number of rectangles. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 on error | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_RenderDrawRects(SDL_Renderer * renderer, | ||||
|                                                 const SDL_Rect * rects, | ||||
|                                                 int count); | ||||
|  | ||||
| /** | ||||
|  *  \brief Fill a rectangle on the current rendering target with the drawing color. | ||||
|  * | ||||
|  *  \param renderer The renderer which should fill a rectangle. | ||||
|  *  \param rect A pointer to the destination rectangle, or NULL for the entire | ||||
|  *              rendering target. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 on error | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_RenderFillRect(SDL_Renderer * renderer, | ||||
|                                                const SDL_Rect * rect); | ||||
|  | ||||
| /** | ||||
|  *  \brief Fill some number of rectangles on the current rendering target with the drawing color. | ||||
|  * | ||||
|  *  \param renderer The renderer which should fill multiple rectangles. | ||||
|  *  \param rects A pointer to an array of destination rectangles. | ||||
|  *  \param count The number of rectangles. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 on error | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_RenderFillRects(SDL_Renderer * renderer, | ||||
|                                                 const SDL_Rect * rects, | ||||
|                                                 int count); | ||||
|  | ||||
| /** | ||||
|  *  \brief Copy a portion of the texture to the current rendering target. | ||||
|  * | ||||
|  *  \param renderer The renderer which should copy parts of a texture. | ||||
|  *  \param texture The source texture. | ||||
|  *  \param srcrect   A pointer to the source rectangle, or NULL for the entire | ||||
|  *                   texture. | ||||
|  *  \param dstrect   A pointer to the destination rectangle, or NULL for the | ||||
|  *                   entire rendering target. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 on error | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_RenderCopy(SDL_Renderer * renderer, | ||||
|                                            SDL_Texture * texture, | ||||
|                                            const SDL_Rect * srcrect, | ||||
|                                            const SDL_Rect * dstrect); | ||||
|  | ||||
| /** | ||||
|  *  \brief Copy a portion of the source texture to the current rendering target, rotating it by angle around the given center | ||||
|  * | ||||
|  *  \param renderer The renderer which should copy parts of a texture. | ||||
|  *  \param texture The source texture. | ||||
|  *  \param srcrect   A pointer to the source rectangle, or NULL for the entire | ||||
|  *                   texture. | ||||
|  *  \param dstrect   A pointer to the destination rectangle, or NULL for the | ||||
|  *                   entire rendering target. | ||||
|  *  \param angle    An angle in degrees that indicates the rotation that will be applied to dstrect | ||||
|  *  \param center   A pointer to a point indicating the point around which dstrect will be rotated (if NULL, rotation will be done around dstrect.w/2, dstrect.h/2). | ||||
|  *  \param flip     An SDL_RendererFlip value stating which flipping actions should be performed on the texture | ||||
|  * | ||||
|  *  \return 0 on success, or -1 on error | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_RenderCopyEx(SDL_Renderer * renderer, | ||||
|                                            SDL_Texture * texture, | ||||
|                                            const SDL_Rect * srcrect, | ||||
|                                            const SDL_Rect * dstrect, | ||||
|                                            const double angle, | ||||
|                                            const SDL_Point *center, | ||||
|                                            const SDL_RendererFlip flip); | ||||
|  | ||||
| /** | ||||
|  *  \brief Read pixels from the current rendering target. | ||||
|  * | ||||
|  *  \param renderer The renderer from which pixels should be read. | ||||
|  *  \param rect   A pointer to the rectangle to read, or NULL for the entire | ||||
|  *                render target. | ||||
|  *  \param format The desired format of the pixel data, or 0 to use the format | ||||
|  *                of the rendering target | ||||
|  *  \param pixels A pointer to be filled in with the pixel data | ||||
|  *  \param pitch  The pitch of the pixels parameter. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 if pixel reading is not supported. | ||||
|  * | ||||
|  *  \warning This is a very slow operation, and should not be used frequently. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_RenderReadPixels(SDL_Renderer * renderer, | ||||
|                                                  const SDL_Rect * rect, | ||||
|                                                  Uint32 format, | ||||
|                                                  void *pixels, int pitch); | ||||
|  | ||||
| /** | ||||
|  *  \brief Update the screen with rendering performed. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_RenderPresent(SDL_Renderer * renderer); | ||||
|  | ||||
| /** | ||||
|  *  \brief Destroy the specified texture. | ||||
|  * | ||||
|  *  \sa SDL_CreateTexture() | ||||
|  *  \sa SDL_CreateTextureFromSurface() | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_DestroyTexture(SDL_Texture * texture); | ||||
|  | ||||
| /** | ||||
|  *  \brief Destroy the rendering context for a window and free associated | ||||
|  *         textures. | ||||
|  * | ||||
|  *  \sa SDL_CreateRenderer() | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_DestroyRenderer(SDL_Renderer * renderer); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \brief Bind the texture to the current OpenGL/ES/ES2 context for use with | ||||
|  *         OpenGL instructions. | ||||
|  * | ||||
|  *  \param texture  The SDL texture to bind | ||||
|  *  \param texw     A pointer to a float that will be filled with the texture width | ||||
|  *  \param texh     A pointer to a float that will be filled with the texture height | ||||
|  * | ||||
|  *  \return 0 on success, or -1 if the operation is not supported | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_GL_BindTexture(SDL_Texture *texture, float *texw, float *texh); | ||||
|  | ||||
| /** | ||||
|  *  \brief Unbind a texture from the current OpenGL/ES/ES2 context. | ||||
|  * | ||||
|  *  \param texture  The SDL texture to unbind | ||||
|  * | ||||
|  *  \return 0 on success, or -1 if the operation is not supported | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_GL_UnbindTexture(SDL_Texture *texture); | ||||
|  | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_render_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,2 @@ | ||||
| #define SDL_REVISION "hg-10001:e12c38730512" | ||||
| #define SDL_REVISION_NUMBER 10001 | ||||
| @@ -0,0 +1,231 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_rwops.h | ||||
|  * | ||||
|  *  This file provides a general interface for SDL to read and write | ||||
|  *  data streams.  It can easily be extended to files, memory, etc. | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_rwops_h | ||||
| #define _SDL_rwops_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
| #include "SDL_error.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /* RWops Types */ | ||||
| #define SDL_RWOPS_UNKNOWN   0   /* Unknown stream type */ | ||||
| #define SDL_RWOPS_WINFILE   1   /* Win32 file */ | ||||
| #define SDL_RWOPS_STDFILE   2   /* Stdio file */ | ||||
| #define SDL_RWOPS_JNIFILE   3   /* Android asset */ | ||||
| #define SDL_RWOPS_MEMORY    4   /* Memory stream */ | ||||
| #define SDL_RWOPS_MEMORY_RO 5   /* Read-Only memory stream */ | ||||
|  | ||||
| /** | ||||
|  * This is the read/write operation structure -- very basic. | ||||
|  */ | ||||
| typedef struct SDL_RWops | ||||
| { | ||||
|     /** | ||||
|      *  Return the size of the file in this rwops, or -1 if unknown | ||||
|      */ | ||||
|     Sint64 (SDLCALL * size) (struct SDL_RWops * context); | ||||
|  | ||||
|     /** | ||||
|      *  Seek to \c offset relative to \c whence, one of stdio's whence values: | ||||
|      *  RW_SEEK_SET, RW_SEEK_CUR, RW_SEEK_END | ||||
|      * | ||||
|      *  \return the final offset in the data stream, or -1 on error. | ||||
|      */ | ||||
|     Sint64 (SDLCALL * seek) (struct SDL_RWops * context, Sint64 offset, | ||||
|                              int whence); | ||||
|  | ||||
|     /** | ||||
|      *  Read up to \c maxnum objects each of size \c size from the data | ||||
|      *  stream to the area pointed at by \c ptr. | ||||
|      * | ||||
|      *  \return the number of objects read, or 0 at error or end of file. | ||||
|      */ | ||||
|     size_t (SDLCALL * read) (struct SDL_RWops * context, void *ptr, | ||||
|                              size_t size, size_t maxnum); | ||||
|  | ||||
|     /** | ||||
|      *  Write exactly \c num objects each of size \c size from the area | ||||
|      *  pointed at by \c ptr to data stream. | ||||
|      * | ||||
|      *  \return the number of objects written, or 0 at error or end of file. | ||||
|      */ | ||||
|     size_t (SDLCALL * write) (struct SDL_RWops * context, const void *ptr, | ||||
|                               size_t size, size_t num); | ||||
|  | ||||
|     /** | ||||
|      *  Close and free an allocated SDL_RWops structure. | ||||
|      * | ||||
|      *  \return 0 if successful or -1 on write error when flushing data. | ||||
|      */ | ||||
|     int (SDLCALL * close) (struct SDL_RWops * context); | ||||
|  | ||||
|     Uint32 type; | ||||
|     union | ||||
|     { | ||||
| #if defined(__ANDROID__) | ||||
|         struct | ||||
|         { | ||||
|             void *fileNameRef; | ||||
|             void *inputStreamRef; | ||||
|             void *readableByteChannelRef; | ||||
|             void *readMethod; | ||||
|             void *assetFileDescriptorRef; | ||||
|             long position; | ||||
|             long size; | ||||
|             long offset; | ||||
|             int fd; | ||||
|         } androidio; | ||||
| #elif defined(__WIN32__) | ||||
|         struct | ||||
|         { | ||||
|             SDL_bool append; | ||||
|             void *h; | ||||
|             struct | ||||
|             { | ||||
|                 void *data; | ||||
|                 size_t size; | ||||
|                 size_t left; | ||||
|             } buffer; | ||||
|         } windowsio; | ||||
| #endif | ||||
|  | ||||
| #ifdef HAVE_STDIO_H | ||||
|         struct | ||||
|         { | ||||
|             SDL_bool autoclose; | ||||
|             FILE *fp; | ||||
|         } stdio; | ||||
| #endif | ||||
|         struct | ||||
|         { | ||||
|             Uint8 *base; | ||||
|             Uint8 *here; | ||||
|             Uint8 *stop; | ||||
|         } mem; | ||||
|         struct | ||||
|         { | ||||
|             void *data1; | ||||
|             void *data2; | ||||
|         } unknown; | ||||
|     } hidden; | ||||
|  | ||||
| } SDL_RWops; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \name RWFrom functions | ||||
|  * | ||||
|  *  Functions to create SDL_RWops structures from various data streams. | ||||
|  */ | ||||
| /* @{ */ | ||||
|  | ||||
| extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFile(const char *file, | ||||
|                                                   const char *mode); | ||||
|  | ||||
| #ifdef HAVE_STDIO_H | ||||
| extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFP(FILE * fp, | ||||
|                                                 SDL_bool autoclose); | ||||
| #else | ||||
| extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFP(void * fp, | ||||
|                                                 SDL_bool autoclose); | ||||
| #endif | ||||
|  | ||||
| extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromMem(void *mem, int size); | ||||
| extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromConstMem(const void *mem, | ||||
|                                                       int size); | ||||
|  | ||||
| /* @} *//* RWFrom functions */ | ||||
|  | ||||
|  | ||||
| extern DECLSPEC SDL_RWops *SDLCALL SDL_AllocRW(void); | ||||
| extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops * area); | ||||
|  | ||||
| #define RW_SEEK_SET 0       /**< Seek from the beginning of data */ | ||||
| #define RW_SEEK_CUR 1       /**< Seek relative to current read point */ | ||||
| #define RW_SEEK_END 2       /**< Seek relative to the end of data */ | ||||
|  | ||||
| /** | ||||
|  *  \name Read/write macros | ||||
|  * | ||||
|  *  Macros to easily read and write from an SDL_RWops structure. | ||||
|  */ | ||||
| /* @{ */ | ||||
| #define SDL_RWsize(ctx)         (ctx)->size(ctx) | ||||
| #define SDL_RWseek(ctx, offset, whence) (ctx)->seek(ctx, offset, whence) | ||||
| #define SDL_RWtell(ctx)         (ctx)->seek(ctx, 0, RW_SEEK_CUR) | ||||
| #define SDL_RWread(ctx, ptr, size, n)   (ctx)->read(ctx, ptr, size, n) | ||||
| #define SDL_RWwrite(ctx, ptr, size, n)  (ctx)->write(ctx, ptr, size, n) | ||||
| #define SDL_RWclose(ctx)        (ctx)->close(ctx) | ||||
| /* @} *//* Read/write macros */ | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \name Read endian functions | ||||
|  * | ||||
|  *  Read an item of the specified endianness and return in native format. | ||||
|  */ | ||||
| /* @{ */ | ||||
| extern DECLSPEC Uint8 SDLCALL SDL_ReadU8(SDL_RWops * src); | ||||
| extern DECLSPEC Uint16 SDLCALL SDL_ReadLE16(SDL_RWops * src); | ||||
| extern DECLSPEC Uint16 SDLCALL SDL_ReadBE16(SDL_RWops * src); | ||||
| extern DECLSPEC Uint32 SDLCALL SDL_ReadLE32(SDL_RWops * src); | ||||
| extern DECLSPEC Uint32 SDLCALL SDL_ReadBE32(SDL_RWops * src); | ||||
| extern DECLSPEC Uint64 SDLCALL SDL_ReadLE64(SDL_RWops * src); | ||||
| extern DECLSPEC Uint64 SDLCALL SDL_ReadBE64(SDL_RWops * src); | ||||
| /* @} *//* Read endian functions */ | ||||
|  | ||||
| /** | ||||
|  *  \name Write endian functions | ||||
|  * | ||||
|  *  Write an item of native format to the specified endianness. | ||||
|  */ | ||||
| /* @{ */ | ||||
| extern DECLSPEC size_t SDLCALL SDL_WriteU8(SDL_RWops * dst, Uint8 value); | ||||
| extern DECLSPEC size_t SDLCALL SDL_WriteLE16(SDL_RWops * dst, Uint16 value); | ||||
| extern DECLSPEC size_t SDLCALL SDL_WriteBE16(SDL_RWops * dst, Uint16 value); | ||||
| extern DECLSPEC size_t SDLCALL SDL_WriteLE32(SDL_RWops * dst, Uint32 value); | ||||
| extern DECLSPEC size_t SDLCALL SDL_WriteBE32(SDL_RWops * dst, Uint32 value); | ||||
| extern DECLSPEC size_t SDLCALL SDL_WriteLE64(SDL_RWops * dst, Uint64 value); | ||||
| extern DECLSPEC size_t SDLCALL SDL_WriteBE64(SDL_RWops * dst, Uint64 value); | ||||
| /* @} *//* Write endian functions */ | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_rwops_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,401 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_scancode.h | ||||
|  * | ||||
|  *  Defines keyboard scancodes. | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_scancode_h | ||||
| #define _SDL_scancode_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
|  | ||||
| /** | ||||
|  *  \brief The SDL keyboard scancode representation. | ||||
|  * | ||||
|  *  Values of this type are used to represent keyboard keys, among other places | ||||
|  *  in the \link SDL_Keysym::scancode key.keysym.scancode \endlink field of the | ||||
|  *  SDL_Event structure. | ||||
|  * | ||||
|  *  The values in this enumeration are based on the USB usage page standard: | ||||
|  *  http://www.usb.org/developers/devclass_docs/Hut1_12v2.pdf | ||||
|  */ | ||||
| typedef enum | ||||
| { | ||||
|     SDL_SCANCODE_UNKNOWN = 0, | ||||
|  | ||||
|     /** | ||||
|      *  \name Usage page 0x07 | ||||
|      * | ||||
|      *  These values are from usage page 0x07 (USB keyboard page). | ||||
|      */ | ||||
|     /* @{ */ | ||||
|  | ||||
|     SDL_SCANCODE_A = 4, | ||||
|     SDL_SCANCODE_B = 5, | ||||
|     SDL_SCANCODE_C = 6, | ||||
|     SDL_SCANCODE_D = 7, | ||||
|     SDL_SCANCODE_E = 8, | ||||
|     SDL_SCANCODE_F = 9, | ||||
|     SDL_SCANCODE_G = 10, | ||||
|     SDL_SCANCODE_H = 11, | ||||
|     SDL_SCANCODE_I = 12, | ||||
|     SDL_SCANCODE_J = 13, | ||||
|     SDL_SCANCODE_K = 14, | ||||
|     SDL_SCANCODE_L = 15, | ||||
|     SDL_SCANCODE_M = 16, | ||||
|     SDL_SCANCODE_N = 17, | ||||
|     SDL_SCANCODE_O = 18, | ||||
|     SDL_SCANCODE_P = 19, | ||||
|     SDL_SCANCODE_Q = 20, | ||||
|     SDL_SCANCODE_R = 21, | ||||
|     SDL_SCANCODE_S = 22, | ||||
|     SDL_SCANCODE_T = 23, | ||||
|     SDL_SCANCODE_U = 24, | ||||
|     SDL_SCANCODE_V = 25, | ||||
|     SDL_SCANCODE_W = 26, | ||||
|     SDL_SCANCODE_X = 27, | ||||
|     SDL_SCANCODE_Y = 28, | ||||
|     SDL_SCANCODE_Z = 29, | ||||
|  | ||||
|     SDL_SCANCODE_1 = 30, | ||||
|     SDL_SCANCODE_2 = 31, | ||||
|     SDL_SCANCODE_3 = 32, | ||||
|     SDL_SCANCODE_4 = 33, | ||||
|     SDL_SCANCODE_5 = 34, | ||||
|     SDL_SCANCODE_6 = 35, | ||||
|     SDL_SCANCODE_7 = 36, | ||||
|     SDL_SCANCODE_8 = 37, | ||||
|     SDL_SCANCODE_9 = 38, | ||||
|     SDL_SCANCODE_0 = 39, | ||||
|  | ||||
|     SDL_SCANCODE_RETURN = 40, | ||||
|     SDL_SCANCODE_ESCAPE = 41, | ||||
|     SDL_SCANCODE_BACKSPACE = 42, | ||||
|     SDL_SCANCODE_TAB = 43, | ||||
|     SDL_SCANCODE_SPACE = 44, | ||||
|  | ||||
|     SDL_SCANCODE_MINUS = 45, | ||||
|     SDL_SCANCODE_EQUALS = 46, | ||||
|     SDL_SCANCODE_LEFTBRACKET = 47, | ||||
|     SDL_SCANCODE_RIGHTBRACKET = 48, | ||||
|     SDL_SCANCODE_BACKSLASH = 49, /**< Located at the lower left of the return | ||||
|                                   *   key on ISO keyboards and at the right end | ||||
|                                   *   of the QWERTY row on ANSI keyboards. | ||||
|                                   *   Produces REVERSE SOLIDUS (backslash) and | ||||
|                                   *   VERTICAL LINE in a US layout, REVERSE | ||||
|                                   *   SOLIDUS and VERTICAL LINE in a UK Mac | ||||
|                                   *   layout, NUMBER SIGN and TILDE in a UK | ||||
|                                   *   Windows layout, DOLLAR SIGN and POUND SIGN | ||||
|                                   *   in a Swiss German layout, NUMBER SIGN and | ||||
|                                   *   APOSTROPHE in a German layout, GRAVE | ||||
|                                   *   ACCENT and POUND SIGN in a French Mac | ||||
|                                   *   layout, and ASTERISK and MICRO SIGN in a | ||||
|                                   *   French Windows layout. | ||||
|                                   */ | ||||
|     SDL_SCANCODE_NONUSHASH = 50, /**< ISO USB keyboards actually use this code | ||||
|                                   *   instead of 49 for the same key, but all | ||||
|                                   *   OSes I've seen treat the two codes | ||||
|                                   *   identically. So, as an implementor, unless | ||||
|                                   *   your keyboard generates both of those | ||||
|                                   *   codes and your OS treats them differently, | ||||
|                                   *   you should generate SDL_SCANCODE_BACKSLASH | ||||
|                                   *   instead of this code. As a user, you | ||||
|                                   *   should not rely on this code because SDL | ||||
|                                   *   will never generate it with most (all?) | ||||
|                                   *   keyboards. | ||||
|                                   */ | ||||
|     SDL_SCANCODE_SEMICOLON = 51, | ||||
|     SDL_SCANCODE_APOSTROPHE = 52, | ||||
|     SDL_SCANCODE_GRAVE = 53, /**< Located in the top left corner (on both ANSI | ||||
|                               *   and ISO keyboards). Produces GRAVE ACCENT and | ||||
|                               *   TILDE in a US Windows layout and in US and UK | ||||
|                               *   Mac layouts on ANSI keyboards, GRAVE ACCENT | ||||
|                               *   and NOT SIGN in a UK Windows layout, SECTION | ||||
|                               *   SIGN and PLUS-MINUS SIGN in US and UK Mac | ||||
|                               *   layouts on ISO keyboards, SECTION SIGN and | ||||
|                               *   DEGREE SIGN in a Swiss German layout (Mac: | ||||
|                               *   only on ISO keyboards), CIRCUMFLEX ACCENT and | ||||
|                               *   DEGREE SIGN in a German layout (Mac: only on | ||||
|                               *   ISO keyboards), SUPERSCRIPT TWO and TILDE in a | ||||
|                               *   French Windows layout, COMMERCIAL AT and | ||||
|                               *   NUMBER SIGN in a French Mac layout on ISO | ||||
|                               *   keyboards, and LESS-THAN SIGN and GREATER-THAN | ||||
|                               *   SIGN in a Swiss German, German, or French Mac | ||||
|                               *   layout on ANSI keyboards. | ||||
|                               */ | ||||
|     SDL_SCANCODE_COMMA = 54, | ||||
|     SDL_SCANCODE_PERIOD = 55, | ||||
|     SDL_SCANCODE_SLASH = 56, | ||||
|  | ||||
|     SDL_SCANCODE_CAPSLOCK = 57, | ||||
|  | ||||
|     SDL_SCANCODE_F1 = 58, | ||||
|     SDL_SCANCODE_F2 = 59, | ||||
|     SDL_SCANCODE_F3 = 60, | ||||
|     SDL_SCANCODE_F4 = 61, | ||||
|     SDL_SCANCODE_F5 = 62, | ||||
|     SDL_SCANCODE_F6 = 63, | ||||
|     SDL_SCANCODE_F7 = 64, | ||||
|     SDL_SCANCODE_F8 = 65, | ||||
|     SDL_SCANCODE_F9 = 66, | ||||
|     SDL_SCANCODE_F10 = 67, | ||||
|     SDL_SCANCODE_F11 = 68, | ||||
|     SDL_SCANCODE_F12 = 69, | ||||
|  | ||||
|     SDL_SCANCODE_PRINTSCREEN = 70, | ||||
|     SDL_SCANCODE_SCROLLLOCK = 71, | ||||
|     SDL_SCANCODE_PAUSE = 72, | ||||
|     SDL_SCANCODE_INSERT = 73, /**< insert on PC, help on some Mac keyboards (but | ||||
|                                    does send code 73, not 117) */ | ||||
|     SDL_SCANCODE_HOME = 74, | ||||
|     SDL_SCANCODE_PAGEUP = 75, | ||||
|     SDL_SCANCODE_DELETE = 76, | ||||
|     SDL_SCANCODE_END = 77, | ||||
|     SDL_SCANCODE_PAGEDOWN = 78, | ||||
|     SDL_SCANCODE_RIGHT = 79, | ||||
|     SDL_SCANCODE_LEFT = 80, | ||||
|     SDL_SCANCODE_DOWN = 81, | ||||
|     SDL_SCANCODE_UP = 82, | ||||
|  | ||||
|     SDL_SCANCODE_NUMLOCKCLEAR = 83, /**< num lock on PC, clear on Mac keyboards | ||||
|                                      */ | ||||
|     SDL_SCANCODE_KP_DIVIDE = 84, | ||||
|     SDL_SCANCODE_KP_MULTIPLY = 85, | ||||
|     SDL_SCANCODE_KP_MINUS = 86, | ||||
|     SDL_SCANCODE_KP_PLUS = 87, | ||||
|     SDL_SCANCODE_KP_ENTER = 88, | ||||
|     SDL_SCANCODE_KP_1 = 89, | ||||
|     SDL_SCANCODE_KP_2 = 90, | ||||
|     SDL_SCANCODE_KP_3 = 91, | ||||
|     SDL_SCANCODE_KP_4 = 92, | ||||
|     SDL_SCANCODE_KP_5 = 93, | ||||
|     SDL_SCANCODE_KP_6 = 94, | ||||
|     SDL_SCANCODE_KP_7 = 95, | ||||
|     SDL_SCANCODE_KP_8 = 96, | ||||
|     SDL_SCANCODE_KP_9 = 97, | ||||
|     SDL_SCANCODE_KP_0 = 98, | ||||
|     SDL_SCANCODE_KP_PERIOD = 99, | ||||
|  | ||||
|     SDL_SCANCODE_NONUSBACKSLASH = 100, /**< This is the additional key that ISO | ||||
|                                         *   keyboards have over ANSI ones, | ||||
|                                         *   located between left shift and Y. | ||||
|                                         *   Produces GRAVE ACCENT and TILDE in a | ||||
|                                         *   US or UK Mac layout, REVERSE SOLIDUS | ||||
|                                         *   (backslash) and VERTICAL LINE in a | ||||
|                                         *   US or UK Windows layout, and | ||||
|                                         *   LESS-THAN SIGN and GREATER-THAN SIGN | ||||
|                                         *   in a Swiss German, German, or French | ||||
|                                         *   layout. */ | ||||
|     SDL_SCANCODE_APPLICATION = 101, /**< windows contextual menu, compose */ | ||||
|     SDL_SCANCODE_POWER = 102, /**< The USB document says this is a status flag, | ||||
|                                *   not a physical key - but some Mac keyboards | ||||
|                                *   do have a power key. */ | ||||
|     SDL_SCANCODE_KP_EQUALS = 103, | ||||
|     SDL_SCANCODE_F13 = 104, | ||||
|     SDL_SCANCODE_F14 = 105, | ||||
|     SDL_SCANCODE_F15 = 106, | ||||
|     SDL_SCANCODE_F16 = 107, | ||||
|     SDL_SCANCODE_F17 = 108, | ||||
|     SDL_SCANCODE_F18 = 109, | ||||
|     SDL_SCANCODE_F19 = 110, | ||||
|     SDL_SCANCODE_F20 = 111, | ||||
|     SDL_SCANCODE_F21 = 112, | ||||
|     SDL_SCANCODE_F22 = 113, | ||||
|     SDL_SCANCODE_F23 = 114, | ||||
|     SDL_SCANCODE_F24 = 115, | ||||
|     SDL_SCANCODE_EXECUTE = 116, | ||||
|     SDL_SCANCODE_HELP = 117, | ||||
|     SDL_SCANCODE_MENU = 118, | ||||
|     SDL_SCANCODE_SELECT = 119, | ||||
|     SDL_SCANCODE_STOP = 120, | ||||
|     SDL_SCANCODE_AGAIN = 121,   /**< redo */ | ||||
|     SDL_SCANCODE_UNDO = 122, | ||||
|     SDL_SCANCODE_CUT = 123, | ||||
|     SDL_SCANCODE_COPY = 124, | ||||
|     SDL_SCANCODE_PASTE = 125, | ||||
|     SDL_SCANCODE_FIND = 126, | ||||
|     SDL_SCANCODE_MUTE = 127, | ||||
|     SDL_SCANCODE_VOLUMEUP = 128, | ||||
|     SDL_SCANCODE_VOLUMEDOWN = 129, | ||||
| /* not sure whether there's a reason to enable these */ | ||||
| /*     SDL_SCANCODE_LOCKINGCAPSLOCK = 130,  */ | ||||
| /*     SDL_SCANCODE_LOCKINGNUMLOCK = 131, */ | ||||
| /*     SDL_SCANCODE_LOCKINGSCROLLLOCK = 132, */ | ||||
|     SDL_SCANCODE_KP_COMMA = 133, | ||||
|     SDL_SCANCODE_KP_EQUALSAS400 = 134, | ||||
|  | ||||
|     SDL_SCANCODE_INTERNATIONAL1 = 135, /**< used on Asian keyboards, see | ||||
|                                             footnotes in USB doc */ | ||||
|     SDL_SCANCODE_INTERNATIONAL2 = 136, | ||||
|     SDL_SCANCODE_INTERNATIONAL3 = 137, /**< Yen */ | ||||
|     SDL_SCANCODE_INTERNATIONAL4 = 138, | ||||
|     SDL_SCANCODE_INTERNATIONAL5 = 139, | ||||
|     SDL_SCANCODE_INTERNATIONAL6 = 140, | ||||
|     SDL_SCANCODE_INTERNATIONAL7 = 141, | ||||
|     SDL_SCANCODE_INTERNATIONAL8 = 142, | ||||
|     SDL_SCANCODE_INTERNATIONAL9 = 143, | ||||
|     SDL_SCANCODE_LANG1 = 144, /**< Hangul/English toggle */ | ||||
|     SDL_SCANCODE_LANG2 = 145, /**< Hanja conversion */ | ||||
|     SDL_SCANCODE_LANG3 = 146, /**< Katakana */ | ||||
|     SDL_SCANCODE_LANG4 = 147, /**< Hiragana */ | ||||
|     SDL_SCANCODE_LANG5 = 148, /**< Zenkaku/Hankaku */ | ||||
|     SDL_SCANCODE_LANG6 = 149, /**< reserved */ | ||||
|     SDL_SCANCODE_LANG7 = 150, /**< reserved */ | ||||
|     SDL_SCANCODE_LANG8 = 151, /**< reserved */ | ||||
|     SDL_SCANCODE_LANG9 = 152, /**< reserved */ | ||||
|  | ||||
|     SDL_SCANCODE_ALTERASE = 153, /**< Erase-Eaze */ | ||||
|     SDL_SCANCODE_SYSREQ = 154, | ||||
|     SDL_SCANCODE_CANCEL = 155, | ||||
|     SDL_SCANCODE_CLEAR = 156, | ||||
|     SDL_SCANCODE_PRIOR = 157, | ||||
|     SDL_SCANCODE_RETURN2 = 158, | ||||
|     SDL_SCANCODE_SEPARATOR = 159, | ||||
|     SDL_SCANCODE_OUT = 160, | ||||
|     SDL_SCANCODE_OPER = 161, | ||||
|     SDL_SCANCODE_CLEARAGAIN = 162, | ||||
|     SDL_SCANCODE_CRSEL = 163, | ||||
|     SDL_SCANCODE_EXSEL = 164, | ||||
|  | ||||
|     SDL_SCANCODE_KP_00 = 176, | ||||
|     SDL_SCANCODE_KP_000 = 177, | ||||
|     SDL_SCANCODE_THOUSANDSSEPARATOR = 178, | ||||
|     SDL_SCANCODE_DECIMALSEPARATOR = 179, | ||||
|     SDL_SCANCODE_CURRENCYUNIT = 180, | ||||
|     SDL_SCANCODE_CURRENCYSUBUNIT = 181, | ||||
|     SDL_SCANCODE_KP_LEFTPAREN = 182, | ||||
|     SDL_SCANCODE_KP_RIGHTPAREN = 183, | ||||
|     SDL_SCANCODE_KP_LEFTBRACE = 184, | ||||
|     SDL_SCANCODE_KP_RIGHTBRACE = 185, | ||||
|     SDL_SCANCODE_KP_TAB = 186, | ||||
|     SDL_SCANCODE_KP_BACKSPACE = 187, | ||||
|     SDL_SCANCODE_KP_A = 188, | ||||
|     SDL_SCANCODE_KP_B = 189, | ||||
|     SDL_SCANCODE_KP_C = 190, | ||||
|     SDL_SCANCODE_KP_D = 191, | ||||
|     SDL_SCANCODE_KP_E = 192, | ||||
|     SDL_SCANCODE_KP_F = 193, | ||||
|     SDL_SCANCODE_KP_XOR = 194, | ||||
|     SDL_SCANCODE_KP_POWER = 195, | ||||
|     SDL_SCANCODE_KP_PERCENT = 196, | ||||
|     SDL_SCANCODE_KP_LESS = 197, | ||||
|     SDL_SCANCODE_KP_GREATER = 198, | ||||
|     SDL_SCANCODE_KP_AMPERSAND = 199, | ||||
|     SDL_SCANCODE_KP_DBLAMPERSAND = 200, | ||||
|     SDL_SCANCODE_KP_VERTICALBAR = 201, | ||||
|     SDL_SCANCODE_KP_DBLVERTICALBAR = 202, | ||||
|     SDL_SCANCODE_KP_COLON = 203, | ||||
|     SDL_SCANCODE_KP_HASH = 204, | ||||
|     SDL_SCANCODE_KP_SPACE = 205, | ||||
|     SDL_SCANCODE_KP_AT = 206, | ||||
|     SDL_SCANCODE_KP_EXCLAM = 207, | ||||
|     SDL_SCANCODE_KP_MEMSTORE = 208, | ||||
|     SDL_SCANCODE_KP_MEMRECALL = 209, | ||||
|     SDL_SCANCODE_KP_MEMCLEAR = 210, | ||||
|     SDL_SCANCODE_KP_MEMADD = 211, | ||||
|     SDL_SCANCODE_KP_MEMSUBTRACT = 212, | ||||
|     SDL_SCANCODE_KP_MEMMULTIPLY = 213, | ||||
|     SDL_SCANCODE_KP_MEMDIVIDE = 214, | ||||
|     SDL_SCANCODE_KP_PLUSMINUS = 215, | ||||
|     SDL_SCANCODE_KP_CLEAR = 216, | ||||
|     SDL_SCANCODE_KP_CLEARENTRY = 217, | ||||
|     SDL_SCANCODE_KP_BINARY = 218, | ||||
|     SDL_SCANCODE_KP_OCTAL = 219, | ||||
|     SDL_SCANCODE_KP_DECIMAL = 220, | ||||
|     SDL_SCANCODE_KP_HEXADECIMAL = 221, | ||||
|  | ||||
|     SDL_SCANCODE_LCTRL = 224, | ||||
|     SDL_SCANCODE_LSHIFT = 225, | ||||
|     SDL_SCANCODE_LALT = 226, /**< alt, option */ | ||||
|     SDL_SCANCODE_LGUI = 227, /**< windows, command (apple), meta */ | ||||
|     SDL_SCANCODE_RCTRL = 228, | ||||
|     SDL_SCANCODE_RSHIFT = 229, | ||||
|     SDL_SCANCODE_RALT = 230, /**< alt gr, option */ | ||||
|     SDL_SCANCODE_RGUI = 231, /**< windows, command (apple), meta */ | ||||
|  | ||||
|     SDL_SCANCODE_MODE = 257,    /**< I'm not sure if this is really not covered | ||||
|                                  *   by any of the above, but since there's a | ||||
|                                  *   special KMOD_MODE for it I'm adding it here | ||||
|                                  */ | ||||
|  | ||||
|     /* @} *//* Usage page 0x07 */ | ||||
|  | ||||
|     /** | ||||
|      *  \name Usage page 0x0C | ||||
|      * | ||||
|      *  These values are mapped from usage page 0x0C (USB consumer page). | ||||
|      */ | ||||
|     /* @{ */ | ||||
|  | ||||
|     SDL_SCANCODE_AUDIONEXT = 258, | ||||
|     SDL_SCANCODE_AUDIOPREV = 259, | ||||
|     SDL_SCANCODE_AUDIOSTOP = 260, | ||||
|     SDL_SCANCODE_AUDIOPLAY = 261, | ||||
|     SDL_SCANCODE_AUDIOMUTE = 262, | ||||
|     SDL_SCANCODE_MEDIASELECT = 263, | ||||
|     SDL_SCANCODE_WWW = 264, | ||||
|     SDL_SCANCODE_MAIL = 265, | ||||
|     SDL_SCANCODE_CALCULATOR = 266, | ||||
|     SDL_SCANCODE_COMPUTER = 267, | ||||
|     SDL_SCANCODE_AC_SEARCH = 268, | ||||
|     SDL_SCANCODE_AC_HOME = 269, | ||||
|     SDL_SCANCODE_AC_BACK = 270, | ||||
|     SDL_SCANCODE_AC_FORWARD = 271, | ||||
|     SDL_SCANCODE_AC_STOP = 272, | ||||
|     SDL_SCANCODE_AC_REFRESH = 273, | ||||
|     SDL_SCANCODE_AC_BOOKMARKS = 274, | ||||
|  | ||||
|     /* @} *//* Usage page 0x0C */ | ||||
|  | ||||
|     /** | ||||
|      *  \name Walther keys | ||||
|      * | ||||
|      *  These are values that Christian Walther added (for mac keyboard?). | ||||
|      */ | ||||
|     /* @{ */ | ||||
|  | ||||
|     SDL_SCANCODE_BRIGHTNESSDOWN = 275, | ||||
|     SDL_SCANCODE_BRIGHTNESSUP = 276, | ||||
|     SDL_SCANCODE_DISPLAYSWITCH = 277, /**< display mirroring/dual display | ||||
|                                            switch, video mode switch */ | ||||
|     SDL_SCANCODE_KBDILLUMTOGGLE = 278, | ||||
|     SDL_SCANCODE_KBDILLUMDOWN = 279, | ||||
|     SDL_SCANCODE_KBDILLUMUP = 280, | ||||
|     SDL_SCANCODE_EJECT = 281, | ||||
|     SDL_SCANCODE_SLEEP = 282, | ||||
|  | ||||
|     SDL_SCANCODE_APP1 = 283, | ||||
|     SDL_SCANCODE_APP2 = 284, | ||||
|  | ||||
|     /* @} *//* Walther keys */ | ||||
|  | ||||
|     /* Add any other keys here. */ | ||||
|  | ||||
|     SDL_NUM_SCANCODES = 512 /**< not a key, just marks the number of scancodes | ||||
|                                  for array bounds */ | ||||
| } SDL_Scancode; | ||||
|  | ||||
| #endif /* _SDL_scancode_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,143 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_shape_h | ||||
| #define _SDL_shape_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
| #include "SDL_pixels.h" | ||||
| #include "SDL_rect.h" | ||||
| #include "SDL_surface.h" | ||||
| #include "SDL_video.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** \file SDL_shape.h | ||||
|  * | ||||
|  * Header file for the shaped window API. | ||||
|  */ | ||||
|  | ||||
| #define SDL_NONSHAPEABLE_WINDOW -1 | ||||
| #define SDL_INVALID_SHAPE_ARGUMENT -2 | ||||
| #define SDL_WINDOW_LACKS_SHAPE -3 | ||||
|  | ||||
| /** | ||||
|  *  \brief Create a window that can be shaped with the specified position, dimensions, and flags. | ||||
|  * | ||||
|  *  \param title The title of the window, in UTF-8 encoding. | ||||
|  *  \param x     The x position of the window, ::SDL_WINDOWPOS_CENTERED, or | ||||
|  *               ::SDL_WINDOWPOS_UNDEFINED. | ||||
|  *  \param y     The y position of the window, ::SDL_WINDOWPOS_CENTERED, or | ||||
|  *               ::SDL_WINDOWPOS_UNDEFINED. | ||||
|  *  \param w     The width of the window. | ||||
|  *  \param h     The height of the window. | ||||
|  *  \param flags The flags for the window, a mask of SDL_WINDOW_BORDERLESS with any of the following: | ||||
|  *               ::SDL_WINDOW_OPENGL,     ::SDL_WINDOW_INPUT_GRABBED, | ||||
|  *               ::SDL_WINDOW_HIDDEN,     ::SDL_WINDOW_RESIZABLE, | ||||
|  *               ::SDL_WINDOW_MAXIMIZED,  ::SDL_WINDOW_MINIMIZED, | ||||
|  *       ::SDL_WINDOW_BORDERLESS is always set, and ::SDL_WINDOW_FULLSCREEN is always unset. | ||||
|  * | ||||
|  *  \return The window created, or NULL if window creation failed. | ||||
|  * | ||||
|  *  \sa SDL_DestroyWindow() | ||||
|  */ | ||||
| extern DECLSPEC SDL_Window * SDLCALL SDL_CreateShapedWindow(const char *title,unsigned int x,unsigned int y,unsigned int w,unsigned int h,Uint32 flags); | ||||
|  | ||||
| /** | ||||
|  * \brief Return whether the given window is a shaped window. | ||||
|  * | ||||
|  * \param window The window to query for being shaped. | ||||
|  * | ||||
|  * \return SDL_TRUE if the window is a window that can be shaped, SDL_FALSE if the window is unshaped or NULL. | ||||
|  * \sa SDL_CreateShapedWindow | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_IsShapedWindow(const SDL_Window *window); | ||||
|  | ||||
| /** \brief An enum denoting the specific type of contents present in an SDL_WindowShapeParams union. */ | ||||
| typedef enum { | ||||
|     /** \brief The default mode, a binarized alpha cutoff of 1. */ | ||||
|     ShapeModeDefault, | ||||
|     /** \brief A binarized alpha cutoff with a given integer value. */ | ||||
|     ShapeModeBinarizeAlpha, | ||||
|     /** \brief A binarized alpha cutoff with a given integer value, but with the opposite comparison. */ | ||||
|     ShapeModeReverseBinarizeAlpha, | ||||
|     /** \brief A color key is applied. */ | ||||
|     ShapeModeColorKey | ||||
| } WindowShapeMode; | ||||
|  | ||||
| #define SDL_SHAPEMODEALPHA(mode) (mode == ShapeModeDefault || mode == ShapeModeBinarizeAlpha || mode == ShapeModeReverseBinarizeAlpha) | ||||
|  | ||||
| /** \brief A union containing parameters for shaped windows. */ | ||||
| typedef union { | ||||
|     /** \brief a cutoff alpha value for binarization of the window shape's alpha channel. */ | ||||
|     Uint8 binarizationCutoff; | ||||
|     SDL_Color colorKey; | ||||
| } SDL_WindowShapeParams; | ||||
|  | ||||
| /** \brief A struct that tags the SDL_WindowShapeParams union with an enum describing the type of its contents. */ | ||||
| typedef struct SDL_WindowShapeMode { | ||||
|     /** \brief The mode of these window-shape parameters. */ | ||||
|     WindowShapeMode mode; | ||||
|     /** \brief Window-shape parameters. */ | ||||
|     SDL_WindowShapeParams parameters; | ||||
| } SDL_WindowShapeMode; | ||||
|  | ||||
| /** | ||||
|  * \brief Set the shape and parameters of a shaped window. | ||||
|  * | ||||
|  * \param window The shaped window whose parameters should be set. | ||||
|  * \param shape A surface encoding the desired shape for the window. | ||||
|  * \param shape_mode The parameters to set for the shaped window. | ||||
|  * | ||||
|  * \return 0 on success, SDL_INVALID_SHAPE_ARGUMENT on invalid an invalid shape argument, or SDL_NONSHAPEABLE_WINDOW | ||||
|  *           if the SDL_Window* given does not reference a valid shaped window. | ||||
|  * | ||||
|  * \sa SDL_WindowShapeMode | ||||
|  * \sa SDL_GetShapedWindowMode. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_SetWindowShape(SDL_Window *window,SDL_Surface *shape,SDL_WindowShapeMode *shape_mode); | ||||
|  | ||||
| /** | ||||
|  * \brief Get the shape parameters of a shaped window. | ||||
|  * | ||||
|  * \param window The shaped window whose parameters should be retrieved. | ||||
|  * \param shape_mode An empty shape-mode structure to fill, or NULL to check whether the window has a shape. | ||||
|  * | ||||
|  * \return 0 if the window has a shape and, provided shape_mode was not NULL, shape_mode has been filled with the mode | ||||
|  *           data, SDL_NONSHAPEABLE_WINDOW if the SDL_Window given is not a shaped window, or SDL_WINDOW_LACKS_SHAPE if | ||||
|  *           the SDL_Window* given is a shapeable window currently lacking a shape. | ||||
|  * | ||||
|  * \sa SDL_WindowShapeMode | ||||
|  * \sa SDL_SetWindowShape | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_GetShapedWindowMode(SDL_Window *window,SDL_WindowShapeMode *shape_mode); | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_shape_h */ | ||||
| @@ -0,0 +1,527 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_stdinc.h | ||||
|  * | ||||
|  *  This is a general header that includes C language support. | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_stdinc_h | ||||
| #define _SDL_stdinc_h | ||||
|  | ||||
| #include "SDL_config.h" | ||||
|  | ||||
| #ifdef HAVE_SYS_TYPES_H | ||||
| #include <sys/types.h> | ||||
| #endif | ||||
| #ifdef HAVE_STDIO_H | ||||
| #include <stdio.h> | ||||
| #endif | ||||
| #if defined(STDC_HEADERS) | ||||
| # include <stdlib.h> | ||||
| # include <stddef.h> | ||||
| # include <stdarg.h> | ||||
| #else | ||||
| # if defined(HAVE_STDLIB_H) | ||||
| #  include <stdlib.h> | ||||
| # elif defined(HAVE_MALLOC_H) | ||||
| #  include <malloc.h> | ||||
| # endif | ||||
| # if defined(HAVE_STDDEF_H) | ||||
| #  include <stddef.h> | ||||
| # endif | ||||
| # if defined(HAVE_STDARG_H) | ||||
| #  include <stdarg.h> | ||||
| # endif | ||||
| #endif | ||||
| #ifdef HAVE_STRING_H | ||||
| # if !defined(STDC_HEADERS) && defined(HAVE_MEMORY_H) | ||||
| #  include <memory.h> | ||||
| # endif | ||||
| # include <string.h> | ||||
| #endif | ||||
| #ifdef HAVE_STRINGS_H | ||||
| # include <strings.h> | ||||
| #endif | ||||
| #if defined(HAVE_INTTYPES_H) | ||||
| # include <inttypes.h> | ||||
| #elif defined(HAVE_STDINT_H) | ||||
| # include <stdint.h> | ||||
| #endif | ||||
| #ifdef HAVE_CTYPE_H | ||||
| # include <ctype.h> | ||||
| #endif | ||||
| #ifdef HAVE_MATH_H | ||||
| # if defined(__WINRT__) | ||||
| /* Defining _USE_MATH_DEFINES is required to get M_PI to be defined on | ||||
|    WinRT.  See http://msdn.microsoft.com/en-us/library/4hwaceh6.aspx | ||||
|    for more information. | ||||
| */ | ||||
| #  define _USE_MATH_DEFINES | ||||
| # endif | ||||
| # include <math.h> | ||||
| #endif | ||||
| #ifdef HAVE_FLOAT_H | ||||
| # include <float.h> | ||||
| #endif | ||||
| #if defined(HAVE_ICONV) && defined(HAVE_ICONV_H) | ||||
| # include <iconv.h> | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  *  The number of elements in an array. | ||||
|  */ | ||||
| #define SDL_arraysize(array)    (sizeof(array)/sizeof(array[0])) | ||||
| #define SDL_TABLESIZE(table)    SDL_arraysize(table) | ||||
|  | ||||
| /** | ||||
|  *  \name Cast operators | ||||
|  * | ||||
|  *  Use proper C++ casts when compiled as C++ to be compatible with the option | ||||
|  *  -Wold-style-cast of GCC (and -Werror=old-style-cast in GCC 4.2 and above). | ||||
|  */ | ||||
| /* @{ */ | ||||
| #ifdef __cplusplus | ||||
| #define SDL_reinterpret_cast(type, expression) reinterpret_cast<type>(expression) | ||||
| #define SDL_static_cast(type, expression) static_cast<type>(expression) | ||||
| #define SDL_const_cast(type, expression) const_cast<type>(expression) | ||||
| #else | ||||
| #define SDL_reinterpret_cast(type, expression) ((type)(expression)) | ||||
| #define SDL_static_cast(type, expression) ((type)(expression)) | ||||
| #define SDL_const_cast(type, expression) ((type)(expression)) | ||||
| #endif | ||||
| /* @} *//* Cast operators */ | ||||
|  | ||||
| /* Define a four character code as a Uint32 */ | ||||
| #define SDL_FOURCC(A, B, C, D) \ | ||||
|     ((SDL_static_cast(Uint32, SDL_static_cast(Uint8, (A))) << 0) | \ | ||||
|      (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (B))) << 8) | \ | ||||
|      (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (C))) << 16) | \ | ||||
|      (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (D))) << 24)) | ||||
|  | ||||
| /** | ||||
|  *  \name Basic data types | ||||
|  */ | ||||
| /* @{ */ | ||||
|  | ||||
| typedef enum | ||||
| { | ||||
|     SDL_FALSE = 0, | ||||
|     SDL_TRUE = 1 | ||||
| } SDL_bool; | ||||
|  | ||||
| /** | ||||
|  * \brief A signed 8-bit integer type. | ||||
|  */ | ||||
| typedef int8_t Sint8; | ||||
| /** | ||||
|  * \brief An unsigned 8-bit integer type. | ||||
|  */ | ||||
| typedef uint8_t Uint8; | ||||
| /** | ||||
|  * \brief A signed 16-bit integer type. | ||||
|  */ | ||||
| typedef int16_t Sint16; | ||||
| /** | ||||
|  * \brief An unsigned 16-bit integer type. | ||||
|  */ | ||||
| typedef uint16_t Uint16; | ||||
| /** | ||||
|  * \brief A signed 32-bit integer type. | ||||
|  */ | ||||
| typedef int32_t Sint32; | ||||
| /** | ||||
|  * \brief An unsigned 32-bit integer type. | ||||
|  */ | ||||
| typedef uint32_t Uint32; | ||||
|  | ||||
| /** | ||||
|  * \brief A signed 64-bit integer type. | ||||
|  */ | ||||
| typedef int64_t Sint64; | ||||
| /** | ||||
|  * \brief An unsigned 64-bit integer type. | ||||
|  */ | ||||
| typedef uint64_t Uint64; | ||||
|  | ||||
| /* @} *//* Basic data types */ | ||||
|  | ||||
| /* Make sure we have macros for printing 64 bit values. | ||||
|  * <stdint.h> should define these but this is not true all platforms. | ||||
|  * (for example win32) */ | ||||
| #ifndef SDL_PRIs64 | ||||
| #ifdef PRIs64 | ||||
| #define SDL_PRIs64 PRIs64 | ||||
| #elif defined(__WIN32__) | ||||
| #define SDL_PRIs64 "I64d" | ||||
| #elif defined(__LINUX__) && defined(__LP64__) | ||||
| #define SDL_PRIs64 "ld" | ||||
| #else | ||||
| #define SDL_PRIs64 "lld" | ||||
| #endif | ||||
| #endif | ||||
| #ifndef SDL_PRIu64 | ||||
| #ifdef PRIu64 | ||||
| #define SDL_PRIu64 PRIu64 | ||||
| #elif defined(__WIN32__) | ||||
| #define SDL_PRIu64 "I64u" | ||||
| #elif defined(__LINUX__) && defined(__LP64__) | ||||
| #define SDL_PRIu64 "lu" | ||||
| #else | ||||
| #define SDL_PRIu64 "llu" | ||||
| #endif | ||||
| #endif | ||||
| #ifndef SDL_PRIx64 | ||||
| #ifdef PRIx64 | ||||
| #define SDL_PRIx64 PRIx64 | ||||
| #elif defined(__WIN32__) | ||||
| #define SDL_PRIx64 "I64x" | ||||
| #elif defined(__LINUX__) && defined(__LP64__) | ||||
| #define SDL_PRIx64 "lx" | ||||
| #else | ||||
| #define SDL_PRIx64 "llx" | ||||
| #endif | ||||
| #endif | ||||
| #ifndef SDL_PRIX64 | ||||
| #ifdef PRIX64 | ||||
| #define SDL_PRIX64 PRIX64 | ||||
| #elif defined(__WIN32__) | ||||
| #define SDL_PRIX64 "I64X" | ||||
| #elif defined(__LINUX__) && defined(__LP64__) | ||||
| #define SDL_PRIX64 "lX" | ||||
| #else | ||||
| #define SDL_PRIX64 "llX" | ||||
| #endif | ||||
| #endif | ||||
|  | ||||
| /* Annotations to help code analysis tools */ | ||||
| #ifdef SDL_DISABLE_ANALYZE_MACROS | ||||
| #define SDL_IN_BYTECAP(x) | ||||
| #define SDL_INOUT_Z_CAP(x) | ||||
| #define SDL_OUT_Z_CAP(x) | ||||
| #define SDL_OUT_CAP(x) | ||||
| #define SDL_OUT_BYTECAP(x) | ||||
| #define SDL_OUT_Z_BYTECAP(x) | ||||
| #define SDL_PRINTF_FORMAT_STRING | ||||
| #define SDL_SCANF_FORMAT_STRING | ||||
| #define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) | ||||
| #define SDL_SCANF_VARARG_FUNC( fmtargnumber ) | ||||
| #else | ||||
| #if defined(_MSC_VER) && (_MSC_VER >= 1600) /* VS 2010 and above */ | ||||
| #include <sal.h> | ||||
|  | ||||
| #define SDL_IN_BYTECAP(x) _In_bytecount_(x) | ||||
| #define SDL_INOUT_Z_CAP(x) _Inout_z_cap_(x) | ||||
| #define SDL_OUT_Z_CAP(x) _Out_z_cap_(x) | ||||
| #define SDL_OUT_CAP(x) _Out_cap_(x) | ||||
| #define SDL_OUT_BYTECAP(x) _Out_bytecap_(x) | ||||
| #define SDL_OUT_Z_BYTECAP(x) _Out_z_bytecap_(x) | ||||
|  | ||||
| #define SDL_PRINTF_FORMAT_STRING _Printf_format_string_ | ||||
| #define SDL_SCANF_FORMAT_STRING _Scanf_format_string_impl_ | ||||
| #else | ||||
| #define SDL_IN_BYTECAP(x) | ||||
| #define SDL_INOUT_Z_CAP(x) | ||||
| #define SDL_OUT_Z_CAP(x) | ||||
| #define SDL_OUT_CAP(x) | ||||
| #define SDL_OUT_BYTECAP(x) | ||||
| #define SDL_OUT_Z_BYTECAP(x) | ||||
| #define SDL_PRINTF_FORMAT_STRING | ||||
| #define SDL_SCANF_FORMAT_STRING | ||||
| #endif | ||||
| #if defined(__GNUC__) | ||||
| #define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) __attribute__ (( format( __printf__, fmtargnumber, fmtargnumber+1 ))) | ||||
| #define SDL_SCANF_VARARG_FUNC( fmtargnumber ) __attribute__ (( format( __scanf__, fmtargnumber, fmtargnumber+1 ))) | ||||
| #else | ||||
| #define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) | ||||
| #define SDL_SCANF_VARARG_FUNC( fmtargnumber ) | ||||
| #endif | ||||
| #endif /* SDL_DISABLE_ANALYZE_MACROS */ | ||||
|  | ||||
| #define SDL_COMPILE_TIME_ASSERT(name, x)               \ | ||||
|        typedef int SDL_dummy_ ## name[(x) * 2 - 1] | ||||
| /** \cond */ | ||||
| #ifndef DOXYGEN_SHOULD_IGNORE_THIS | ||||
| SDL_COMPILE_TIME_ASSERT(uint8, sizeof(Uint8) == 1); | ||||
| SDL_COMPILE_TIME_ASSERT(sint8, sizeof(Sint8) == 1); | ||||
| SDL_COMPILE_TIME_ASSERT(uint16, sizeof(Uint16) == 2); | ||||
| SDL_COMPILE_TIME_ASSERT(sint16, sizeof(Sint16) == 2); | ||||
| SDL_COMPILE_TIME_ASSERT(uint32, sizeof(Uint32) == 4); | ||||
| SDL_COMPILE_TIME_ASSERT(sint32, sizeof(Sint32) == 4); | ||||
| SDL_COMPILE_TIME_ASSERT(uint64, sizeof(Uint64) == 8); | ||||
| SDL_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8); | ||||
| #endif /* DOXYGEN_SHOULD_IGNORE_THIS */ | ||||
| /** \endcond */ | ||||
|  | ||||
| /* Check to make sure enums are the size of ints, for structure packing. | ||||
|    For both Watcom C/C++ and Borland C/C++ the compiler option that makes | ||||
|    enums having the size of an int must be enabled. | ||||
|    This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11). | ||||
| */ | ||||
|  | ||||
| /** \cond */ | ||||
| #ifndef DOXYGEN_SHOULD_IGNORE_THIS | ||||
| #if !defined(__ANDROID__) | ||||
|    /* TODO: include/SDL_stdinc.h:174: error: size of array 'SDL_dummy_enum' is negative */ | ||||
| typedef enum | ||||
| { | ||||
|     DUMMY_ENUM_VALUE | ||||
| } SDL_DUMMY_ENUM; | ||||
|  | ||||
| SDL_COMPILE_TIME_ASSERT(enum, sizeof(SDL_DUMMY_ENUM) == sizeof(int)); | ||||
| #endif | ||||
| #endif /* DOXYGEN_SHOULD_IGNORE_THIS */ | ||||
| /** \endcond */ | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| #if defined(HAVE_ALLOCA) && !defined(alloca) | ||||
| # if defined(HAVE_ALLOCA_H) | ||||
| #  include <alloca.h> | ||||
| # elif defined(__GNUC__) | ||||
| #  define alloca __builtin_alloca | ||||
| # elif defined(_MSC_VER) | ||||
| #  include <malloc.h> | ||||
| #  define alloca _alloca | ||||
| # elif defined(__WATCOMC__) | ||||
| #  include <malloc.h> | ||||
| # elif defined(__BORLANDC__) | ||||
| #  include <malloc.h> | ||||
| # elif defined(__DMC__) | ||||
| #  include <stdlib.h> | ||||
| # elif defined(__AIX__) | ||||
| #pragma alloca | ||||
| # elif defined(__MRC__) | ||||
| void *alloca(unsigned); | ||||
| # else | ||||
| char *alloca(); | ||||
| # endif | ||||
| #endif | ||||
| #ifdef HAVE_ALLOCA | ||||
| #define SDL_stack_alloc(type, count)    (type*)alloca(sizeof(type)*(count)) | ||||
| #define SDL_stack_free(data) | ||||
| #else | ||||
| #define SDL_stack_alloc(type, count)    (type*)SDL_malloc(sizeof(type)*(count)) | ||||
| #define SDL_stack_free(data)            SDL_free(data) | ||||
| #endif | ||||
|  | ||||
| extern DECLSPEC void *SDLCALL SDL_malloc(size_t size); | ||||
| extern DECLSPEC void *SDLCALL SDL_calloc(size_t nmemb, size_t size); | ||||
| extern DECLSPEC void *SDLCALL SDL_realloc(void *mem, size_t size); | ||||
| extern DECLSPEC void SDLCALL SDL_free(void *mem); | ||||
|  | ||||
| extern DECLSPEC char *SDLCALL SDL_getenv(const char *name); | ||||
| extern DECLSPEC int SDLCALL SDL_setenv(const char *name, const char *value, int overwrite); | ||||
|  | ||||
| extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size, int (*compare) (const void *, const void *)); | ||||
|  | ||||
| extern DECLSPEC int SDLCALL SDL_abs(int x); | ||||
|  | ||||
| /* !!! FIXME: these have side effects. You probably shouldn't use them. */ | ||||
| /* !!! FIXME: Maybe we do forceinline functions of SDL_mini, SDL_minf, etc? */ | ||||
| #define SDL_min(x, y) (((x) < (y)) ? (x) : (y)) | ||||
| #define SDL_max(x, y) (((x) > (y)) ? (x) : (y)) | ||||
|  | ||||
| extern DECLSPEC int SDLCALL SDL_isdigit(int x); | ||||
| extern DECLSPEC int SDLCALL SDL_isspace(int x); | ||||
| extern DECLSPEC int SDLCALL SDL_toupper(int x); | ||||
| extern DECLSPEC int SDLCALL SDL_tolower(int x); | ||||
|  | ||||
| extern DECLSPEC void *SDLCALL SDL_memset(SDL_OUT_BYTECAP(len) void *dst, int c, size_t len); | ||||
|  | ||||
| #define SDL_zero(x) SDL_memset(&(x), 0, sizeof((x))) | ||||
| #define SDL_zerop(x) SDL_memset((x), 0, sizeof(*(x))) | ||||
|  | ||||
| /* Note that memset() is a byte assignment and this is a 32-bit assignment, so they're not directly equivalent. */ | ||||
| SDL_FORCE_INLINE void SDL_memset4(void *dst, Uint32 val, size_t dwords) | ||||
| { | ||||
| #if defined(__GNUC__) && defined(i386) | ||||
|     int u0, u1, u2; | ||||
|     __asm__ __volatile__ ( | ||||
|         "cld \n\t" | ||||
|         "rep ; stosl \n\t" | ||||
|         : "=&D" (u0), "=&a" (u1), "=&c" (u2) | ||||
|         : "0" (dst), "1" (val), "2" (SDL_static_cast(Uint32, dwords)) | ||||
|         : "memory" | ||||
|     ); | ||||
| #else | ||||
|     size_t _n = (dwords + 3) / 4; | ||||
|     Uint32 *_p = SDL_static_cast(Uint32 *, dst); | ||||
|     Uint32 _val = (val); | ||||
|     if (dwords == 0) | ||||
|         return; | ||||
|     switch (dwords % 4) | ||||
|     { | ||||
|         case 0: do {    *_p++ = _val; | ||||
|         case 3:         *_p++ = _val; | ||||
|         case 2:         *_p++ = _val; | ||||
|         case 1:         *_p++ = _val; | ||||
|         } while ( --_n ); | ||||
|     } | ||||
| #endif | ||||
| } | ||||
|  | ||||
|  | ||||
| extern DECLSPEC void *SDLCALL SDL_memcpy(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len); | ||||
|  | ||||
| extern DECLSPEC void *SDLCALL SDL_memmove(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len); | ||||
| extern DECLSPEC int SDLCALL SDL_memcmp(const void *s1, const void *s2, size_t len); | ||||
|  | ||||
| extern DECLSPEC size_t SDLCALL SDL_wcslen(const wchar_t *wstr); | ||||
| extern DECLSPEC size_t SDLCALL SDL_wcslcpy(SDL_OUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen); | ||||
| extern DECLSPEC size_t SDLCALL SDL_wcslcat(SDL_INOUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen); | ||||
|  | ||||
| extern DECLSPEC size_t SDLCALL SDL_strlen(const char *str); | ||||
| extern DECLSPEC size_t SDLCALL SDL_strlcpy(SDL_OUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen); | ||||
| extern DECLSPEC size_t SDLCALL SDL_utf8strlcpy(SDL_OUT_Z_CAP(dst_bytes) char *dst, const char *src, size_t dst_bytes); | ||||
| extern DECLSPEC size_t SDLCALL SDL_strlcat(SDL_INOUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen); | ||||
| extern DECLSPEC char *SDLCALL SDL_strdup(const char *str); | ||||
| extern DECLSPEC char *SDLCALL SDL_strrev(char *str); | ||||
| extern DECLSPEC char *SDLCALL SDL_strupr(char *str); | ||||
| extern DECLSPEC char *SDLCALL SDL_strlwr(char *str); | ||||
| extern DECLSPEC char *SDLCALL SDL_strchr(const char *str, int c); | ||||
| extern DECLSPEC char *SDLCALL SDL_strrchr(const char *str, int c); | ||||
| extern DECLSPEC char *SDLCALL SDL_strstr(const char *haystack, const char *needle); | ||||
|  | ||||
| extern DECLSPEC char *SDLCALL SDL_itoa(int value, char *str, int radix); | ||||
| extern DECLSPEC char *SDLCALL SDL_uitoa(unsigned int value, char *str, int radix); | ||||
| extern DECLSPEC char *SDLCALL SDL_ltoa(long value, char *str, int radix); | ||||
| extern DECLSPEC char *SDLCALL SDL_ultoa(unsigned long value, char *str, int radix); | ||||
| extern DECLSPEC char *SDLCALL SDL_lltoa(Sint64 value, char *str, int radix); | ||||
| extern DECLSPEC char *SDLCALL SDL_ulltoa(Uint64 value, char *str, int radix); | ||||
|  | ||||
| extern DECLSPEC int SDLCALL SDL_atoi(const char *str); | ||||
| extern DECLSPEC double SDLCALL SDL_atof(const char *str); | ||||
| extern DECLSPEC long SDLCALL SDL_strtol(const char *str, char **endp, int base); | ||||
| extern DECLSPEC unsigned long SDLCALL SDL_strtoul(const char *str, char **endp, int base); | ||||
| extern DECLSPEC Sint64 SDLCALL SDL_strtoll(const char *str, char **endp, int base); | ||||
| extern DECLSPEC Uint64 SDLCALL SDL_strtoull(const char *str, char **endp, int base); | ||||
| extern DECLSPEC double SDLCALL SDL_strtod(const char *str, char **endp); | ||||
|  | ||||
| extern DECLSPEC int SDLCALL SDL_strcmp(const char *str1, const char *str2); | ||||
| extern DECLSPEC int SDLCALL SDL_strncmp(const char *str1, const char *str2, size_t maxlen); | ||||
| extern DECLSPEC int SDLCALL SDL_strcasecmp(const char *str1, const char *str2); | ||||
| extern DECLSPEC int SDLCALL SDL_strncasecmp(const char *str1, const char *str2, size_t len); | ||||
|  | ||||
| extern DECLSPEC int SDLCALL SDL_sscanf(const char *text, SDL_SCANF_FORMAT_STRING const char *fmt, ...) SDL_SCANF_VARARG_FUNC(2); | ||||
| extern DECLSPEC int SDLCALL SDL_vsscanf(const char *text, const char *fmt, va_list ap); | ||||
| extern DECLSPEC int SDLCALL SDL_snprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, SDL_PRINTF_FORMAT_STRING const char *fmt, ... ) SDL_PRINTF_VARARG_FUNC(3); | ||||
| extern DECLSPEC int SDLCALL SDL_vsnprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, const char *fmt, va_list ap); | ||||
|  | ||||
| #ifndef HAVE_M_PI | ||||
| #ifndef M_PI | ||||
| #define M_PI    3.14159265358979323846264338327950288   /* pi */ | ||||
| #endif | ||||
| #endif | ||||
|  | ||||
| extern DECLSPEC double SDLCALL SDL_acos(double x); | ||||
| extern DECLSPEC double SDLCALL SDL_asin(double x); | ||||
| extern DECLSPEC double SDLCALL SDL_atan(double x); | ||||
| extern DECLSPEC double SDLCALL SDL_atan2(double x, double y); | ||||
| extern DECLSPEC double SDLCALL SDL_ceil(double x); | ||||
| extern DECLSPEC double SDLCALL SDL_copysign(double x, double y); | ||||
| extern DECLSPEC double SDLCALL SDL_cos(double x); | ||||
| extern DECLSPEC float SDLCALL SDL_cosf(float x); | ||||
| extern DECLSPEC double SDLCALL SDL_fabs(double x); | ||||
| extern DECLSPEC double SDLCALL SDL_floor(double x); | ||||
| extern DECLSPEC double SDLCALL SDL_log(double x); | ||||
| extern DECLSPEC double SDLCALL SDL_pow(double x, double y); | ||||
| extern DECLSPEC double SDLCALL SDL_scalbn(double x, int n); | ||||
| extern DECLSPEC double SDLCALL SDL_sin(double x); | ||||
| extern DECLSPEC float SDLCALL SDL_sinf(float x); | ||||
| extern DECLSPEC double SDLCALL SDL_sqrt(double x); | ||||
| extern DECLSPEC float SDLCALL SDL_sqrtf(float x); | ||||
| extern DECLSPEC double SDLCALL SDL_tan(double x); | ||||
| extern DECLSPEC float SDLCALL SDL_tanf(float x); | ||||
|  | ||||
| /* The SDL implementation of iconv() returns these error codes */ | ||||
| #define SDL_ICONV_ERROR     (size_t)-1 | ||||
| #define SDL_ICONV_E2BIG     (size_t)-2 | ||||
| #define SDL_ICONV_EILSEQ    (size_t)-3 | ||||
| #define SDL_ICONV_EINVAL    (size_t)-4 | ||||
|  | ||||
| /* SDL_iconv_* are now always real symbols/types, not macros or inlined. */ | ||||
| typedef struct _SDL_iconv_t *SDL_iconv_t; | ||||
| extern DECLSPEC SDL_iconv_t SDLCALL SDL_iconv_open(const char *tocode, | ||||
|                                                    const char *fromcode); | ||||
| extern DECLSPEC int SDLCALL SDL_iconv_close(SDL_iconv_t cd); | ||||
| extern DECLSPEC size_t SDLCALL SDL_iconv(SDL_iconv_t cd, const char **inbuf, | ||||
|                                          size_t * inbytesleft, char **outbuf, | ||||
|                                          size_t * outbytesleft); | ||||
| /** | ||||
|  *  This function converts a string between encodings in one pass, returning a | ||||
|  *  string that must be freed with SDL_free() or NULL on error. | ||||
|  */ | ||||
| extern DECLSPEC char *SDLCALL SDL_iconv_string(const char *tocode, | ||||
|                                                const char *fromcode, | ||||
|                                                const char *inbuf, | ||||
|                                                size_t inbytesleft); | ||||
| #define SDL_iconv_utf8_locale(S)    SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1) | ||||
| #define SDL_iconv_utf8_ucs2(S)      (Uint16 *)SDL_iconv_string("UCS-2-INTERNAL", "UTF-8", S, SDL_strlen(S)+1) | ||||
| #define SDL_iconv_utf8_ucs4(S)      (Uint32 *)SDL_iconv_string("UCS-4-INTERNAL", "UTF-8", S, SDL_strlen(S)+1) | ||||
|  | ||||
| /* force builds using Clang's static analysis tools to use literal C runtime | ||||
|    here, since there are possibly tests that are ineffective otherwise. */ | ||||
| #if defined(__clang_analyzer__) && !defined(SDL_DISABLE_ANALYZE_MACROS) | ||||
| #define SDL_malloc malloc | ||||
| #define SDL_calloc calloc | ||||
| #define SDL_realloc realloc | ||||
| #define SDL_free free | ||||
| #define SDL_memset memset | ||||
| #define SDL_memcpy memcpy | ||||
| #define SDL_memmove memmove | ||||
| #define SDL_memcmp memcmp | ||||
| #define SDL_strlen strlen | ||||
| #define SDL_strlcpy strlcpy | ||||
| #define SDL_strlcat strlcat | ||||
| #define SDL_strdup strdup | ||||
| #define SDL_strchr strchr | ||||
| #define SDL_strrchr strrchr | ||||
| #define SDL_strstr strstr | ||||
| #define SDL_strcmp strcmp | ||||
| #define SDL_strncmp strncmp | ||||
| #define SDL_strcasecmp strcasecmp | ||||
| #define SDL_strncasecmp strncasecmp | ||||
| #define SDL_sscanf sscanf | ||||
| #define SDL_vsscanf vsscanf | ||||
| #define SDL_snprintf snprintf | ||||
| #define SDL_vsnprintf vsnprintf | ||||
| #endif | ||||
|  | ||||
| SDL_FORCE_INLINE void *SDL_memcpy4(SDL_OUT_BYTECAP(dwords*4) void *dst, SDL_IN_BYTECAP(dwords*4) const void *src, size_t dwords) | ||||
| { | ||||
|     return SDL_memcpy(dst, src, dwords * 4); | ||||
| } | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_stdinc_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,503 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_surface.h | ||||
|  * | ||||
|  *  Header file for ::SDL_Surface definition and management functions. | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_surface_h | ||||
| #define _SDL_surface_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
| #include "SDL_pixels.h" | ||||
| #include "SDL_rect.h" | ||||
| #include "SDL_blendmode.h" | ||||
| #include "SDL_rwops.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  *  \name Surface flags | ||||
|  * | ||||
|  *  These are the currently supported flags for the ::SDL_Surface. | ||||
|  * | ||||
|  *  \internal | ||||
|  *  Used internally (read-only). | ||||
|  */ | ||||
| /* @{ */ | ||||
| #define SDL_SWSURFACE       0           /**< Just here for compatibility */ | ||||
| #define SDL_PREALLOC        0x00000001  /**< Surface uses preallocated memory */ | ||||
| #define SDL_RLEACCEL        0x00000002  /**< Surface is RLE encoded */ | ||||
| #define SDL_DONTFREE        0x00000004  /**< Surface is referenced internally */ | ||||
| /* @} *//* Surface flags */ | ||||
|  | ||||
| /** | ||||
|  *  Evaluates to true if the surface needs to be locked before access. | ||||
|  */ | ||||
| #define SDL_MUSTLOCK(S) (((S)->flags & SDL_RLEACCEL) != 0) | ||||
|  | ||||
| /** | ||||
|  * \brief A collection of pixels used in software blitting. | ||||
|  * | ||||
|  * \note  This structure should be treated as read-only, except for \c pixels, | ||||
|  *        which, if not NULL, contains the raw pixel data for the surface. | ||||
|  */ | ||||
| typedef struct SDL_Surface | ||||
| { | ||||
|     Uint32 flags;               /**< Read-only */ | ||||
|     SDL_PixelFormat *format;    /**< Read-only */ | ||||
|     int w, h;                   /**< Read-only */ | ||||
|     int pitch;                  /**< Read-only */ | ||||
|     void *pixels;               /**< Read-write */ | ||||
|  | ||||
|     /** Application data associated with the surface */ | ||||
|     void *userdata;             /**< Read-write */ | ||||
|  | ||||
|     /** information needed for surfaces requiring locks */ | ||||
|     int locked;                 /**< Read-only */ | ||||
|     void *lock_data;            /**< Read-only */ | ||||
|  | ||||
|     /** clipping information */ | ||||
|     SDL_Rect clip_rect;         /**< Read-only */ | ||||
|  | ||||
|     /** info for fast blit mapping to other surfaces */ | ||||
|     struct SDL_BlitMap *map;    /**< Private */ | ||||
|  | ||||
|     /** Reference count -- used when freeing surface */ | ||||
|     int refcount;               /**< Read-mostly */ | ||||
| } SDL_Surface; | ||||
|  | ||||
| /** | ||||
|  * \brief The type of function used for surface blitting functions. | ||||
|  */ | ||||
| typedef int (*SDL_blit) (struct SDL_Surface * src, SDL_Rect * srcrect, | ||||
|                          struct SDL_Surface * dst, SDL_Rect * dstrect); | ||||
|  | ||||
| /** | ||||
|  *  Allocate and free an RGB surface. | ||||
|  * | ||||
|  *  If the depth is 4 or 8 bits, an empty palette is allocated for the surface. | ||||
|  *  If the depth is greater than 8 bits, the pixel format is set using the | ||||
|  *  flags '[RGB]mask'. | ||||
|  * | ||||
|  *  If the function runs out of memory, it will return NULL. | ||||
|  * | ||||
|  *  \param flags The \c flags are obsolete and should be set to 0. | ||||
|  *  \param width The width in pixels of the surface to create. | ||||
|  *  \param height The height in pixels of the surface to create. | ||||
|  *  \param depth The depth in bits of the surface to create. | ||||
|  *  \param Rmask The red mask of the surface to create. | ||||
|  *  \param Gmask The green mask of the surface to create. | ||||
|  *  \param Bmask The blue mask of the surface to create. | ||||
|  *  \param Amask The alpha mask of the surface to create. | ||||
|  */ | ||||
| extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurface | ||||
|     (Uint32 flags, int width, int height, int depth, | ||||
|      Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask); | ||||
| extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceFrom(void *pixels, | ||||
|                                                               int width, | ||||
|                                                               int height, | ||||
|                                                               int depth, | ||||
|                                                               int pitch, | ||||
|                                                               Uint32 Rmask, | ||||
|                                                               Uint32 Gmask, | ||||
|                                                               Uint32 Bmask, | ||||
|                                                               Uint32 Amask); | ||||
| extern DECLSPEC void SDLCALL SDL_FreeSurface(SDL_Surface * surface); | ||||
|  | ||||
| /** | ||||
|  *  \brief Set the palette used by a surface. | ||||
|  * | ||||
|  *  \return 0, or -1 if the surface format doesn't use a palette. | ||||
|  * | ||||
|  *  \note A single palette can be shared with many surfaces. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_SetSurfacePalette(SDL_Surface * surface, | ||||
|                                                   SDL_Palette * palette); | ||||
|  | ||||
| /** | ||||
|  *  \brief Sets up a surface for directly accessing the pixels. | ||||
|  * | ||||
|  *  Between calls to SDL_LockSurface() / SDL_UnlockSurface(), you can write | ||||
|  *  to and read from \c surface->pixels, using the pixel format stored in | ||||
|  *  \c surface->format.  Once you are done accessing the surface, you should | ||||
|  *  use SDL_UnlockSurface() to release it. | ||||
|  * | ||||
|  *  Not all surfaces require locking.  If SDL_MUSTLOCK(surface) evaluates | ||||
|  *  to 0, then you can read and write to the surface at any time, and the | ||||
|  *  pixel format of the surface will not change. | ||||
|  * | ||||
|  *  No operating system or library calls should be made between lock/unlock | ||||
|  *  pairs, as critical system locks may be held during this time. | ||||
|  * | ||||
|  *  SDL_LockSurface() returns 0, or -1 if the surface couldn't be locked. | ||||
|  * | ||||
|  *  \sa SDL_UnlockSurface() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_LockSurface(SDL_Surface * surface); | ||||
| /** \sa SDL_LockSurface() */ | ||||
| extern DECLSPEC void SDLCALL SDL_UnlockSurface(SDL_Surface * surface); | ||||
|  | ||||
| /** | ||||
|  *  Load a surface from a seekable SDL data stream (memory or file). | ||||
|  * | ||||
|  *  If \c freesrc is non-zero, the stream will be closed after being read. | ||||
|  * | ||||
|  *  The new surface should be freed with SDL_FreeSurface(). | ||||
|  * | ||||
|  *  \return the new surface, or NULL if there was an error. | ||||
|  */ | ||||
| extern DECLSPEC SDL_Surface *SDLCALL SDL_LoadBMP_RW(SDL_RWops * src, | ||||
|                                                     int freesrc); | ||||
|  | ||||
| /** | ||||
|  *  Load a surface from a file. | ||||
|  * | ||||
|  *  Convenience macro. | ||||
|  */ | ||||
| #define SDL_LoadBMP(file)   SDL_LoadBMP_RW(SDL_RWFromFile(file, "rb"), 1) | ||||
|  | ||||
| /** | ||||
|  *  Save a surface to a seekable SDL data stream (memory or file). | ||||
|  * | ||||
|  *  If \c freedst is non-zero, the stream will be closed after being written. | ||||
|  * | ||||
|  *  \return 0 if successful or -1 if there was an error. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_SaveBMP_RW | ||||
|     (SDL_Surface * surface, SDL_RWops * dst, int freedst); | ||||
|  | ||||
| /** | ||||
|  *  Save a surface to a file. | ||||
|  * | ||||
|  *  Convenience macro. | ||||
|  */ | ||||
| #define SDL_SaveBMP(surface, file) \ | ||||
|         SDL_SaveBMP_RW(surface, SDL_RWFromFile(file, "wb"), 1) | ||||
|  | ||||
| /** | ||||
|  *  \brief Sets the RLE acceleration hint for a surface. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 if the surface is not valid | ||||
|  * | ||||
|  *  \note If RLE is enabled, colorkey and alpha blending blits are much faster, | ||||
|  *        but the surface must be locked before directly accessing the pixels. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_SetSurfaceRLE(SDL_Surface * surface, | ||||
|                                               int flag); | ||||
|  | ||||
| /** | ||||
|  *  \brief Sets the color key (transparent pixel) in a blittable surface. | ||||
|  * | ||||
|  *  \param surface The surface to update | ||||
|  *  \param flag Non-zero to enable colorkey and 0 to disable colorkey | ||||
|  *  \param key The transparent pixel in the native surface format | ||||
|  * | ||||
|  *  \return 0 on success, or -1 if the surface is not valid | ||||
|  * | ||||
|  *  You can pass SDL_RLEACCEL to enable RLE accelerated blits. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_SetColorKey(SDL_Surface * surface, | ||||
|                                             int flag, Uint32 key); | ||||
|  | ||||
| /** | ||||
|  *  \brief Gets the color key (transparent pixel) in a blittable surface. | ||||
|  * | ||||
|  *  \param surface The surface to update | ||||
|  *  \param key A pointer filled in with the transparent pixel in the native | ||||
|  *             surface format | ||||
|  * | ||||
|  *  \return 0 on success, or -1 if the surface is not valid or colorkey is not | ||||
|  *          enabled. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_GetColorKey(SDL_Surface * surface, | ||||
|                                             Uint32 * key); | ||||
|  | ||||
| /** | ||||
|  *  \brief Set an additional color value used in blit operations. | ||||
|  * | ||||
|  *  \param surface The surface to update. | ||||
|  *  \param r The red color value multiplied into blit operations. | ||||
|  *  \param g The green color value multiplied into blit operations. | ||||
|  *  \param b The blue color value multiplied into blit operations. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 if the surface is not valid. | ||||
|  * | ||||
|  *  \sa SDL_GetSurfaceColorMod() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_SetSurfaceColorMod(SDL_Surface * surface, | ||||
|                                                    Uint8 r, Uint8 g, Uint8 b); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the additional color value used in blit operations. | ||||
|  * | ||||
|  *  \param surface The surface to query. | ||||
|  *  \param r A pointer filled in with the current red color value. | ||||
|  *  \param g A pointer filled in with the current green color value. | ||||
|  *  \param b A pointer filled in with the current blue color value. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 if the surface is not valid. | ||||
|  * | ||||
|  *  \sa SDL_SetSurfaceColorMod() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_GetSurfaceColorMod(SDL_Surface * surface, | ||||
|                                                    Uint8 * r, Uint8 * g, | ||||
|                                                    Uint8 * b); | ||||
|  | ||||
| /** | ||||
|  *  \brief Set an additional alpha value used in blit operations. | ||||
|  * | ||||
|  *  \param surface The surface to update. | ||||
|  *  \param alpha The alpha value multiplied into blit operations. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 if the surface is not valid. | ||||
|  * | ||||
|  *  \sa SDL_GetSurfaceAlphaMod() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_SetSurfaceAlphaMod(SDL_Surface * surface, | ||||
|                                                    Uint8 alpha); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the additional alpha value used in blit operations. | ||||
|  * | ||||
|  *  \param surface The surface to query. | ||||
|  *  \param alpha A pointer filled in with the current alpha value. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 if the surface is not valid. | ||||
|  * | ||||
|  *  \sa SDL_SetSurfaceAlphaMod() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_GetSurfaceAlphaMod(SDL_Surface * surface, | ||||
|                                                    Uint8 * alpha); | ||||
|  | ||||
| /** | ||||
|  *  \brief Set the blend mode used for blit operations. | ||||
|  * | ||||
|  *  \param surface The surface to update. | ||||
|  *  \param blendMode ::SDL_BlendMode to use for blit blending. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 if the parameters are not valid. | ||||
|  * | ||||
|  *  \sa SDL_GetSurfaceBlendMode() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_SetSurfaceBlendMode(SDL_Surface * surface, | ||||
|                                                     SDL_BlendMode blendMode); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the blend mode used for blit operations. | ||||
|  * | ||||
|  *  \param surface   The surface to query. | ||||
|  *  \param blendMode A pointer filled in with the current blend mode. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 if the surface is not valid. | ||||
|  * | ||||
|  *  \sa SDL_SetSurfaceBlendMode() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_GetSurfaceBlendMode(SDL_Surface * surface, | ||||
|                                                     SDL_BlendMode *blendMode); | ||||
|  | ||||
| /** | ||||
|  *  Sets the clipping rectangle for the destination surface in a blit. | ||||
|  * | ||||
|  *  If the clip rectangle is NULL, clipping will be disabled. | ||||
|  * | ||||
|  *  If the clip rectangle doesn't intersect the surface, the function will | ||||
|  *  return SDL_FALSE and blits will be completely clipped.  Otherwise the | ||||
|  *  function returns SDL_TRUE and blits to the surface will be clipped to | ||||
|  *  the intersection of the surface area and the clipping rectangle. | ||||
|  * | ||||
|  *  Note that blits are automatically clipped to the edges of the source | ||||
|  *  and destination surfaces. | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_SetClipRect(SDL_Surface * surface, | ||||
|                                                  const SDL_Rect * rect); | ||||
|  | ||||
| /** | ||||
|  *  Gets the clipping rectangle for the destination surface in a blit. | ||||
|  * | ||||
|  *  \c rect must be a pointer to a valid rectangle which will be filled | ||||
|  *  with the correct values. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_GetClipRect(SDL_Surface * surface, | ||||
|                                              SDL_Rect * rect); | ||||
|  | ||||
| /** | ||||
|  *  Creates a new surface of the specified format, and then copies and maps | ||||
|  *  the given surface to it so the blit of the converted surface will be as | ||||
|  *  fast as possible.  If this function fails, it returns NULL. | ||||
|  * | ||||
|  *  The \c flags parameter is passed to SDL_CreateRGBSurface() and has those | ||||
|  *  semantics.  You can also pass ::SDL_RLEACCEL in the flags parameter and | ||||
|  *  SDL will try to RLE accelerate colorkey and alpha blits in the resulting | ||||
|  *  surface. | ||||
|  */ | ||||
| extern DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurface | ||||
|     (SDL_Surface * src, const SDL_PixelFormat * fmt, Uint32 flags); | ||||
| extern DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurfaceFormat | ||||
|     (SDL_Surface * src, Uint32 pixel_format, Uint32 flags); | ||||
|  | ||||
| /** | ||||
|  * \brief Copy a block of pixels of one format to another format | ||||
|  * | ||||
|  *  \return 0 on success, or -1 if there was an error | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_ConvertPixels(int width, int height, | ||||
|                                               Uint32 src_format, | ||||
|                                               const void * src, int src_pitch, | ||||
|                                               Uint32 dst_format, | ||||
|                                               void * dst, int dst_pitch); | ||||
|  | ||||
| /** | ||||
|  *  Performs a fast fill of the given rectangle with \c color. | ||||
|  * | ||||
|  *  If \c rect is NULL, the whole surface will be filled with \c color. | ||||
|  * | ||||
|  *  The color should be a pixel of the format used by the surface, and | ||||
|  *  can be generated by the SDL_MapRGB() function. | ||||
|  * | ||||
|  *  \return 0 on success, or -1 on error. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_FillRect | ||||
|     (SDL_Surface * dst, const SDL_Rect * rect, Uint32 color); | ||||
| extern DECLSPEC int SDLCALL SDL_FillRects | ||||
|     (SDL_Surface * dst, const SDL_Rect * rects, int count, Uint32 color); | ||||
|  | ||||
| /** | ||||
|  *  Performs a fast blit from the source surface to the destination surface. | ||||
|  * | ||||
|  *  This assumes that the source and destination rectangles are | ||||
|  *  the same size.  If either \c srcrect or \c dstrect are NULL, the entire | ||||
|  *  surface (\c src or \c dst) is copied.  The final blit rectangles are saved | ||||
|  *  in \c srcrect and \c dstrect after all clipping is performed. | ||||
|  * | ||||
|  *  \return If the blit is successful, it returns 0, otherwise it returns -1. | ||||
|  * | ||||
|  *  The blit function should not be called on a locked surface. | ||||
|  * | ||||
|  *  The blit semantics for surfaces with and without blending and colorkey | ||||
|  *  are defined as follows: | ||||
|  *  \verbatim | ||||
|     RGBA->RGB: | ||||
|       Source surface blend mode set to SDL_BLENDMODE_BLEND: | ||||
|         alpha-blend (using the source alpha-channel and per-surface alpha) | ||||
|         SDL_SRCCOLORKEY ignored. | ||||
|       Source surface blend mode set to SDL_BLENDMODE_NONE: | ||||
|         copy RGB. | ||||
|         if SDL_SRCCOLORKEY set, only copy the pixels matching the | ||||
|         RGB values of the source color key, ignoring alpha in the | ||||
|         comparison. | ||||
|  | ||||
|     RGB->RGBA: | ||||
|       Source surface blend mode set to SDL_BLENDMODE_BLEND: | ||||
|         alpha-blend (using the source per-surface alpha) | ||||
|       Source surface blend mode set to SDL_BLENDMODE_NONE: | ||||
|         copy RGB, set destination alpha to source per-surface alpha value. | ||||
|       both: | ||||
|         if SDL_SRCCOLORKEY set, only copy the pixels matching the | ||||
|         source color key. | ||||
|  | ||||
|     RGBA->RGBA: | ||||
|       Source surface blend mode set to SDL_BLENDMODE_BLEND: | ||||
|         alpha-blend (using the source alpha-channel and per-surface alpha) | ||||
|         SDL_SRCCOLORKEY ignored. | ||||
|       Source surface blend mode set to SDL_BLENDMODE_NONE: | ||||
|         copy all of RGBA to the destination. | ||||
|         if SDL_SRCCOLORKEY set, only copy the pixels matching the | ||||
|         RGB values of the source color key, ignoring alpha in the | ||||
|         comparison. | ||||
|  | ||||
|     RGB->RGB: | ||||
|       Source surface blend mode set to SDL_BLENDMODE_BLEND: | ||||
|         alpha-blend (using the source per-surface alpha) | ||||
|       Source surface blend mode set to SDL_BLENDMODE_NONE: | ||||
|         copy RGB. | ||||
|       both: | ||||
|         if SDL_SRCCOLORKEY set, only copy the pixels matching the | ||||
|         source color key. | ||||
|     \endverbatim | ||||
|  * | ||||
|  *  You should call SDL_BlitSurface() unless you know exactly how SDL | ||||
|  *  blitting works internally and how to use the other blit functions. | ||||
|  */ | ||||
| #define SDL_BlitSurface SDL_UpperBlit | ||||
|  | ||||
| /** | ||||
|  *  This is the public blit function, SDL_BlitSurface(), and it performs | ||||
|  *  rectangle validation and clipping before passing it to SDL_LowerBlit() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_UpperBlit | ||||
|     (SDL_Surface * src, const SDL_Rect * srcrect, | ||||
|      SDL_Surface * dst, SDL_Rect * dstrect); | ||||
|  | ||||
| /** | ||||
|  *  This is a semi-private blit function and it performs low-level surface | ||||
|  *  blitting only. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_LowerBlit | ||||
|     (SDL_Surface * src, SDL_Rect * srcrect, | ||||
|      SDL_Surface * dst, SDL_Rect * dstrect); | ||||
|  | ||||
| /** | ||||
|  *  \brief Perform a fast, low quality, stretch blit between two surfaces of the | ||||
|  *         same pixel format. | ||||
|  * | ||||
|  *  \note This function uses a static buffer, and is not thread-safe. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_SoftStretch(SDL_Surface * src, | ||||
|                                             const SDL_Rect * srcrect, | ||||
|                                             SDL_Surface * dst, | ||||
|                                             const SDL_Rect * dstrect); | ||||
|  | ||||
| #define SDL_BlitScaled SDL_UpperBlitScaled | ||||
|  | ||||
| /** | ||||
|  *  This is the public scaled blit function, SDL_BlitScaled(), and it performs | ||||
|  *  rectangle validation and clipping before passing it to SDL_LowerBlitScaled() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_UpperBlitScaled | ||||
|     (SDL_Surface * src, const SDL_Rect * srcrect, | ||||
|     SDL_Surface * dst, SDL_Rect * dstrect); | ||||
|  | ||||
| /** | ||||
|  *  This is a semi-private blit function and it performs low-level surface | ||||
|  *  scaled blitting only. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_LowerBlitScaled | ||||
|     (SDL_Surface * src, SDL_Rect * srcrect, | ||||
|     SDL_Surface * dst, SDL_Rect * dstrect); | ||||
|  | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_surface_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,216 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_system.h | ||||
|  * | ||||
|  *  Include file for platform specific SDL API functions | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_system_h | ||||
| #define _SDL_system_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
| #include "SDL_keyboard.h" | ||||
| #include "SDL_render.h" | ||||
| #include "SDL_video.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
|  | ||||
| /* Platform specific functions for Windows */ | ||||
| #ifdef __WIN32__ | ||||
| 	 | ||||
| /** | ||||
|    \brief Set a function that is called for every windows message, before TranslateMessage() | ||||
| */ | ||||
| typedef void (SDLCALL * SDL_WindowsMessageHook)(void *userdata, void *hWnd, unsigned int message, Uint64 wParam, Sint64 lParam); | ||||
| extern DECLSPEC void SDLCALL SDL_SetWindowsMessageHook(SDL_WindowsMessageHook callback, void *userdata); | ||||
|  | ||||
| /** | ||||
|    \brief Returns the D3D9 adapter index that matches the specified display index. | ||||
|  | ||||
|    This adapter index can be passed to IDirect3D9::CreateDevice and controls | ||||
|    on which monitor a full screen application will appear. | ||||
| */ | ||||
| extern DECLSPEC int SDLCALL SDL_Direct3D9GetAdapterIndex( int displayIndex ); | ||||
|  | ||||
| typedef struct IDirect3DDevice9 IDirect3DDevice9; | ||||
| /** | ||||
|    \brief Returns the D3D device associated with a renderer, or NULL if it's not a D3D renderer. | ||||
|  | ||||
|    Once you are done using the device, you should release it to avoid a resource leak. | ||||
|  */ | ||||
| extern DECLSPEC IDirect3DDevice9* SDLCALL SDL_RenderGetD3D9Device(SDL_Renderer * renderer); | ||||
|  | ||||
| /** | ||||
|    \brief Returns the DXGI Adapter and Output indices for the specified display index. | ||||
|  | ||||
|    These can be passed to EnumAdapters and EnumOutputs respectively to get the objects | ||||
|    required to create a DX10 or DX11 device and swap chain. | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_DXGIGetOutputInfo( int displayIndex, int *adapterIndex, int *outputIndex ); | ||||
|  | ||||
| #endif /* __WIN32__ */ | ||||
|  | ||||
|  | ||||
| /* Platform specific functions for iOS */ | ||||
| #if defined(__IPHONEOS__) && __IPHONEOS__ | ||||
|  | ||||
| #define SDL_iOSSetAnimationCallback(window, interval, callback, callbackParam) SDL_iPhoneSetAnimationCallback(window, interval, callback, callbackParam) | ||||
| extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (*callback)(void*), void *callbackParam); | ||||
|  | ||||
| #define SDL_iOSSetEventPump(enabled) SDL_iPhoneSetEventPump(enabled) | ||||
| extern DECLSPEC void SDLCALL SDL_iPhoneSetEventPump(SDL_bool enabled); | ||||
|  | ||||
| #endif /* __IPHONEOS__ */ | ||||
|  | ||||
|  | ||||
| /* Platform specific functions for Android */ | ||||
| #if defined(__ANDROID__) && __ANDROID__ | ||||
|  | ||||
| /** | ||||
|    \brief Get the JNI environment for the current thread | ||||
|  | ||||
|    This returns JNIEnv*, but the prototype is void* so we don't need jni.h | ||||
|  */ | ||||
| extern DECLSPEC void * SDLCALL SDL_AndroidGetJNIEnv(); | ||||
|  | ||||
| /** | ||||
|    \brief Get the SDL Activity object for the application | ||||
|  | ||||
|    This returns jobject, but the prototype is void* so we don't need jni.h | ||||
|    The jobject returned by SDL_AndroidGetActivity is a local reference. | ||||
|    It is the caller's responsibility to properly release it | ||||
|    (using env->Push/PopLocalFrame or manually with env->DeleteLocalRef) | ||||
|  */ | ||||
| extern DECLSPEC void * SDLCALL SDL_AndroidGetActivity(); | ||||
|  | ||||
| /** | ||||
|    See the official Android developer guide for more information: | ||||
|    http://developer.android.com/guide/topics/data/data-storage.html | ||||
| */ | ||||
| #define SDL_ANDROID_EXTERNAL_STORAGE_READ   0x01 | ||||
| #define SDL_ANDROID_EXTERNAL_STORAGE_WRITE  0x02 | ||||
|  | ||||
| /** | ||||
|    \brief Get the path used for internal storage for this application. | ||||
|  | ||||
|    This path is unique to your application and cannot be written to | ||||
|    by other applications. | ||||
|  */ | ||||
| extern DECLSPEC const char * SDLCALL SDL_AndroidGetInternalStoragePath(); | ||||
|  | ||||
| /** | ||||
|    \brief Get the current state of external storage, a bitmask of these values: | ||||
|     SDL_ANDROID_EXTERNAL_STORAGE_READ | ||||
|     SDL_ANDROID_EXTERNAL_STORAGE_WRITE | ||||
|  | ||||
|    If external storage is currently unavailable, this will return 0. | ||||
| */ | ||||
| extern DECLSPEC int SDLCALL SDL_AndroidGetExternalStorageState(); | ||||
|  | ||||
| /** | ||||
|    \brief Get the path used for external storage for this application. | ||||
|  | ||||
|    This path is unique to your application, but is public and can be | ||||
|    written to by other applications. | ||||
|  */ | ||||
| extern DECLSPEC const char * SDLCALL SDL_AndroidGetExternalStoragePath(); | ||||
|  | ||||
| #endif /* __ANDROID__ */ | ||||
|  | ||||
| /* Platform specific functions for WinRT */ | ||||
| #if defined(__WINRT__) && __WINRT__ | ||||
|  | ||||
| /** | ||||
|  *  \brief WinRT / Windows Phone path types | ||||
|  */ | ||||
| typedef enum | ||||
| { | ||||
|     /** \brief The installed app's root directory. | ||||
|         Files here are likely to be read-only. */ | ||||
|     SDL_WINRT_PATH_INSTALLED_LOCATION, | ||||
|  | ||||
|     /** \brief The app's local data store.  Files may be written here */ | ||||
|     SDL_WINRT_PATH_LOCAL_FOLDER, | ||||
|  | ||||
|     /** \brief The app's roaming data store.  Unsupported on Windows Phone. | ||||
|         Files written here may be copied to other machines via a network | ||||
|         connection. | ||||
|     */ | ||||
|     SDL_WINRT_PATH_ROAMING_FOLDER, | ||||
|  | ||||
|     /** \brief The app's temporary data store.  Unsupported on Windows Phone. | ||||
|         Files written here may be deleted at any time. */ | ||||
|     SDL_WINRT_PATH_TEMP_FOLDER | ||||
| } SDL_WinRT_Path; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \brief Retrieves a WinRT defined path on the local file system | ||||
|  * | ||||
|  *  \note Documentation on most app-specific path types on WinRT | ||||
|  *      can be found on MSDN, at the URL: | ||||
|  *      http://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx | ||||
|  * | ||||
|  *  \param pathType The type of path to retrieve. | ||||
|  *  \return A UCS-2 string (16-bit, wide-char) containing the path, or NULL | ||||
|  *      if the path is not available for any reason.  Not all paths are | ||||
|  *      available on all versions of Windows.  This is especially true on | ||||
|  *      Windows Phone.  Check the documentation for the given | ||||
|  *      SDL_WinRT_Path for more information on which path types are | ||||
|  *      supported where. | ||||
|  */ | ||||
| extern DECLSPEC const wchar_t * SDLCALL SDL_WinRTGetFSPathUNICODE(SDL_WinRT_Path pathType); | ||||
|  | ||||
| /** | ||||
|  *  \brief Retrieves a WinRT defined path on the local file system | ||||
|  * | ||||
|  *  \note Documentation on most app-specific path types on WinRT | ||||
|  *      can be found on MSDN, at the URL: | ||||
|  *      http://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx | ||||
|  * | ||||
|  *  \param pathType The type of path to retrieve. | ||||
|  *  \return A UTF-8 string (8-bit, multi-byte) containing the path, or NULL | ||||
|  *      if the path is not available for any reason.  Not all paths are | ||||
|  *      available on all versions of Windows.  This is especially true on | ||||
|  *      Windows Phone.  Check the documentation for the given | ||||
|  *      SDL_WinRT_Path for more information on which path types are | ||||
|  *      supported where. | ||||
|  */ | ||||
| extern DECLSPEC const char * SDLCALL SDL_WinRTGetFSPathUTF8(SDL_WinRT_Path pathType); | ||||
|  | ||||
| #endif /* __WINRT__ */ | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_system_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,301 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_syswm.h | ||||
|  * | ||||
|  *  Include file for SDL custom system window manager hooks. | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_syswm_h | ||||
| #define _SDL_syswm_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
| #include "SDL_error.h" | ||||
| #include "SDL_video.h" | ||||
| #include "SDL_version.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_syswm.h | ||||
|  * | ||||
|  *  Your application has access to a special type of event ::SDL_SYSWMEVENT, | ||||
|  *  which contains window-manager specific information and arrives whenever | ||||
|  *  an unhandled window event occurs.  This event is ignored by default, but | ||||
|  *  you can enable it with SDL_EventState(). | ||||
|  */ | ||||
| #ifdef SDL_PROTOTYPES_ONLY | ||||
| struct SDL_SysWMinfo; | ||||
| #else | ||||
|  | ||||
| #if defined(SDL_VIDEO_DRIVER_WINDOWS) | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| #define WIN32_LEAN_AND_MEAN | ||||
| #endif | ||||
| #include <windows.h> | ||||
| #endif | ||||
|  | ||||
| #if defined(SDL_VIDEO_DRIVER_WINRT) | ||||
| #include <Inspectable.h> | ||||
| #endif | ||||
|  | ||||
| /* This is the structure for custom window manager events */ | ||||
| #if defined(SDL_VIDEO_DRIVER_X11) | ||||
| #if defined(__APPLE__) && defined(__MACH__) | ||||
| /* conflicts with Quickdraw.h */ | ||||
| #define Cursor X11Cursor | ||||
| #endif | ||||
|  | ||||
| #include <X11/Xlib.h> | ||||
| #include <X11/Xatom.h> | ||||
|  | ||||
| #if defined(__APPLE__) && defined(__MACH__) | ||||
| /* matches the re-define above */ | ||||
| #undef Cursor | ||||
| #endif | ||||
|  | ||||
| #endif /* defined(SDL_VIDEO_DRIVER_X11) */ | ||||
|  | ||||
| #if defined(SDL_VIDEO_DRIVER_DIRECTFB) | ||||
| #include <directfb.h> | ||||
| #endif | ||||
|  | ||||
| #if defined(SDL_VIDEO_DRIVER_COCOA) | ||||
| #ifdef __OBJC__ | ||||
| @class NSWindow; | ||||
| #else | ||||
| typedef struct _NSWindow NSWindow; | ||||
| #endif | ||||
| #endif | ||||
|  | ||||
| #if defined(SDL_VIDEO_DRIVER_UIKIT) | ||||
| #ifdef __OBJC__ | ||||
| #include <UIKit/UIKit.h> | ||||
| #else | ||||
| typedef struct _UIWindow UIWindow; | ||||
| typedef struct _UIViewController UIViewController; | ||||
| #endif | ||||
| typedef Uint32 GLuint; | ||||
| #endif | ||||
|  | ||||
| #if defined(SDL_VIDEO_DRIVER_ANDROID) | ||||
| typedef struct ANativeWindow ANativeWindow; | ||||
| typedef void *EGLSurface; | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  *  These are the various supported windowing subsystems | ||||
|  */ | ||||
| typedef enum | ||||
| { | ||||
|     SDL_SYSWM_UNKNOWN, | ||||
|     SDL_SYSWM_WINDOWS, | ||||
|     SDL_SYSWM_X11, | ||||
|     SDL_SYSWM_DIRECTFB, | ||||
|     SDL_SYSWM_COCOA, | ||||
|     SDL_SYSWM_UIKIT, | ||||
|     SDL_SYSWM_WAYLAND, | ||||
|     SDL_SYSWM_MIR, | ||||
|     SDL_SYSWM_WINRT, | ||||
|     SDL_SYSWM_ANDROID | ||||
| } SDL_SYSWM_TYPE; | ||||
|  | ||||
| /** | ||||
|  *  The custom event structure. | ||||
|  */ | ||||
| struct SDL_SysWMmsg | ||||
| { | ||||
|     SDL_version version; | ||||
|     SDL_SYSWM_TYPE subsystem; | ||||
|     union | ||||
|     { | ||||
| #if defined(SDL_VIDEO_DRIVER_WINDOWS) | ||||
|         struct { | ||||
|             HWND hwnd;                  /**< The window for the message */ | ||||
|             UINT msg;                   /**< The type of message */ | ||||
|             WPARAM wParam;              /**< WORD message parameter */ | ||||
|             LPARAM lParam;              /**< LONG message parameter */ | ||||
|         } win; | ||||
| #endif | ||||
| #if defined(SDL_VIDEO_DRIVER_X11) | ||||
|         struct { | ||||
|             XEvent event; | ||||
|         } x11; | ||||
| #endif | ||||
| #if defined(SDL_VIDEO_DRIVER_DIRECTFB) | ||||
|         struct { | ||||
|             DFBEvent event; | ||||
|         } dfb; | ||||
| #endif | ||||
| #if defined(SDL_VIDEO_DRIVER_COCOA) | ||||
|         struct | ||||
|         { | ||||
|             /* Latest version of Xcode clang complains about empty structs in C v. C++: | ||||
|                  error: empty struct has size 0 in C, size 1 in C++ | ||||
|              */ | ||||
|             int dummy; | ||||
|             /* No Cocoa window events yet */ | ||||
|         } cocoa; | ||||
| #endif | ||||
| #if defined(SDL_VIDEO_DRIVER_UIKIT) | ||||
|         struct | ||||
|         { | ||||
|             int dummy; | ||||
|             /* No UIKit window events yet */ | ||||
|         } uikit; | ||||
| #endif | ||||
|         /* Can't have an empty union */ | ||||
|         int dummy; | ||||
|     } msg; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  *  The custom window manager information structure. | ||||
|  * | ||||
|  *  When this structure is returned, it holds information about which | ||||
|  *  low level system it is using, and will be one of SDL_SYSWM_TYPE. | ||||
|  */ | ||||
| struct SDL_SysWMinfo | ||||
| { | ||||
|     SDL_version version; | ||||
|     SDL_SYSWM_TYPE subsystem; | ||||
|     union | ||||
|     { | ||||
| #if defined(SDL_VIDEO_DRIVER_WINDOWS) | ||||
|         struct | ||||
|         { | ||||
|             HWND window;                /**< The window handle */ | ||||
|             HDC hdc;                    /**< The window device context */ | ||||
|         } win; | ||||
| #endif | ||||
| #if defined(SDL_VIDEO_DRIVER_WINRT) | ||||
|         struct | ||||
|         { | ||||
|             IInspectable * window;      /**< The WinRT CoreWindow */ | ||||
|         } winrt; | ||||
| #endif | ||||
| #if defined(SDL_VIDEO_DRIVER_X11) | ||||
|         struct | ||||
|         { | ||||
|             Display *display;           /**< The X11 display */ | ||||
|             Window window;              /**< The X11 window */ | ||||
|         } x11; | ||||
| #endif | ||||
| #if defined(SDL_VIDEO_DRIVER_DIRECTFB) | ||||
|         struct | ||||
|         { | ||||
|             IDirectFB *dfb;             /**< The directfb main interface */ | ||||
|             IDirectFBWindow *window;    /**< The directfb window handle */ | ||||
|             IDirectFBSurface *surface;  /**< The directfb client surface */ | ||||
|         } dfb; | ||||
| #endif | ||||
| #if defined(SDL_VIDEO_DRIVER_COCOA) | ||||
|         struct | ||||
|         { | ||||
| #if defined(__OBJC__) && defined(__has_feature) && __has_feature(objc_arc) | ||||
|             NSWindow __unsafe_unretained *window; /* The Cocoa window */ | ||||
| #else | ||||
|             NSWindow *window;                     /* The Cocoa window */ | ||||
| #endif | ||||
|         } cocoa; | ||||
| #endif | ||||
| #if defined(SDL_VIDEO_DRIVER_UIKIT) | ||||
|         struct | ||||
|         { | ||||
| #if defined(__OBJC__) && defined(__has_feature) && __has_feature(objc_arc) | ||||
|             UIWindow __unsafe_unretained *window; /* The UIKit window */ | ||||
| #else | ||||
|             UIWindow *window;                     /* The UIKit window */ | ||||
| #endif | ||||
|             GLuint framebuffer; /* The GL view's Framebuffer Object. It must be bound when rendering to the screen using GL. */ | ||||
|             GLuint colorbuffer; /* The GL view's color Renderbuffer Object. It must be bound when SDL_GL_SwapWindow is called. */ | ||||
|             GLuint resolveFramebuffer; /* The Framebuffer Object which holds the resolve color Renderbuffer, when MSAA is used. */ | ||||
|         } uikit; | ||||
| #endif | ||||
| #if defined(SDL_VIDEO_DRIVER_WAYLAND) | ||||
|         struct | ||||
|         { | ||||
|             struct wl_display *display;            /**< Wayland display */ | ||||
|             struct wl_surface *surface;            /**< Wayland surface */ | ||||
|             struct wl_shell_surface *shell_surface; /**< Wayland shell_surface (window manager handle) */ | ||||
|         } wl; | ||||
| #endif | ||||
| #if defined(SDL_VIDEO_DRIVER_MIR) | ||||
|         struct | ||||
|         { | ||||
|             struct MirConnection *connection;  /**< Mir display server connection */ | ||||
|             struct MirSurface *surface;  /**< Mir surface */ | ||||
|         } mir; | ||||
| #endif | ||||
|  | ||||
| #if defined(SDL_VIDEO_DRIVER_ANDROID) | ||||
|         struct | ||||
|         { | ||||
|             ANativeWindow *window; | ||||
|             EGLSurface surface; | ||||
|         } android; | ||||
| #endif | ||||
|  | ||||
|         /* Can't have an empty union */ | ||||
|         int dummy; | ||||
|     } info; | ||||
| }; | ||||
|  | ||||
| #endif /* SDL_PROTOTYPES_ONLY */ | ||||
|  | ||||
| typedef struct SDL_SysWMinfo SDL_SysWMinfo; | ||||
|  | ||||
| /* Function prototypes */ | ||||
| /** | ||||
|  *  \brief This function allows access to driver-dependent window information. | ||||
|  * | ||||
|  *  \param window The window about which information is being requested | ||||
|  *  \param info This structure must be initialized with the SDL version, and is | ||||
|  *              then filled in with information about the given window. | ||||
|  * | ||||
|  *  \return SDL_TRUE if the function is implemented and the version member of | ||||
|  *          the \c info struct is valid, SDL_FALSE otherwise. | ||||
|  * | ||||
|  *  You typically use this function like this: | ||||
|  *  \code | ||||
|  *  SDL_SysWMinfo info; | ||||
|  *  SDL_VERSION(&info.version); | ||||
|  *  if ( SDL_GetWindowWMInfo(window, &info) ) { ... } | ||||
|  *  \endcode | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowWMInfo(SDL_Window * window, | ||||
|                                                      SDL_SysWMinfo * info); | ||||
|  | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_syswm_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,68 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_test.h | ||||
|  * | ||||
|  *  Include file for SDL test framework. | ||||
|  * | ||||
|  *  This code is a part of the SDL2_test library, not the main SDL library. | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_test_h | ||||
| #define _SDL_test_h | ||||
|  | ||||
| #include "SDL.h" | ||||
| #include "SDL_test_common.h" | ||||
| #include "SDL_test_font.h" | ||||
| #include "SDL_test_random.h" | ||||
| #include "SDL_test_fuzzer.h" | ||||
| #include "SDL_test_crc32.h" | ||||
| #include "SDL_test_md5.h" | ||||
| #include "SDL_test_log.h" | ||||
| #include "SDL_test_assert.h" | ||||
| #include "SDL_test_harness.h" | ||||
| #include "SDL_test_images.h" | ||||
| #include "SDL_test_compare.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /* Global definitions */ | ||||
|  | ||||
| /* | ||||
|  * Note: Maximum size of SDLTest log message is less than SDL's limit | ||||
|  * to ensure we can fit additional information such as the timestamp. | ||||
|  */ | ||||
| #define SDLTEST_MAX_LOGMESSAGE_LENGTH   3584 | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_test_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,105 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_test_assert.h | ||||
|  * | ||||
|  *  Include file for SDL test framework. | ||||
|  * | ||||
|  *  This code is a part of the SDL2_test library, not the main SDL library. | ||||
|  */ | ||||
|  | ||||
| /* | ||||
|  * | ||||
|  * Assert API for test code and test cases | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_test_assert_h | ||||
| #define _SDL_test_assert_h | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  * \brief Fails the assert. | ||||
|  */ | ||||
| #define ASSERT_FAIL     0 | ||||
|  | ||||
| /** | ||||
|  * \brief Passes the assert. | ||||
|  */ | ||||
| #define ASSERT_PASS     1 | ||||
|  | ||||
| /** | ||||
|  * \brief Assert that logs and break execution flow on failures. | ||||
|  * | ||||
|  * \param assertCondition Evaluated condition or variable to assert; fail (==0) or pass (!=0). | ||||
|  * \param assertDescription Message to log with the assert describing it. | ||||
|  */ | ||||
| void SDLTest_Assert(int assertCondition, SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...) SDL_PRINTF_VARARG_FUNC(2); | ||||
|  | ||||
| /** | ||||
|  * \brief Assert for test cases that logs but does not break execution flow on failures. Updates assertion counters. | ||||
|  * | ||||
|  * \param assertCondition Evaluated condition or variable to assert; fail (==0) or pass (!=0). | ||||
|  * \param assertDescription Message to log with the assert describing it. | ||||
|  * | ||||
|  * \returns Returns the assertCondition so it can be used to externally to break execution flow if desired. | ||||
|  */ | ||||
| int SDLTest_AssertCheck(int assertCondition, SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...) SDL_PRINTF_VARARG_FUNC(2); | ||||
|  | ||||
| /** | ||||
|  * \brief Explicitly pass without checking an assertion condition. Updates assertion counter. | ||||
|  * | ||||
|  * \param assertDescription Message to log with the assert describing it. | ||||
|  */ | ||||
| void SDLTest_AssertPass(SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...) SDL_PRINTF_VARARG_FUNC(1); | ||||
|  | ||||
| /** | ||||
|  * \brief Resets the assert summary counters to zero. | ||||
|  */ | ||||
| void SDLTest_ResetAssertSummary(); | ||||
|  | ||||
| /** | ||||
|  * \brief Logs summary of all assertions (total, pass, fail) since last reset as INFO or ERROR. | ||||
|  */ | ||||
| void SDLTest_LogAssertSummary(); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * \brief Converts the current assert summary state to a test result. | ||||
|  * | ||||
|  * \returns TEST_RESULT_PASSED, TEST_RESULT_FAILED, or TEST_RESULT_NO_ASSERT | ||||
|  */ | ||||
| int SDLTest_AssertSummaryToTestResult(); | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_test_assert_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,188 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_test_common.h | ||||
|  * | ||||
|  *  Include file for SDL test framework. | ||||
|  * | ||||
|  *  This code is a part of the SDL2_test library, not the main SDL library. | ||||
|  */ | ||||
|  | ||||
| /* Ported from original test\common.h file. */ | ||||
|  | ||||
| #ifndef _SDL_test_common_h | ||||
| #define _SDL_test_common_h | ||||
|  | ||||
| #include "SDL.h" | ||||
|  | ||||
| #if defined(__PSP__) | ||||
| #define DEFAULT_WINDOW_WIDTH  480 | ||||
| #define DEFAULT_WINDOW_HEIGHT 272 | ||||
| #else | ||||
| #define DEFAULT_WINDOW_WIDTH  640 | ||||
| #define DEFAULT_WINDOW_HEIGHT 480 | ||||
| #endif | ||||
|  | ||||
| #define VERBOSE_VIDEO   0x00000001 | ||||
| #define VERBOSE_MODES   0x00000002 | ||||
| #define VERBOSE_RENDER  0x00000004 | ||||
| #define VERBOSE_EVENT   0x00000008 | ||||
| #define VERBOSE_AUDIO   0x00000010 | ||||
|  | ||||
| typedef struct | ||||
| { | ||||
|     /* SDL init flags */ | ||||
|     char **argv; | ||||
|     Uint32 flags; | ||||
|     Uint32 verbose; | ||||
|  | ||||
|     /* Video info */ | ||||
|     const char *videodriver; | ||||
|     int display; | ||||
|     const char *window_title; | ||||
|     const char *window_icon; | ||||
|     Uint32 window_flags; | ||||
|     int window_x; | ||||
|     int window_y; | ||||
|     int window_w; | ||||
|     int window_h; | ||||
|     int window_minW; | ||||
|     int window_minH; | ||||
|     int window_maxW; | ||||
|     int window_maxH; | ||||
|     int logical_w; | ||||
|     int logical_h; | ||||
|     float scale; | ||||
|     int depth; | ||||
|     int refresh_rate; | ||||
|     int num_windows; | ||||
|     SDL_Window **windows; | ||||
|  | ||||
|     /* Renderer info */ | ||||
|     const char *renderdriver; | ||||
|     Uint32 render_flags; | ||||
|     SDL_bool skip_renderer; | ||||
|     SDL_Renderer **renderers; | ||||
|     SDL_Texture **targets; | ||||
|  | ||||
|     /* Audio info */ | ||||
|     const char *audiodriver; | ||||
|     SDL_AudioSpec audiospec; | ||||
|  | ||||
|     /* GL settings */ | ||||
|     int gl_red_size; | ||||
|     int gl_green_size; | ||||
|     int gl_blue_size; | ||||
|     int gl_alpha_size; | ||||
|     int gl_buffer_size; | ||||
|     int gl_depth_size; | ||||
|     int gl_stencil_size; | ||||
|     int gl_double_buffer; | ||||
|     int gl_accum_red_size; | ||||
|     int gl_accum_green_size; | ||||
|     int gl_accum_blue_size; | ||||
|     int gl_accum_alpha_size; | ||||
|     int gl_stereo; | ||||
|     int gl_multisamplebuffers; | ||||
|     int gl_multisamplesamples; | ||||
|     int gl_retained_backing; | ||||
|     int gl_accelerated; | ||||
|     int gl_major_version; | ||||
|     int gl_minor_version; | ||||
|     int gl_debug; | ||||
|     int gl_profile_mask; | ||||
| } SDLTest_CommonState; | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /* Function prototypes */ | ||||
|  | ||||
| /** | ||||
|  * \brief Parse command line parameters and create common state. | ||||
|  * | ||||
|  * \param argv Array of command line parameters | ||||
|  * \param flags Flags indicating which subsystem to initialize (i.e. SDL_INIT_VIDEO | SDL_INIT_AUDIO) | ||||
|  * | ||||
|  * \returns Returns a newly allocated common state object. | ||||
|  */ | ||||
| SDLTest_CommonState *SDLTest_CommonCreateState(char **argv, Uint32 flags); | ||||
|  | ||||
| /** | ||||
|  * \brief Process one common argument. | ||||
|  * | ||||
|  * \param state The common state describing the test window to create. | ||||
|  * \param index The index of the argument to process in argv[]. | ||||
|  * | ||||
|  * \returns The number of arguments processed (i.e. 1 for --fullscreen, 2 for --video [videodriver], or -1 on error. | ||||
|  */ | ||||
| int SDLTest_CommonArg(SDLTest_CommonState * state, int index); | ||||
|  | ||||
| /** | ||||
|  * \brief Returns common usage information | ||||
|  * | ||||
|  * \param state The common state describing the test window to create. | ||||
|  * | ||||
|  * \returns String with usage information | ||||
|  */ | ||||
| const char *SDLTest_CommonUsage(SDLTest_CommonState * state); | ||||
|  | ||||
| /** | ||||
|  * \brief Open test window. | ||||
|  * | ||||
|  * \param state The common state describing the test window to create. | ||||
|  * | ||||
|  * \returns True if initialization succeeded, false otherwise | ||||
|  */ | ||||
| SDL_bool SDLTest_CommonInit(SDLTest_CommonState * state); | ||||
|  | ||||
| /** | ||||
|  * \brief Common event handler for test windows. | ||||
|  * | ||||
|  * \param state The common state used to create test window. | ||||
|  * \param event The event to handle. | ||||
|  * \param done Flag indicating we are done. | ||||
|  * | ||||
|  */ | ||||
| void SDLTest_CommonEvent(SDLTest_CommonState * state, SDL_Event * event, int *done); | ||||
|  | ||||
| /** | ||||
|  * \brief Close test window. | ||||
|  * | ||||
|  * \param state The common state used to create test window. | ||||
|  * | ||||
|  */ | ||||
| void SDLTest_CommonQuit(SDLTest_CommonState * state); | ||||
|  | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_test_common_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,69 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_test_compare.h | ||||
|  * | ||||
|  *  Include file for SDL test framework. | ||||
|  * | ||||
|  *  This code is a part of the SDL2_test library, not the main SDL library. | ||||
|  */ | ||||
|  | ||||
| /* | ||||
|  | ||||
|  Defines comparison functions (i.e. for surfaces). | ||||
|  | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_test_compare_h | ||||
| #define _SDL_test_compare_h | ||||
|  | ||||
| #include "SDL.h" | ||||
|  | ||||
| #include "SDL_test_images.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  * \brief Compares a surface and with reference image data for equality | ||||
|  * | ||||
|  * \param surface Surface used in comparison | ||||
|  * \param referenceSurface Test Surface used in comparison | ||||
|  * \param allowable_error Allowable difference (=sum of squared difference for each RGB component) in blending accuracy. | ||||
|  * | ||||
|  * \returns 0 if comparison succeeded, >0 (=number of pixels for which the comparison failed) if comparison failed, -1 if any of the surfaces were NULL, -2 if the surface sizes differ. | ||||
|  */ | ||||
| int SDLTest_CompareSurfaces(SDL_Surface *surface, SDL_Surface *referenceSurface, int allowable_error); | ||||
|  | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_test_compare_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,124 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_test_crc32.h | ||||
|  * | ||||
|  *  Include file for SDL test framework. | ||||
|  * | ||||
|  *  This code is a part of the SDL2_test library, not the main SDL library. | ||||
|  */ | ||||
|  | ||||
| /* | ||||
|  | ||||
|  Implements CRC32 calculations (default output is Perl String::CRC32 compatible). | ||||
|  | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_test_crc32_h | ||||
| #define _SDL_test_crc32_h | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
|  | ||||
| /* ------------ Definitions --------- */ | ||||
|  | ||||
| /* Definition shared by all CRC routines */ | ||||
|  | ||||
| #ifndef CrcUint32 | ||||
|  #define CrcUint32  unsigned int | ||||
| #endif | ||||
| #ifndef CrcUint8 | ||||
|  #define CrcUint8   unsigned char | ||||
| #endif | ||||
|  | ||||
| #ifdef ORIGINAL_METHOD | ||||
|  #define CRC32_POLY 0x04c11db7   /* AUTODIN II, Ethernet, & FDDI */ | ||||
| #else | ||||
|  #define CRC32_POLY 0xEDB88320   /* Perl String::CRC32 compatible */ | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  * Data structure for CRC32 (checksum) computation | ||||
|  */ | ||||
|   typedef struct { | ||||
|     CrcUint32    crc32_table[256]; /* CRC table */ | ||||
|   } SDLTest_Crc32Context; | ||||
|  | ||||
| /* ---------- Function Prototypes ------------- */ | ||||
|  | ||||
| /** | ||||
|  * \brief Initialize the CRC context | ||||
|  * | ||||
|  * Note: The function initializes the crc table required for all crc calculations. | ||||
|  * | ||||
|  * \param crcContext        pointer to context variable | ||||
|  * | ||||
|  * \returns 0 for OK, -1 on error | ||||
|  * | ||||
|  */ | ||||
|  int SDLTest_Crc32Init(SDLTest_Crc32Context * crcContext); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * \brief calculate a crc32 from a data block | ||||
|  * | ||||
|  * \param crcContext         pointer to context variable | ||||
|  * \param inBuf              input buffer to checksum | ||||
|  * \param inLen              length of input buffer | ||||
|  * \param crc32              pointer to Uint32 to store the final CRC into | ||||
|  * | ||||
|  * \returns 0 for OK, -1 on error | ||||
|  * | ||||
|  */ | ||||
| int SDLTest_crc32Calc(SDLTest_Crc32Context * crcContext, CrcUint8 *inBuf, CrcUint32 inLen, CrcUint32 *crc32); | ||||
|  | ||||
| /* Same routine broken down into three steps */ | ||||
| int SDLTest_Crc32CalcStart(SDLTest_Crc32Context * crcContext, CrcUint32 *crc32); | ||||
| int SDLTest_Crc32CalcEnd(SDLTest_Crc32Context * crcContext, CrcUint32 *crc32); | ||||
| int SDLTest_Crc32CalcBuffer(SDLTest_Crc32Context * crcContext, CrcUint8 *inBuf, CrcUint32 inLen, CrcUint32 *crc32); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * \brief clean up CRC context | ||||
|  * | ||||
|  * \param crcContext        pointer to context variable | ||||
|  * | ||||
|  * \returns 0 for OK, -1 on error | ||||
|  * | ||||
| */ | ||||
|  | ||||
| int SDLTest_Crc32Done(SDLTest_Crc32Context * crcContext); | ||||
|  | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_test_crc32_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,76 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_test_font.h | ||||
|  * | ||||
|  *  Include file for SDL test framework. | ||||
|  * | ||||
|  *  This code is a part of the SDL2_test library, not the main SDL library. | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_test_font_h | ||||
| #define _SDL_test_font_h | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /* Function prototypes */ | ||||
|  | ||||
| #define FONT_CHARACTER_SIZE  8 | ||||
|  | ||||
| /** | ||||
|  *  \brief Draw a string in the currently set font. | ||||
|  * | ||||
|  *  \param renderer The renderer to draw on. | ||||
|  *  \param x The X coordinate of the upper left corner of the character. | ||||
|  *  \param y The Y coordinate of the upper left corner of the character. | ||||
|  *  \param c The character to draw. | ||||
|  * | ||||
|  *  \returns Returns 0 on success, -1 on failure. | ||||
|  */ | ||||
| int SDLTest_DrawCharacter( SDL_Renderer *renderer, int x, int y, char c ); | ||||
|  | ||||
| /** | ||||
|  *  \brief Draw a string in the currently set font. | ||||
|  * | ||||
|  *  \param renderer The renderer to draw on. | ||||
|  *  \param x The X coordinate of the upper left corner of the string. | ||||
|  *  \param y The Y coordinate of the upper left corner of the string. | ||||
|  *  \param s The string to draw. | ||||
|  * | ||||
|  *  \returns Returns 0 on success, -1 on failure. | ||||
|  */ | ||||
| int SDLTest_DrawString( SDL_Renderer * renderer, int x, int y, const char *s ); | ||||
|  | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_test_font_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,384 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_test_fuzzer.h | ||||
|  * | ||||
|  *  Include file for SDL test framework. | ||||
|  * | ||||
|  *  This code is a part of the SDL2_test library, not the main SDL library. | ||||
|  */ | ||||
|  | ||||
| /* | ||||
|  | ||||
|   Data generators for fuzzing test data in a reproducible way. | ||||
|  | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_test_fuzzer_h | ||||
| #define _SDL_test_fuzzer_h | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
|  | ||||
| /* | ||||
|   Based on GSOC code by Markus Kauppila <markus.kauppila@gmail.com> | ||||
| */ | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * \file | ||||
|  * Note: The fuzzer implementation uses a static instance of random context | ||||
|  * internally which makes it thread-UNsafe. | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * Initializes the fuzzer for a test | ||||
|  * | ||||
|  * \param execKey Execution "Key" that initializes the random number generator uniquely for the test. | ||||
|  * | ||||
|  */ | ||||
| void SDLTest_FuzzerInit(Uint64 execKey); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Returns a random Uint8 | ||||
|  * | ||||
|  * \returns Generated integer | ||||
|  */ | ||||
| Uint8 SDLTest_RandomUint8(); | ||||
|  | ||||
| /** | ||||
|  * Returns a random Sint8 | ||||
|  * | ||||
|  * \returns Generated signed integer | ||||
|  */ | ||||
| Sint8 SDLTest_RandomSint8(); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Returns a random Uint16 | ||||
|  * | ||||
|  * \returns Generated integer | ||||
|  */ | ||||
| Uint16 SDLTest_RandomUint16(); | ||||
|  | ||||
| /** | ||||
|  * Returns a random Sint16 | ||||
|  * | ||||
|  * \returns Generated signed integer | ||||
|  */ | ||||
| Sint16 SDLTest_RandomSint16(); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Returns a random integer | ||||
|  * | ||||
|  * \returns Generated integer | ||||
|  */ | ||||
| Sint32 SDLTest_RandomSint32(); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Returns a random positive integer | ||||
|  * | ||||
|  * \returns Generated integer | ||||
|  */ | ||||
| Uint32 SDLTest_RandomUint32(); | ||||
|  | ||||
| /** | ||||
|  * Returns random Uint64. | ||||
|  * | ||||
|  * \returns Generated integer | ||||
|  */ | ||||
| Uint64 SDLTest_RandomUint64(); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Returns random Sint64. | ||||
|  * | ||||
|  * \returns Generated signed integer | ||||
|  */ | ||||
| Sint64 SDLTest_RandomSint64(); | ||||
|  | ||||
| /** | ||||
|  * \returns random float in range [0.0 - 1.0[ | ||||
|  */ | ||||
| float SDLTest_RandomUnitFloat(); | ||||
|  | ||||
| /** | ||||
|  * \returns random double in range [0.0 - 1.0[ | ||||
|  */ | ||||
| double SDLTest_RandomUnitDouble(); | ||||
|  | ||||
| /** | ||||
|  * \returns random float. | ||||
|  * | ||||
|  */ | ||||
| float SDLTest_RandomFloat(); | ||||
|  | ||||
| /** | ||||
|  * \returns random double. | ||||
|  * | ||||
|  */ | ||||
| double SDLTest_RandomDouble(); | ||||
|  | ||||
| /** | ||||
|  * Returns a random boundary value for Uint8 within the given boundaries. | ||||
|  * Boundaries are inclusive, see the usage examples below. If validDomain | ||||
|  * is true, the function will only return valid boundaries, otherwise non-valid | ||||
|  * boundaries are also possible. | ||||
|  * If boundary1 > boundary2, the values are swapped | ||||
|  * | ||||
|  * Usage examples: | ||||
|  * RandomUint8BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 | ||||
|  * RandomUint8BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 | ||||
|  * RandomUint8BoundaryValue(0, 99, SDL_FALSE) returns 100 | ||||
|  * RandomUint8BoundaryValue(0, 255, SDL_FALSE) returns 0 (error set) | ||||
|  * | ||||
|  * \param boundary1 Lower boundary limit | ||||
|  * \param boundary2 Upper boundary limit | ||||
|  * \param validDomain Should the generated boundary be valid (=within the bounds) or not? | ||||
|  * | ||||
|  * \returns Random boundary value for the given range and domain or 0 with error set | ||||
|  */ | ||||
| Uint8 SDLTest_RandomUint8BoundaryValue(Uint8 boundary1, Uint8 boundary2, SDL_bool validDomain); | ||||
|  | ||||
| /** | ||||
|  * Returns a random boundary value for Uint16 within the given boundaries. | ||||
|  * Boundaries are inclusive, see the usage examples below. If validDomain | ||||
|  * is true, the function will only return valid boundaries, otherwise non-valid | ||||
|  * boundaries are also possible. | ||||
|  * If boundary1 > boundary2, the values are swapped | ||||
|  * | ||||
|  * Usage examples: | ||||
|  * RandomUint16BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 | ||||
|  * RandomUint16BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 | ||||
|  * RandomUint16BoundaryValue(0, 99, SDL_FALSE) returns 100 | ||||
|  * RandomUint16BoundaryValue(0, 0xFFFF, SDL_FALSE) returns 0 (error set) | ||||
|  * | ||||
|  * \param boundary1 Lower boundary limit | ||||
|  * \param boundary2 Upper boundary limit | ||||
|  * \param validDomain Should the generated boundary be valid (=within the bounds) or not? | ||||
|  * | ||||
|  * \returns Random boundary value for the given range and domain or 0 with error set | ||||
|  */ | ||||
| Uint16 SDLTest_RandomUint16BoundaryValue(Uint16 boundary1, Uint16 boundary2, SDL_bool validDomain); | ||||
|  | ||||
| /** | ||||
|  * Returns a random boundary value for Uint32 within the given boundaries. | ||||
|  * Boundaries are inclusive, see the usage examples below. If validDomain | ||||
|  * is true, the function will only return valid boundaries, otherwise non-valid | ||||
|  * boundaries are also possible. | ||||
|  * If boundary1 > boundary2, the values are swapped | ||||
|  * | ||||
|  * Usage examples: | ||||
|  * RandomUint32BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 | ||||
|  * RandomUint32BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 | ||||
|  * RandomUint32BoundaryValue(0, 99, SDL_FALSE) returns 100 | ||||
|  * RandomUint32BoundaryValue(0, 0xFFFFFFFF, SDL_FALSE) returns 0 (with error set) | ||||
|  * | ||||
|  * \param boundary1 Lower boundary limit | ||||
|  * \param boundary2 Upper boundary limit | ||||
|  * \param validDomain Should the generated boundary be valid (=within the bounds) or not? | ||||
|  * | ||||
|  * \returns Random boundary value for the given range and domain or 0 with error set | ||||
|  */ | ||||
| Uint32 SDLTest_RandomUint32BoundaryValue(Uint32 boundary1, Uint32 boundary2, SDL_bool validDomain); | ||||
|  | ||||
| /** | ||||
|  * Returns a random boundary value for Uint64 within the given boundaries. | ||||
|  * Boundaries are inclusive, see the usage examples below. If validDomain | ||||
|  * is true, the function will only return valid boundaries, otherwise non-valid | ||||
|  * boundaries are also possible. | ||||
|  * If boundary1 > boundary2, the values are swapped | ||||
|  * | ||||
|  * Usage examples: | ||||
|  * RandomUint64BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 | ||||
|  * RandomUint64BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 | ||||
|  * RandomUint64BoundaryValue(0, 99, SDL_FALSE) returns 100 | ||||
|  * RandomUint64BoundaryValue(0, 0xFFFFFFFFFFFFFFFF, SDL_FALSE) returns 0 (with error set) | ||||
|  * | ||||
|  * \param boundary1 Lower boundary limit | ||||
|  * \param boundary2 Upper boundary limit | ||||
|  * \param validDomain Should the generated boundary be valid (=within the bounds) or not? | ||||
|  * | ||||
|  * \returns Random boundary value for the given range and domain or 0 with error set | ||||
|  */ | ||||
| Uint64 SDLTest_RandomUint64BoundaryValue(Uint64 boundary1, Uint64 boundary2, SDL_bool validDomain); | ||||
|  | ||||
| /** | ||||
|  * Returns a random boundary value for Sint8 within the given boundaries. | ||||
|  * Boundaries are inclusive, see the usage examples below. If validDomain | ||||
|  * is true, the function will only return valid boundaries, otherwise non-valid | ||||
|  * boundaries are also possible. | ||||
|  * If boundary1 > boundary2, the values are swapped | ||||
|  * | ||||
|  * Usage examples: | ||||
|  * RandomSint8BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 | ||||
|  * RandomSint8BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 | ||||
|  * RandomSint8BoundaryValue(SINT8_MIN, 99, SDL_FALSE) returns 100 | ||||
|  * RandomSint8BoundaryValue(SINT8_MIN, SINT8_MAX, SDL_FALSE) returns SINT8_MIN (== error value) with error set | ||||
|  * | ||||
|  * \param boundary1 Lower boundary limit | ||||
|  * \param boundary2 Upper boundary limit | ||||
|  * \param validDomain Should the generated boundary be valid (=within the bounds) or not? | ||||
|  * | ||||
|  * \returns Random boundary value for the given range and domain or SINT8_MIN with error set | ||||
|  */ | ||||
| Sint8 SDLTest_RandomSint8BoundaryValue(Sint8 boundary1, Sint8 boundary2, SDL_bool validDomain); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Returns a random boundary value for Sint16 within the given boundaries. | ||||
|  * Boundaries are inclusive, see the usage examples below. If validDomain | ||||
|  * is true, the function will only return valid boundaries, otherwise non-valid | ||||
|  * boundaries are also possible. | ||||
|  * If boundary1 > boundary2, the values are swapped | ||||
|  * | ||||
|  * Usage examples: | ||||
|  * RandomSint16BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 | ||||
|  * RandomSint16BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 | ||||
|  * RandomSint16BoundaryValue(SINT16_MIN, 99, SDL_FALSE) returns 100 | ||||
|  * RandomSint16BoundaryValue(SINT16_MIN, SINT16_MAX, SDL_FALSE) returns SINT16_MIN (== error value) with error set | ||||
|  * | ||||
|  * \param boundary1 Lower boundary limit | ||||
|  * \param boundary2 Upper boundary limit | ||||
|  * \param validDomain Should the generated boundary be valid (=within the bounds) or not? | ||||
|  * | ||||
|  * \returns Random boundary value for the given range and domain or SINT16_MIN with error set | ||||
|  */ | ||||
| Sint16 SDLTest_RandomSint16BoundaryValue(Sint16 boundary1, Sint16 boundary2, SDL_bool validDomain); | ||||
|  | ||||
| /** | ||||
|  * Returns a random boundary value for Sint32 within the given boundaries. | ||||
|  * Boundaries are inclusive, see the usage examples below. If validDomain | ||||
|  * is true, the function will only return valid boundaries, otherwise non-valid | ||||
|  * boundaries are also possible. | ||||
|  * If boundary1 > boundary2, the values are swapped | ||||
|  * | ||||
|  * Usage examples: | ||||
|  * RandomSint32BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 | ||||
|  * RandomSint32BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 | ||||
|  * RandomSint32BoundaryValue(SINT32_MIN, 99, SDL_FALSE) returns 100 | ||||
|  * RandomSint32BoundaryValue(SINT32_MIN, SINT32_MAX, SDL_FALSE) returns SINT32_MIN (== error value) | ||||
|  * | ||||
|  * \param boundary1 Lower boundary limit | ||||
|  * \param boundary2 Upper boundary limit | ||||
|  * \param validDomain Should the generated boundary be valid (=within the bounds) or not? | ||||
|  * | ||||
|  * \returns Random boundary value for the given range and domain or SINT32_MIN with error set | ||||
|  */ | ||||
| Sint32 SDLTest_RandomSint32BoundaryValue(Sint32 boundary1, Sint32 boundary2, SDL_bool validDomain); | ||||
|  | ||||
| /** | ||||
|  * Returns a random boundary value for Sint64 within the given boundaries. | ||||
|  * Boundaries are inclusive, see the usage examples below. If validDomain | ||||
|  * is true, the function will only return valid boundaries, otherwise non-valid | ||||
|  * boundaries are also possible. | ||||
|  * If boundary1 > boundary2, the values are swapped | ||||
|  * | ||||
|  * Usage examples: | ||||
|  * RandomSint64BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 | ||||
|  * RandomSint64BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 | ||||
|  * RandomSint64BoundaryValue(SINT64_MIN, 99, SDL_FALSE) returns 100 | ||||
|  * RandomSint64BoundaryValue(SINT64_MIN, SINT64_MAX, SDL_FALSE) returns SINT64_MIN (== error value) and error set | ||||
|  * | ||||
|  * \param boundary1 Lower boundary limit | ||||
|  * \param boundary2 Upper boundary limit | ||||
|  * \param validDomain Should the generated boundary be valid (=within the bounds) or not? | ||||
|  * | ||||
|  * \returns Random boundary value for the given range and domain or SINT64_MIN with error set | ||||
|  */ | ||||
| Sint64 SDLTest_RandomSint64BoundaryValue(Sint64 boundary1, Sint64 boundary2, SDL_bool validDomain); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Returns integer in range [min, max] (inclusive). | ||||
|  * Min and max values can be negative values. | ||||
|  * If Max in smaller than min, then the values are swapped. | ||||
|  * Min and max are the same value, that value will be returned. | ||||
|  * | ||||
|  * \param min Minimum inclusive value of returned random number | ||||
|  * \param max Maximum inclusive value of returned random number | ||||
|  * | ||||
|  * \returns Generated random integer in range | ||||
|  */ | ||||
| Sint32 SDLTest_RandomIntegerInRange(Sint32 min, Sint32 max); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Generates random null-terminated string. The minimum length for | ||||
|  * the string is 1 character, maximum length for the string is 255 | ||||
|  * characters and it can contain ASCII characters from 32 to 126. | ||||
|  * | ||||
|  * Note: Returned string needs to be deallocated. | ||||
|  * | ||||
|  * \returns Newly allocated random string; or NULL if length was invalid or string could not be allocated. | ||||
|  */ | ||||
| char * SDLTest_RandomAsciiString(); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Generates random null-terminated string. The maximum length for | ||||
|  * the string is defined by the maxLength parameter. | ||||
|  * String can contain ASCII characters from 32 to 126. | ||||
|  * | ||||
|  * Note: Returned string needs to be deallocated. | ||||
|  * | ||||
|  * \param maxLength The maximum length of the generated string. | ||||
|  * | ||||
|  * \returns Newly allocated random string; or NULL if maxLength was invalid or string could not be allocated. | ||||
|  */ | ||||
| char * SDLTest_RandomAsciiStringWithMaximumLength(int maxLength); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Generates random null-terminated string. The length for | ||||
|  * the string is defined by the size parameter. | ||||
|  * String can contain ASCII characters from 32 to 126. | ||||
|  * | ||||
|  * Note: Returned string needs to be deallocated. | ||||
|  * | ||||
|  * \param size The length of the generated string | ||||
|  * | ||||
|  * \returns Newly allocated random string; or NULL if size was invalid or string could not be allocated. | ||||
|  */ | ||||
| char * SDLTest_RandomAsciiStringOfSize(int size); | ||||
|  | ||||
| /** | ||||
|  * Returns the invocation count for the fuzzer since last ...FuzzerInit. | ||||
|  */ | ||||
| int SDLTest_GetFuzzerInvocationCount(); | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_test_fuzzer_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,123 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_test_harness.h | ||||
|  * | ||||
|  *  Include file for SDL test framework. | ||||
|  * | ||||
|  *  This code is a part of the SDL2_test library, not the main SDL library. | ||||
|  */ | ||||
|  | ||||
| /* | ||||
|   Defines types for test case definitions and the test execution harness API. | ||||
|  | ||||
|   Based on original GSOC code by Markus Kauppila <markus.kauppila@gmail.com> | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_test_harness_h | ||||
| #define _SDL_test_harness_h | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
|  | ||||
| /* ! Definitions for test case structures */ | ||||
| #define TEST_ENABLED  1 | ||||
| #define TEST_DISABLED 0 | ||||
|  | ||||
| /* ! Definition of all the possible test return values of the test case method */ | ||||
| #define TEST_ABORTED        -1 | ||||
| #define TEST_STARTED         0 | ||||
| #define TEST_COMPLETED       1 | ||||
| #define TEST_SKIPPED         2 | ||||
|  | ||||
| /* ! Definition of all the possible test results for the harness */ | ||||
| #define TEST_RESULT_PASSED              0 | ||||
| #define TEST_RESULT_FAILED              1 | ||||
| #define TEST_RESULT_NO_ASSERT           2 | ||||
| #define TEST_RESULT_SKIPPED             3 | ||||
| #define TEST_RESULT_SETUP_FAILURE       4 | ||||
|  | ||||
| /* !< Function pointer to a test case setup function (run before every test) */ | ||||
| typedef void (*SDLTest_TestCaseSetUpFp)(void *arg); | ||||
|  | ||||
| /* !< Function pointer to a test case function */ | ||||
| typedef int (*SDLTest_TestCaseFp)(void *arg); | ||||
|  | ||||
| /* !< Function pointer to a test case teardown function (run after every test) */ | ||||
| typedef void  (*SDLTest_TestCaseTearDownFp)(void *arg); | ||||
|  | ||||
| /** | ||||
|  * Holds information about a single test case. | ||||
|  */ | ||||
| typedef struct SDLTest_TestCaseReference { | ||||
|     /* !< Func2Stress */ | ||||
|     SDLTest_TestCaseFp testCase; | ||||
|     /* !< Short name (or function name) "Func2Stress" */ | ||||
|     char *name; | ||||
|     /* !< Long name or full description "This test pushes func2() to the limit." */ | ||||
|     char *description; | ||||
|     /* !< Set to TEST_ENABLED or TEST_DISABLED (test won't be run) */ | ||||
|     int enabled; | ||||
| } SDLTest_TestCaseReference; | ||||
|  | ||||
| /** | ||||
|  * Holds information about a test suite (multiple test cases). | ||||
|  */ | ||||
| typedef struct SDLTest_TestSuiteReference { | ||||
|     /* !< "PlatformSuite" */ | ||||
|     char *name; | ||||
|     /* !< The function that is run before each test. NULL skips. */ | ||||
|     SDLTest_TestCaseSetUpFp testSetUp; | ||||
|     /* !< The test cases that are run as part of the suite. Last item should be NULL. */ | ||||
|     const SDLTest_TestCaseReference **testCases; | ||||
|     /* !< The function that is run after each test. NULL skips. */ | ||||
|     SDLTest_TestCaseTearDownFp testTearDown; | ||||
| } SDLTest_TestSuiteReference; | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * \brief Execute a test suite using the given run seed and execution key. | ||||
|  * | ||||
|  * \param testSuites Suites containing the test case. | ||||
|  * \param userRunSeed Custom run seed provided by user, or NULL to autogenerate one. | ||||
|  * \param userExecKey Custom execution key provided by user, or 0 to autogenerate one. | ||||
|  * \param filter Filter specification. NULL disables. Case sensitive. | ||||
|  * \param testIterations Number of iterations to run each test case. | ||||
|  * | ||||
|  * \returns Test run result; 0 when all tests passed, 1 if any tests failed. | ||||
|  */ | ||||
| int SDLTest_RunSuites(SDLTest_TestSuiteReference *testSuites[], const char *userRunSeed, Uint64 userExecKey, const char *filter, int testIterations); | ||||
|  | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_test_harness_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,78 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_test_images.h | ||||
|  * | ||||
|  *  Include file for SDL test framework. | ||||
|  * | ||||
|  *  This code is a part of the SDL2_test library, not the main SDL library. | ||||
|  */ | ||||
|  | ||||
| /* | ||||
|  | ||||
|  Defines some images for tests. | ||||
|  | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_test_images_h | ||||
| #define _SDL_test_images_h | ||||
|  | ||||
| #include "SDL.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  *Type for test images. | ||||
|  */ | ||||
| typedef struct SDLTest_SurfaceImage_s { | ||||
|   int width; | ||||
|   int height; | ||||
|   unsigned int bytes_per_pixel; /* 3:RGB, 4:RGBA */ | ||||
|   const char *pixel_data; | ||||
| } SDLTest_SurfaceImage_t; | ||||
|  | ||||
| /* Test images */ | ||||
| SDL_Surface *SDLTest_ImageBlit(); | ||||
| SDL_Surface *SDLTest_ImageBlitColor(); | ||||
| SDL_Surface *SDLTest_ImageBlitAlpha(); | ||||
| SDL_Surface *SDLTest_ImageBlitBlendAdd(); | ||||
| SDL_Surface *SDLTest_ImageBlitBlend(); | ||||
| SDL_Surface *SDLTest_ImageBlitBlendMod(); | ||||
| SDL_Surface *SDLTest_ImageBlitBlendNone(); | ||||
| SDL_Surface *SDLTest_ImageBlitBlendAll(); | ||||
| SDL_Surface *SDLTest_ImageFace(); | ||||
| SDL_Surface *SDLTest_ImagePrimitives(); | ||||
| SDL_Surface *SDLTest_ImagePrimitivesBlend(); | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_test_images_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,67 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_test_log.h | ||||
|  * | ||||
|  *  Include file for SDL test framework. | ||||
|  * | ||||
|  *  This code is a part of the SDL2_test library, not the main SDL library. | ||||
|  */ | ||||
|  | ||||
| /* | ||||
|  * | ||||
|  *  Wrapper to log in the TEST category | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_test_log_h | ||||
| #define _SDL_test_log_h | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  * \brief Prints given message with a timestamp in the TEST category and INFO priority. | ||||
|  * | ||||
|  * \param fmt Message to be logged | ||||
|  */ | ||||
| void SDLTest_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); | ||||
|  | ||||
| /** | ||||
|  * \brief Prints given message with a timestamp in the TEST category and the ERROR priority. | ||||
|  * | ||||
|  * \param fmt Message to be logged | ||||
|  */ | ||||
| void SDLTest_LogError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_test_log_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,129 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_test_md5.h | ||||
|  * | ||||
|  *  Include file for SDL test framework. | ||||
|  * | ||||
|  *  This code is a part of the SDL2_test library, not the main SDL library. | ||||
|  */ | ||||
|  | ||||
| /* | ||||
|  *********************************************************************** | ||||
|  ** Header file for implementation of MD5                             ** | ||||
|  ** RSA Data Security, Inc. MD5 Message-Digest Algorithm              ** | ||||
|  ** Created: 2/17/90 RLR                                              ** | ||||
|  ** Revised: 12/27/90 SRD,AJ,BSK,JT Reference C version               ** | ||||
|  ** Revised (for MD5): RLR 4/27/91                                    ** | ||||
|  **   -- G modified to have y&~z instead of y&z                       ** | ||||
|  **   -- FF, GG, HH modified to add in last register done             ** | ||||
|  **   -- Access pattern: round 2 works mod 5, round 3 works mod 3     ** | ||||
|  **   -- distinct additive constant for each step                     ** | ||||
|  **   -- round 4 added, working mod 7                                 ** | ||||
|  *********************************************************************** | ||||
| */ | ||||
|  | ||||
| /* | ||||
|  *********************************************************************** | ||||
|  **  Message-digest routines:                                         ** | ||||
|  **  To form the message digest for a message M                       ** | ||||
|  **    (1) Initialize a context buffer mdContext using MD5Init        ** | ||||
|  **    (2) Call MD5Update on mdContext and M                          ** | ||||
|  **    (3) Call MD5Final on mdContext                                 ** | ||||
|  **  The message digest is now in mdContext->digest[0...15]           ** | ||||
|  *********************************************************************** | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_test_md5_h | ||||
| #define _SDL_test_md5_h | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /* ------------ Definitions --------- */ | ||||
|  | ||||
| /* typedef a 32-bit type */ | ||||
|   typedef unsigned long int MD5UINT4; | ||||
|  | ||||
| /* Data structure for MD5 (Message-Digest) computation */ | ||||
|   typedef struct { | ||||
|     MD5UINT4  i[2];     /* number of _bits_ handled mod 2^64 */ | ||||
|     MD5UINT4  buf[4];       /* scratch buffer */ | ||||
|     unsigned char in[64];   /* input buffer */ | ||||
|     unsigned char digest[16];   /* actual digest after Md5Final call */ | ||||
|   } SDLTest_Md5Context; | ||||
|  | ||||
| /* ---------- Function Prototypes ------------- */ | ||||
|  | ||||
| /** | ||||
|  * \brief initialize the context | ||||
|  * | ||||
|  * \param  mdContext        pointer to context variable | ||||
|  * | ||||
|  * Note: The function initializes the message-digest context | ||||
|  *       mdContext. Call before each new use of the context - | ||||
|  *       all fields are set to zero. | ||||
|  */ | ||||
|  void SDLTest_Md5Init(SDLTest_Md5Context * mdContext); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * \brief update digest from variable length data | ||||
|  * | ||||
|  * \param  mdContext       pointer to context variable | ||||
|  * \param  inBuf           pointer to data array/string | ||||
|  * \param  inLen           length of data array/string | ||||
|  * | ||||
|  * Note: The function updates the message-digest context to account | ||||
|  *       for the presence of each of the characters inBuf[0..inLen-1] | ||||
|  *       in the message whose digest is being computed. | ||||
| */ | ||||
|  | ||||
|  void SDLTest_Md5Update(SDLTest_Md5Context * mdContext, unsigned char *inBuf, | ||||
|                  unsigned int inLen); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * \brief complete digest computation | ||||
|  * | ||||
|  * \param mdContext     pointer to context variable | ||||
|  * | ||||
|  * Note: The function terminates the message-digest computation and | ||||
|  *       ends with the desired message digest in mdContext.digest[0..15]. | ||||
|  *       Always call before using the digest[] variable. | ||||
| */ | ||||
|  | ||||
|  void SDLTest_Md5Final(SDLTest_Md5Context * mdContext); | ||||
|  | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_test_md5_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,115 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_test_random.h | ||||
|  * | ||||
|  *  Include file for SDL test framework. | ||||
|  * | ||||
|  *  This code is a part of the SDL2_test library, not the main SDL library. | ||||
|  */ | ||||
|  | ||||
| /* | ||||
|  | ||||
|  A "32-bit Multiply with carry random number generator. Very fast. | ||||
|  Includes a list of recommended multipliers. | ||||
|  | ||||
|  multiply-with-carry generator: x(n) = a*x(n-1) + carry mod 2^32. | ||||
|  period: (a*2^31)-1 | ||||
|  | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_test_random_h | ||||
| #define _SDL_test_random_h | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /* --- Definitions */ | ||||
|  | ||||
| /* | ||||
|  * Macros that return a random number in a specific format. | ||||
|  */ | ||||
| #define SDLTest_RandomInt(c)        ((int)SDLTest_Random(c)) | ||||
|  | ||||
| /* | ||||
|  * Context structure for the random number generator state. | ||||
|  */ | ||||
|   typedef struct { | ||||
|     unsigned int a; | ||||
|     unsigned int x; | ||||
|     unsigned int c; | ||||
|     unsigned int ah; | ||||
|     unsigned int al; | ||||
|   } SDLTest_RandomContext; | ||||
|  | ||||
|  | ||||
| /* --- Function prototypes */ | ||||
|  | ||||
| /** | ||||
|  *  \brief Initialize random number generator with two integers. | ||||
|  * | ||||
|  *  Note: The random sequence of numbers returned by ...Random() is the | ||||
|  *  same for the same two integers and has a period of 2^31. | ||||
|  * | ||||
|  *  \param rndContext     pointer to context structure | ||||
|  *  \param xi         integer that defines the random sequence | ||||
|  *  \param ci         integer that defines the random sequence | ||||
|  * | ||||
|  */ | ||||
|  void SDLTest_RandomInit(SDLTest_RandomContext * rndContext, unsigned int xi, | ||||
|                   unsigned int ci); | ||||
|  | ||||
| /** | ||||
|  *  \brief Initialize random number generator based on current system time. | ||||
|  * | ||||
|  *  \param rndContext     pointer to context structure | ||||
|  * | ||||
|  */ | ||||
|  void SDLTest_RandomInitTime(SDLTest_RandomContext *rndContext); | ||||
|  | ||||
|  | ||||
| /** | ||||
|  *  \brief Initialize random number generator based on current system time. | ||||
|  * | ||||
|  *  Note: ...RandomInit() or ...RandomInitTime() must have been called | ||||
|  *  before using this function. | ||||
|  * | ||||
|  *  \param rndContext     pointer to context structure | ||||
|  * | ||||
|  *  \returns A random number (32bit unsigned integer) | ||||
|  * | ||||
|  */ | ||||
|  unsigned int SDLTest_Random(SDLTest_RandomContext *rndContext); | ||||
|  | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_test_random_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,287 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_thread_h | ||||
| #define _SDL_thread_h | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_thread.h | ||||
|  * | ||||
|  *  Header for the SDL thread management routines. | ||||
|  */ | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
| #include "SDL_error.h" | ||||
|  | ||||
| /* Thread synchronization primitives */ | ||||
| #include "SDL_atomic.h" | ||||
| #include "SDL_mutex.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /* The SDL thread structure, defined in SDL_thread.c */ | ||||
| struct SDL_Thread; | ||||
| typedef struct SDL_Thread SDL_Thread; | ||||
|  | ||||
| /* The SDL thread ID */ | ||||
| typedef unsigned long SDL_threadID; | ||||
|  | ||||
| /* Thread local storage ID, 0 is the invalid ID */ | ||||
| typedef unsigned int SDL_TLSID; | ||||
|  | ||||
| /** | ||||
|  *  The SDL thread priority. | ||||
|  * | ||||
|  *  \note On many systems you require special privileges to set high priority. | ||||
|  */ | ||||
| typedef enum { | ||||
|     SDL_THREAD_PRIORITY_LOW, | ||||
|     SDL_THREAD_PRIORITY_NORMAL, | ||||
|     SDL_THREAD_PRIORITY_HIGH | ||||
| } SDL_ThreadPriority; | ||||
|  | ||||
| /** | ||||
|  *  The function passed to SDL_CreateThread(). | ||||
|  *  It is passed a void* user context parameter and returns an int. | ||||
|  */ | ||||
| typedef int (SDLCALL * SDL_ThreadFunction) (void *data); | ||||
|  | ||||
| #if defined(__WIN32__) && !defined(HAVE_LIBC) | ||||
| /** | ||||
|  *  \file SDL_thread.h | ||||
|  * | ||||
|  *  We compile SDL into a DLL. This means, that it's the DLL which | ||||
|  *  creates a new thread for the calling process with the SDL_CreateThread() | ||||
|  *  API. There is a problem with this, that only the RTL of the SDL.DLL will | ||||
|  *  be initialized for those threads, and not the RTL of the calling | ||||
|  *  application! | ||||
|  * | ||||
|  *  To solve this, we make a little hack here. | ||||
|  * | ||||
|  *  We'll always use the caller's _beginthread() and _endthread() APIs to | ||||
|  *  start a new thread. This way, if it's the SDL.DLL which uses this API, | ||||
|  *  then the RTL of SDL.DLL will be used to create the new thread, and if it's | ||||
|  *  the application, then the RTL of the application will be used. | ||||
|  * | ||||
|  *  So, in short: | ||||
|  *  Always use the _beginthread() and _endthread() of the calling runtime | ||||
|  *  library! | ||||
|  */ | ||||
| #define SDL_PASSED_BEGINTHREAD_ENDTHREAD | ||||
| #include <process.h>            /* This has _beginthread() and _endthread() defined! */ | ||||
|  | ||||
| typedef uintptr_t(__cdecl * pfnSDL_CurrentBeginThread) (void *, unsigned, | ||||
|                                                         unsigned (__stdcall * | ||||
|                                                                   func) (void | ||||
|                                                                          *), | ||||
|                                                         void *arg, unsigned, | ||||
|                                                         unsigned *threadID); | ||||
| typedef void (__cdecl * pfnSDL_CurrentEndThread) (unsigned code); | ||||
|  | ||||
| /** | ||||
|  *  Create a thread. | ||||
|  */ | ||||
| extern DECLSPEC SDL_Thread *SDLCALL | ||||
| SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data, | ||||
|                  pfnSDL_CurrentBeginThread pfnBeginThread, | ||||
|                  pfnSDL_CurrentEndThread pfnEndThread); | ||||
|  | ||||
| /** | ||||
|  *  Create a thread. | ||||
|  */ | ||||
| #if defined(SDL_CreateThread) && SDL_DYNAMIC_API | ||||
| #undef SDL_CreateThread | ||||
| #define SDL_CreateThread(fn, name, data) SDL_CreateThread_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthreadex, (pfnSDL_CurrentEndThread)_endthreadex) | ||||
| #else | ||||
| #define SDL_CreateThread(fn, name, data) SDL_CreateThread(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthreadex, (pfnSDL_CurrentEndThread)_endthreadex) | ||||
| #endif | ||||
|  | ||||
| #else | ||||
|  | ||||
| /** | ||||
|  *  Create a thread. | ||||
|  * | ||||
|  *   Thread naming is a little complicated: Most systems have very small | ||||
|  *    limits for the string length (Haiku has 32 bytes, Linux currently has 16, | ||||
|  *    Visual C++ 6.0 has nine!), and possibly other arbitrary rules. You'll | ||||
|  *    have to see what happens with your system's debugger. The name should be | ||||
|  *    UTF-8 (but using the naming limits of C identifiers is a better bet). | ||||
|  *   There are no requirements for thread naming conventions, so long as the | ||||
|  *    string is null-terminated UTF-8, but these guidelines are helpful in | ||||
|  *    choosing a name: | ||||
|  * | ||||
|  *    http://stackoverflow.com/questions/149932/naming-conventions-for-threads | ||||
|  * | ||||
|  *   If a system imposes requirements, SDL will try to munge the string for | ||||
|  *    it (truncate, etc), but the original string contents will be available | ||||
|  *    from SDL_GetThreadName(). | ||||
|  */ | ||||
| extern DECLSPEC SDL_Thread *SDLCALL | ||||
| SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data); | ||||
|  | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  * Get the thread name, as it was specified in SDL_CreateThread(). | ||||
|  *  This function returns a pointer to a UTF-8 string that names the | ||||
|  *  specified thread, or NULL if it doesn't have a name. This is internal | ||||
|  *  memory, not to be free()'d by the caller, and remains valid until the | ||||
|  *  specified thread is cleaned up by SDL_WaitThread(). | ||||
|  */ | ||||
| extern DECLSPEC const char *SDLCALL SDL_GetThreadName(SDL_Thread *thread); | ||||
|  | ||||
| /** | ||||
|  *  Get the thread identifier for the current thread. | ||||
|  */ | ||||
| extern DECLSPEC SDL_threadID SDLCALL SDL_ThreadID(void); | ||||
|  | ||||
| /** | ||||
|  *  Get the thread identifier for the specified thread. | ||||
|  * | ||||
|  *  Equivalent to SDL_ThreadID() if the specified thread is NULL. | ||||
|  */ | ||||
| extern DECLSPEC SDL_threadID SDLCALL SDL_GetThreadID(SDL_Thread * thread); | ||||
|  | ||||
| /** | ||||
|  *  Set the priority for the current thread | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_SetThreadPriority(SDL_ThreadPriority priority); | ||||
|  | ||||
| /** | ||||
|  *  Wait for a thread to finish. Threads that haven't been detached will | ||||
|  *  remain (as a "zombie") until this function cleans them up. Not doing so | ||||
|  *  is a resource leak. | ||||
|  * | ||||
|  *  Once a thread has been cleaned up through this function, the SDL_Thread | ||||
|  *  that references it becomes invalid and should not be referenced again. | ||||
|  *  As such, only one thread may call SDL_WaitThread() on another. | ||||
|  * | ||||
|  *  The return code for the thread function is placed in the area | ||||
|  *  pointed to by \c status, if \c status is not NULL. | ||||
|  * | ||||
|  *  You may not wait on a thread that has been used in a call to | ||||
|  *  SDL_DetachThread(). Use either that function or this one, but not | ||||
|  *  both, or behavior is undefined. | ||||
|  * | ||||
|  *  It is safe to pass NULL to this function; it is a no-op. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_WaitThread(SDL_Thread * thread, int *status); | ||||
|  | ||||
| /** | ||||
|  *  A thread may be "detached" to signify that it should not remain until | ||||
|  *  another thread has called SDL_WaitThread() on it. Detaching a thread | ||||
|  *  is useful for long-running threads that nothing needs to synchronize | ||||
|  *  with or further manage. When a detached thread is done, it simply | ||||
|  *  goes away. | ||||
|  * | ||||
|  *  There is no way to recover the return code of a detached thread. If you | ||||
|  *  need this, don't detach the thread and instead use SDL_WaitThread(). | ||||
|  * | ||||
|  *  Once a thread is detached, you should usually assume the SDL_Thread isn't | ||||
|  *  safe to reference again, as it will become invalid immediately upon | ||||
|  *  the detached thread's exit, instead of remaining until someone has called | ||||
|  *  SDL_WaitThread() to finally clean it up. As such, don't detach the same | ||||
|  *  thread more than once. | ||||
|  * | ||||
|  *  If a thread has already exited when passed to SDL_DetachThread(), it will | ||||
|  *  stop waiting for a call to SDL_WaitThread() and clean up immediately. | ||||
|  *  It is not safe to detach a thread that might be used with SDL_WaitThread(). | ||||
|  * | ||||
|  *  You may not call SDL_WaitThread() on a thread that has been detached. | ||||
|  *  Use either that function or this one, but not both, or behavior is | ||||
|  *  undefined. | ||||
|  * | ||||
|  *  It is safe to pass NULL to this function; it is a no-op. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_DetachThread(SDL_Thread * thread); | ||||
|  | ||||
| /** | ||||
|  *  \brief Create an identifier that is globally visible to all threads but refers to data that is thread-specific. | ||||
|  * | ||||
|  *  \return The newly created thread local storage identifier, or 0 on error | ||||
|  * | ||||
|  *  \code | ||||
|  *  static SDL_SpinLock tls_lock; | ||||
|  *  static SDL_TLSID thread_local_storage; | ||||
|  *  | ||||
|  *  void SetMyThreadData(void *value) | ||||
|  *  { | ||||
|  *      if (!thread_local_storage) { | ||||
|  *          SDL_AtomicLock(&tls_lock); | ||||
|  *          if (!thread_local_storage) { | ||||
|  *              thread_local_storage = SDL_TLSCreate(); | ||||
|  *          } | ||||
|  *          SDL_AtomicUnlock(&tls_lock); | ||||
|  *      } | ||||
|  *      SDL_TLSSet(thread_local_storage, value, 0); | ||||
|  *  } | ||||
|  *   | ||||
|  *  void *GetMyThreadData(void) | ||||
|  *  { | ||||
|  *      return SDL_TLSGet(thread_local_storage); | ||||
|  *  } | ||||
|  *  \endcode | ||||
|  * | ||||
|  *  \sa SDL_TLSGet() | ||||
|  *  \sa SDL_TLSSet() | ||||
|  */ | ||||
| extern DECLSPEC SDL_TLSID SDLCALL SDL_TLSCreate(void); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the value associated with a thread local storage ID for the current thread. | ||||
|  * | ||||
|  *  \param id The thread local storage ID | ||||
|  * | ||||
|  *  \return The value associated with the ID for the current thread, or NULL if no value has been set. | ||||
|  * | ||||
|  *  \sa SDL_TLSCreate() | ||||
|  *  \sa SDL_TLSSet() | ||||
|  */ | ||||
| extern DECLSPEC void * SDLCALL SDL_TLSGet(SDL_TLSID id); | ||||
|  | ||||
| /** | ||||
|  *  \brief Set the value associated with a thread local storage ID for the current thread. | ||||
|  * | ||||
|  *  \param id The thread local storage ID | ||||
|  *  \param value The value to associate with the ID for the current thread | ||||
|  *  \param destructor A function called when the thread exits, to free the value. | ||||
|  * | ||||
|  *  \return 0 on success, -1 on error | ||||
|  * | ||||
|  *  \sa SDL_TLSCreate() | ||||
|  *  \sa SDL_TLSGet() | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_TLSSet(SDL_TLSID id, const void *value, void (*destructor)(void*)); | ||||
|  | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_thread_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,115 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| #ifndef _SDL_timer_h | ||||
| #define _SDL_timer_h | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_timer.h | ||||
|  * | ||||
|  *  Header for the SDL time management routines. | ||||
|  */ | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
| #include "SDL_error.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  * \brief Get the number of milliseconds since the SDL library initialization. | ||||
|  * | ||||
|  * \note This value wraps if the program runs for more than ~49 days. | ||||
|  */ | ||||
| extern DECLSPEC Uint32 SDLCALL SDL_GetTicks(void); | ||||
|  | ||||
| /** | ||||
|  * \brief Compare SDL ticks values, and return true if A has passed B | ||||
|  * | ||||
|  * e.g. if you want to wait 100 ms, you could do this: | ||||
|  *  Uint32 timeout = SDL_GetTicks() + 100; | ||||
|  *  while (!SDL_TICKS_PASSED(SDL_GetTicks(), timeout)) { | ||||
|  *      ... do work until timeout has elapsed | ||||
|  *  } | ||||
|  */ | ||||
| #define SDL_TICKS_PASSED(A, B)  ((Sint32)((B) - (A)) <= 0) | ||||
|  | ||||
| /** | ||||
|  * \brief Get the current value of the high resolution counter | ||||
|  */ | ||||
| extern DECLSPEC Uint64 SDLCALL SDL_GetPerformanceCounter(void); | ||||
|  | ||||
| /** | ||||
|  * \brief Get the count per second of the high resolution counter | ||||
|  */ | ||||
| extern DECLSPEC Uint64 SDLCALL SDL_GetPerformanceFrequency(void); | ||||
|  | ||||
| /** | ||||
|  * \brief Wait a specified number of milliseconds before returning. | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_Delay(Uint32 ms); | ||||
|  | ||||
| /** | ||||
|  *  Function prototype for the timer callback function. | ||||
|  * | ||||
|  *  The callback function is passed the current timer interval and returns | ||||
|  *  the next timer interval.  If the returned value is the same as the one | ||||
|  *  passed in, the periodic alarm continues, otherwise a new alarm is | ||||
|  *  scheduled.  If the callback returns 0, the periodic alarm is cancelled. | ||||
|  */ | ||||
| typedef Uint32 (SDLCALL * SDL_TimerCallback) (Uint32 interval, void *param); | ||||
|  | ||||
| /** | ||||
|  * Definition of the timer ID type. | ||||
|  */ | ||||
| typedef int SDL_TimerID; | ||||
|  | ||||
| /** | ||||
|  * \brief Add a new timer to the pool of timers already running. | ||||
|  * | ||||
|  * \return A timer ID, or 0 when an error occurs. | ||||
|  */ | ||||
| extern DECLSPEC SDL_TimerID SDLCALL SDL_AddTimer(Uint32 interval, | ||||
|                                                  SDL_TimerCallback callback, | ||||
|                                                  void *param); | ||||
|  | ||||
| /** | ||||
|  * \brief Remove a timer knowing its ID. | ||||
|  * | ||||
|  * \return A boolean value indicating success or failure. | ||||
|  * | ||||
|  * \warning It is not safe to remove a timer multiple times. | ||||
|  */ | ||||
| extern DECLSPEC SDL_bool SDLCALL SDL_RemoveTimer(SDL_TimerID id); | ||||
|  | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_timer_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,86 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_touch.h | ||||
|  * | ||||
|  *  Include file for SDL touch event handling. | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_touch_h | ||||
| #define _SDL_touch_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
| #include "SDL_error.h" | ||||
| #include "SDL_video.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| typedef Sint64 SDL_TouchID; | ||||
| typedef Sint64 SDL_FingerID; | ||||
|  | ||||
| typedef struct SDL_Finger | ||||
| { | ||||
|     SDL_FingerID id; | ||||
|     float x; | ||||
|     float y; | ||||
|     float pressure; | ||||
| } SDL_Finger; | ||||
|  | ||||
| /* Used as the device ID for mouse events simulated with touch input */ | ||||
| #define SDL_TOUCH_MOUSEID ((Uint32)-1) | ||||
|  | ||||
|  | ||||
| /* Function prototypes */ | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the number of registered touch devices. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_GetNumTouchDevices(void); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the touch ID with the given index, or 0 if the index is invalid. | ||||
|  */ | ||||
| extern DECLSPEC SDL_TouchID SDLCALL SDL_GetTouchDevice(int index); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the number of active fingers for a given touch device. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_GetNumTouchFingers(SDL_TouchID touchID); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the finger object of the given touch, with the given index. | ||||
|  */ | ||||
| extern DECLSPEC SDL_Finger * SDLCALL SDL_GetTouchFinger(SDL_TouchID touchID, int index); | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_touch_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
| @@ -0,0 +1,29 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_types.h | ||||
|  * | ||||
|  *  \deprecated | ||||
|  */ | ||||
|  | ||||
| /* DEPRECATED */ | ||||
| #include "SDL_stdinc.h" | ||||
| @@ -0,0 +1,162 @@ | ||||
| /* | ||||
|   Simple DirectMedia Layer | ||||
|   Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> | ||||
|  | ||||
|   This software is provided 'as-is', without any express or implied | ||||
|   warranty.  In no event will the authors be held liable for any damages | ||||
|   arising from the use of this software. | ||||
|  | ||||
|   Permission is granted to anyone to use this software for any purpose, | ||||
|   including commercial applications, and to alter it and redistribute it | ||||
|   freely, subject to the following restrictions: | ||||
|  | ||||
|   1. The origin of this software must not be misrepresented; you must not | ||||
|      claim that you wrote the original software. If you use this software | ||||
|      in a product, an acknowledgment in the product documentation would be | ||||
|      appreciated but is not required. | ||||
|   2. Altered source versions must be plainly marked as such, and must not be | ||||
|      misrepresented as being the original software. | ||||
|   3. This notice may not be removed or altered from any source distribution. | ||||
| */ | ||||
|  | ||||
| /** | ||||
|  *  \file SDL_version.h | ||||
|  * | ||||
|  *  This header defines the current SDL version. | ||||
|  */ | ||||
|  | ||||
| #ifndef _SDL_version_h | ||||
| #define _SDL_version_h | ||||
|  | ||||
| #include "SDL_stdinc.h" | ||||
|  | ||||
| #include "begin_code.h" | ||||
| /* Set up for C function definitions, even when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| /** | ||||
|  *  \brief Information the version of SDL in use. | ||||
|  * | ||||
|  *  Represents the library's version as three levels: major revision | ||||
|  *  (increments with massive changes, additions, and enhancements), | ||||
|  *  minor revision (increments with backwards-compatible changes to the | ||||
|  *  major revision), and patchlevel (increments with fixes to the minor | ||||
|  *  revision). | ||||
|  * | ||||
|  *  \sa SDL_VERSION | ||||
|  *  \sa SDL_GetVersion | ||||
|  */ | ||||
| typedef struct SDL_version | ||||
| { | ||||
|     Uint8 major;        /**< major version */ | ||||
|     Uint8 minor;        /**< minor version */ | ||||
|     Uint8 patch;        /**< update version */ | ||||
| } SDL_version; | ||||
|  | ||||
| /* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL | ||||
| */ | ||||
| #define SDL_MAJOR_VERSION   2 | ||||
| #define SDL_MINOR_VERSION   0 | ||||
| #define SDL_PATCHLEVEL      4 | ||||
|  | ||||
| /** | ||||
|  *  \brief Macro to determine SDL version program was compiled against. | ||||
|  * | ||||
|  *  This macro fills in a SDL_version structure with the version of the | ||||
|  *  library you compiled against. This is determined by what header the | ||||
|  *  compiler uses. Note that if you dynamically linked the library, you might | ||||
|  *  have a slightly newer or older version at runtime. That version can be | ||||
|  *  determined with SDL_GetVersion(), which, unlike SDL_VERSION(), | ||||
|  *  is not a macro. | ||||
|  * | ||||
|  *  \param x A pointer to a SDL_version struct to initialize. | ||||
|  * | ||||
|  *  \sa SDL_version | ||||
|  *  \sa SDL_GetVersion | ||||
|  */ | ||||
| #define SDL_VERSION(x)                          \ | ||||
| {                                   \ | ||||
|     (x)->major = SDL_MAJOR_VERSION;                 \ | ||||
|     (x)->minor = SDL_MINOR_VERSION;                 \ | ||||
|     (x)->patch = SDL_PATCHLEVEL;                    \ | ||||
| } | ||||
|  | ||||
| /** | ||||
|  *  This macro turns the version numbers into a numeric value: | ||||
|  *  \verbatim | ||||
|     (1,2,3) -> (1203) | ||||
|     \endverbatim | ||||
|  * | ||||
|  *  This assumes that there will never be more than 100 patchlevels. | ||||
|  */ | ||||
| #define SDL_VERSIONNUM(X, Y, Z)                     \ | ||||
|     ((X)*1000 + (Y)*100 + (Z)) | ||||
|  | ||||
| /** | ||||
|  *  This is the version number macro for the current SDL version. | ||||
|  */ | ||||
| #define SDL_COMPILEDVERSION \ | ||||
|     SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) | ||||
|  | ||||
| /** | ||||
|  *  This macro will evaluate to true if compiled with SDL at least X.Y.Z. | ||||
|  */ | ||||
| #define SDL_VERSION_ATLEAST(X, Y, Z) \ | ||||
|     (SDL_COMPILEDVERSION >= SDL_VERSIONNUM(X, Y, Z)) | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the version of SDL that is linked against your program. | ||||
|  * | ||||
|  *  If you are linking to SDL dynamically, then it is possible that the | ||||
|  *  current version will be different than the version you compiled against. | ||||
|  *  This function returns the current version, while SDL_VERSION() is a | ||||
|  *  macro that tells you what version you compiled with. | ||||
|  * | ||||
|  *  \code | ||||
|  *  SDL_version compiled; | ||||
|  *  SDL_version linked; | ||||
|  * | ||||
|  *  SDL_VERSION(&compiled); | ||||
|  *  SDL_GetVersion(&linked); | ||||
|  *  printf("We compiled against SDL version %d.%d.%d ...\n", | ||||
|  *         compiled.major, compiled.minor, compiled.patch); | ||||
|  *  printf("But we linked against SDL version %d.%d.%d.\n", | ||||
|  *         linked.major, linked.minor, linked.patch); | ||||
|  *  \endcode | ||||
|  * | ||||
|  *  This function may be called safely at any time, even before SDL_Init(). | ||||
|  * | ||||
|  *  \sa SDL_VERSION | ||||
|  */ | ||||
| extern DECLSPEC void SDLCALL SDL_GetVersion(SDL_version * ver); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the code revision of SDL that is linked against your program. | ||||
|  * | ||||
|  *  Returns an arbitrary string (a hash value) uniquely identifying the | ||||
|  *  exact revision of the SDL library in use, and is only useful in comparing | ||||
|  *  against other revisions. It is NOT an incrementing number. | ||||
|  */ | ||||
| extern DECLSPEC const char *SDLCALL SDL_GetRevision(void); | ||||
|  | ||||
| /** | ||||
|  *  \brief Get the revision number of SDL that is linked against your program. | ||||
|  * | ||||
|  *  Returns a number uniquely identifying the exact revision of the SDL | ||||
|  *  library in use. It is an incrementing number based on commits to | ||||
|  *  hg.libsdl.org. | ||||
|  */ | ||||
| extern DECLSPEC int SDLCALL SDL_GetRevisionNumber(void); | ||||
|  | ||||
|  | ||||
| /* Ends C function definitions when using C++ */ | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
| #include "close_code.h" | ||||
|  | ||||
| #endif /* _SDL_version_h */ | ||||
|  | ||||
| /* vi: set ts=4 sw=4 expandtab: */ | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user