Age | Commit message (Collapse) | Author | Files | Lines |
|
Due to the use of SubImage, there can be multiple images pointing to the same
SDL_Texture with different alpha values. However, since the alpha mod set on
the texture was only set from Image::setAlpha, images were not always rendered
with the correct alpha value.
Now the alpha mod is always set right before rendering each image. Most of the
time the alpha will remain the same, but I don't expect this to become a
performance issue so I've not added extra variables and checks to suppress such
calls when they aren't needed.
On the upside, this simplifies the "use color" option, which previously had to
restore the previously set alpha mod.
Closes #117
|
|
By using SDL logging, we can rely on SDL to filter the log messages by
their priority before they get sent to our custom output function. For
example, we now no longer get entries for created and destroyed Window
instances by default, since these have only "debug" priority whereas the
default priority for the "app" category is "info".
We can also get log messages raised by SDL itself in our log now. Log
levels can be controlled per category through the "SDL_LOGGING"
environment variable.
Many existing log messages have been assigned a category based on their
existing prefix.
|
|
When we use SDL_PIXELFORMAT_RGBA32, which is actually the same as
SDL_PIXELFORMAT_ABGR8888 on little-endian systems, we can cast the pixel
data directly to SDL_Color* for easy access to the components.
This may also make applying dye more efficient on big-endian systems,
though I have no such system to test with.
Follow-up to d8b871727c363892b14f2eadfad8f6058ec6ab72.
|
|
The images returned by IMG_Load_RW appear to usually be in the format
SDL_PIXELFORMAT_ABGR8888. As such, adjust the code performing the dye to
operate on this format rather than always converting the surfaces to
SDL_PIXELFORMAT_RGBA8888.
This appears to make the loading of dyed images about 30% faster.
|
|
* Removed some unused includes
* Removed unused ListBox::mFont
* Removed wrong cast to SDL_Scancode
* Removed superfluous .c_str()
* Removed superfluous explicit std::string construction
* Removed unused variable
* Use more emplace_back
* Turned FindBeingFunctor into a lambda
* Avoid needless pointer references for ambient layers and use a vector
|
|
|
|
Simplifies the code a little.
Also use ResourceRef in SubImage to avoid manual reference counting.
|
|
* Removing unused includes
* Use member initialization
* Use range-based for loops
* Use nullptr
* Removed no longer used aliases
* Use override
* Don't use else after return
* Use '= delete' to remove implicit members
* Use std::string::empty instead of comparing to ""
|
|
modernize-use-auto
modernize-use-nullptr
modernize-use-override
modernize-use-using
|
|
|
|
Maybe it used to be necessary for these methods to be virtual, but this
is no longer the case. Hence we can avoid wasting CPU ticks searching
through virtual function tables, especially for frequently used methods
like getWidth, getHeight and setAlpha.
MapLayer::getTile was inlined.
Reviewed-by: Erik Schilling
|
|
When uploading an SDL surface to an OpenGL texture, it was always making
a copy that had the desired size and pixel format. Now this copy is no
longer being made when the existing surface already has the target size
and pixel format.
In fact most images are already in 32-bit RGBA format after loading them.
Reviewed-by: Erik Schilling
|
|
While simply specifying "4 components" works, it is preferred to specify
the actual image format like GL_RGBA8 in our case.
http://www.opengl.org/wiki/Common_Mistakes#Image_precision
Reviewed-by: Erik Schilling
|
|
If the graphics driver supports this, there is no need to create
textures with power-of-two dimensions. It is then also preferred to use
regular textures than relying on the older GL_ARB_texture_rectangle
extension.
Reviewed-by: Erik Schilling
|
|
Reviewed-by: Stefan Beller
|
|
This reverts commit 137ade7226af37d073a5755b90181275664dd65c.
Turns out that when leaving the default values, the textures won't
actually work since they are incomplete unless the mipmaps are generated
(since GL_TEXTURE_MIN_FILTER is GL_NEAREST_MIPMAP_LINEAR by default).
For now we don't want to generate mipmaps anyway since we're going for a
pixely look, so revert the filters back to GL_NEAREST.
The reason this had worked for me is because on my system the texture
type GL_TEXTURE_RECTANGLE_ARB is used instead of GL_TEXTURE_2D and this
texture type does not support mipmaps.
|
|
The scaled wallpaper looks quite a bit better when linear texture
smoothing is applied, and I could not measure a significant difference
in framerate from setting the texture filter to GL_NEAREST. Hence it
seems not necessary to me to introduce the smoothing as an option.
The default value for GL_TEXTURE_MIN_FILTER is GL_NEAREST_MIPMAP_LINEAR
and the default for GL_TEXTURE_MAG_FILTER is GL_LINEAR. These make sure
that the texture is reasonably smoothed by using the weighted average of
the nearest four pixels.
Reviewed-by: Erik Schilling
|
|
Image::SDLgetScaledImage was changed so that it tries to find an existing
scaled version of the image first, and generates it when none exists.
When it needs to generate one, this resource is added to the resource
manager, partly to avoid duplicating the work later but mainly to keep
memory management straightforward.
This function also used to leak the scaled SDL_Surface since it wrongly
assumed that Image::load would free it.
To avoid filling up the memory with scaled wallpapers that are waiting
30 seconds until they will be deleted, the Resource::decRef function was
extended with a parameter that allows telling it what to do with orphans.
Calling decRef with Resource::DeleteImmediately will delete the resource
immediately in case the resource is orphaned.
Reviewed-by: Yohann Ferreira
|
|
|
|
Reviewed-by: Yohann Ferreira
|
|
This avoids the creation of a temporary buffer containing a complete
file for the sole purpose of wrapping it up in an SDL_RWops.
The necessary wrapper is by Ryan C. Gordon and is included in the
PhysFS repository under 'extras'.
Reviewed-by: Yohann Ferreira
|
|
- Now OpenGL and the transparency disabling are set at startup and
not read again for displaying graphics, preventing graphic errors
before startup.
- We also agreed long time ago that SDL specific functions
should have a SDL prefix. The header has been rearranged a bit
to do so.
- Also fixed a possible discrepancy in the hasAlphaChannel() function.
Reviewed-by: CodyMartin.
Resolves: Mana-Mantis: #260.
|
|
This disables the Image::setAlpha() function, which
uses 60% of the client's CPU cycles.
When enabled, visual quality is slightly decreased,
especially with the particle system.
Toggling this setting On from an Off state requires
a client restart or the graphics look quite funny.
Bertram's addition:
- Renamed 'Low CPU' to 'Disable transparency (Low CPU)' in the gui
for better understanding.
- Removed the sprite display with 30% opacity when disabling
transparency since it made monsters and drops be drawn above all layers
at full opacity.
- Made the OpenGL mode disable the 'low CPU mode'.
- Fixed the GUI logic as much as possible. Please note that the GUI opacity
slider stays enabled when transparency is disabled even if told to be disabled
in that case.
Reviewed-by: CodyMartin, 4144, MadCamel.
|
|
Enabled by default.
Can be disabled in configuration option "alphaCache" if set it to 0.
Reviewed-by: Bertram
|
|
Use batch commands and not selecting already selected texture.
Signed-off-by: Jared Adams <jaxad0127@gmail.com>
|
|
|
|
|
|
Also added the update copyright tool from the Wormux Team.
( And not forgetting credit's due. :P )
|
|
|
|
Also remove some extra new lines and fix eAthena's PartyTab define guards.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This will later be used to keep the original alpha value...
|
|
|
|
|
|
|
|
This all will be useful for my next patch: Repair windows opacity break in SDL mode.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The SDL methods to rescale the wallpaper has been optimized to permit rescaling
at load time while OpenGL draws directly rescaled. Does someone know how to smooth
the rescaled image under OpenGL?
|
|
There is also a new rule that trivial constructors and destructors
should no longer be trivially "documented", since this just takes up
space with no gain.
|