Files
@ r24860:fb2788d47d86
Branch filter:
Location: cpp/openttd-patchpack/source/src/newgrf_railtype.h - annotation
r24860:fb2788d47d86
2.8 KiB
text/x-c
Codechange: [OSX] Only keep a total dirty rect for drawing.
When drawing an 8bpp screen buffer, palette resolving was done for each
dirty rectangle. In areas with high activity, this would mean a pixel might
have been resolved multiple times. Also, if too many individual updates
were queued, the whole screen would be refreshed, even if unnecessary.
All other drivers only keep one overall dirty rect, so do it here as well.
When drawing an 8bpp screen buffer, palette resolving was done for each
dirty rectangle. In areas with high activity, this would mean a pixel might
have been resolved multiple times. Also, if too many individual updates
were queued, the whole screen would be refreshed, even if unnecessary.
All other drivers only keep one overall dirty rect, so do it here as well.
r15534:64974155b7a6 r15534:64974155b7a6 r15534:64974155b7a6 r15534:64974155b7a6 r15534:64974155b7a6 r15534:64974155b7a6 r15534:64974155b7a6 r15534:64974155b7a6 r15534:64974155b7a6 r14477:752d803ed3be r14477:752d803ed3be r14477:752d803ed3be r14477:752d803ed3be r15743:4f6cef458ee3 r19730:2c33854b291a r19730:2c33854b291a r19738:837a139219f0 r19730:2c33854b291a r19730:2c33854b291a r19730:2c33854b291a r24069:49625df81342 r19730:2c33854b291a r22756:8ffd1846f871 r22756:8ffd1846f871 r22756:8ffd1846f871 r22756:8ffd1846f871 r22756:8ffd1846f871 r22756:8ffd1846f871 r24069:49625df81342 r24069:49625df81342 r22756:8ffd1846f871 r22756:8ffd1846f871 r19730:2c33854b291a r23497:a0ab44ebd2fa r23497:a0ab44ebd2fa r19730:2c33854b291a r19730:2c33854b291a r19730:2c33854b291a r19730:2c33854b291a r19738:837a139219f0 r19730:2c33854b291a r21299:8973364c4b52 r19730:2c33854b291a r23497:a0ab44ebd2fa r19730:2c33854b291a r19730:2c33854b291a r19730:2c33854b291a r19737:d7c69e3b4bd4 r19730:2c33854b291a r19730:2c33854b291a r19730:2c33854b291a r23497:a0ab44ebd2fa r24069:49625df81342 r24069:49625df81342 r24069:49625df81342 r19730:2c33854b291a r14477:752d803ed3be r23607:36c15679007d r19450:89a0bcc12737 r14477:752d803ed3be r24635:c539e338e87f r14477:752d803ed3be r14477:752d803ed3be r14477:752d803ed3be | /*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file newgrf_railtype.h NewGRF handling of rail types. */
#ifndef NEWGRF_RAILTYPE_H
#define NEWGRF_RAILTYPE_H
#include "rail.h"
#include "newgrf_commons.h"
#include "newgrf_spritegroup.h"
/** Resolver for the railtype scope. */
struct RailTypeScopeResolver : public ScopeResolver {
TileIndex tile; ///< Tracktile. For track on a bridge this is the southern bridgehead.
TileContext context; ///< Are we resolving sprites for the upper halftile, or on a bridge?
const RailtypeInfo *rti;
/**
* Constructor of the railtype scope resolvers.
* @param ro Surrounding resolver.
* @param tile %Tile containing the track. For track on a bridge this is the southern bridgehead.
* @param context Are we resolving sprites for the upper halftile, or on a bridge?
*/
RailTypeScopeResolver(ResolverObject &ro, const RailtypeInfo *rti, TileIndex tile, TileContext context)
: ScopeResolver(ro), tile(tile), context(context), rti(rti)
{
}
uint32 GetRandomBits() const override;
uint32 GetVariable(byte variable, uint32 parameter, bool *available) const override;
};
/** Resolver object for rail types. */
struct RailTypeResolverObject : public ResolverObject {
RailTypeScopeResolver railtype_scope; ///< Resolver for the railtype scope.
RailTypeResolverObject(const RailtypeInfo *rti, TileIndex tile, TileContext context, RailTypeSpriteGroup rtsg, uint32 param1 = 0, uint32 param2 = 0);
ScopeResolver *GetScope(VarSpriteGroupScope scope = VSG_SCOPE_SELF, byte relative = 0) override
{
switch (scope) {
case VSG_SCOPE_SELF: return &this->railtype_scope;
default: return ResolverObject::GetScope(scope, relative);
}
}
const SpriteGroup *ResolveReal(const RealSpriteGroup *group) const override;
GrfSpecFeature GetFeature() const override;
uint32 GetDebugID() const override;
};
SpriteID GetCustomRailSprite(const RailtypeInfo *rti, TileIndex tile, RailTypeSpriteGroup rtsg, TileContext context = TCX_NORMAL, uint *num_results = nullptr);
SpriteID GetCustomSignalSprite(const RailtypeInfo *rti, TileIndex tile, SignalType type, SignalVariant var, SignalState state, bool gui = false);
RailType GetRailTypeTranslation(uint8 railtype, const GRFFile *grffile);
uint8 GetReverseRailTypeTranslation(RailType railtype, const GRFFile *grffile);
#endif /* NEWGRF_RAILTYPE_H */
|