Commit graph

200 commits

Author SHA1 Message Date
Christoph Oelckers
f01d1ec072 - must merge before continuing... 2018-12-11 20:26:33 +01:00
Christoph Oelckers
86d851bc5c - minor cleanup and allow FHardwareTexture to restore the old bindings after creating a texture. 2018-12-11 19:56:23 +01:00
Christoph Oelckers
5666e4c805 - made camera textures operational again.
Now with proper separation of software rendering logic from the main part of the class.
2018-12-11 00:01:45 +01:00
Christoph Oelckers
0d07fb2550 Use FImageTexture for thre null texture
FDummyTexture had a big problem: Whenever it was accessed by accident it crashed the app because it wasn't fully implemented.

What it should do is return empty pixels of the given size, and an unextended FImageTexture is doing just that.
2018-12-10 02:50:22 +01:00
Christoph Oelckers
4cd60fbe99 - added caching for true color images as well 2018-12-10 02:35:10 +01:00
Christoph Oelckers
2e7bcf9e41 - implemented a proper texture composition cache.
This will mostly ensure that each patch used for composition is only loaded once and automatically unloaded once no longer needed.
So far only for paletted rendering, but the same logic can be used for true color as well.
2018-12-10 01:17:39 +01:00
Christoph Oelckers
5448874c6e - moved image format detection logic from FTexture to FImageSource. 2018-12-09 17:10:51 +01:00
Christoph Oelckers
4cedbf6cc2 - split between textures and images is complete now.
* split up FMultiPatchTexture into a builder class and the actual image source.
* since images can now be referenced by multiple textures the old redirection mechanism has been removed. It can be done better and less intrusive now. Simple single patch textures already directly reference the underlying patch image now.
* allocate all image source related data from a memory arena. Since this is all static this makes it a lot easier to free this in bulk.
2018-12-09 15:25:56 +01:00
Christoph Oelckers
583a740441 - separated the image converters from the texture offsets.
Mostly done, except for FMultiPatchTexture and FFontChar1 + 2.
Note that this commit leaks those image objects!
2018-12-09 07:39:05 +01:00
Christoph Oelckers
5eab944157 - started separating the texture class from the image format handlers. 2018-12-08 23:28:35 +01:00
Christoph Oelckers
e35d88e039 - moved some utility code out of FTexture. 2018-12-08 20:44:28 +01:00
Christoph Oelckers
03626107eb - changed multipatch texture composition to always composite off full source images and not do it recursively.
Previously it tried to copy all patches of composite sub-images directly onto the main image.
This caused massive complications throughout the entire true color texture code and made any attempt of caching the source data for composition next to impossible because the entire composition process operated on the raw data read from the texture and not some cacheable image. While this may cause more pixel data to be processed, this will be easily offset by being able to reuse patches for multiple textures, once a caching system is in place, which even for the IWADs happens quite frequently.

Removing the now unneeded arguments from the implementation also makes things a lot easier to handle.
2018-12-08 17:23:15 +01:00
Christoph Oelckers
1e070d27bd - replaced FTexture::FillBuffer 2018-12-08 14:06:16 +01:00
Christoph Oelckers
82bd742ea3 - reworked how the software renderer manages its textures.
* it's no longer the main texture objects managing the pixel buffer but FSoftwareTexture.
* create proper spans for true color textures. The paletted spans only match if the image does not have any translucent pixels.
* create proper warp textures instead of working off the paletted variants.

As a side effect, caching of pixel buffers for texture composition is temporarily disabled, as it management of texture redirections. These things will be reimplemented once things progress further. The existing methods here had their share of serious issues that should be fixed.
2018-12-08 12:42:35 +01:00
Christoph Oelckers
69cc1f831c Renamed FTexture::GetPixels
This was needed to allow refactoring without letting all the other GetPixels get in the way.
2018-12-07 03:35:10 +01:00
Christoph Oelckers
9409843931 - replaced the last access operator, too
Now everything uses a function.
This really wasn't what operators are supposef to be used for.
2018-12-07 03:01:40 +01:00
Christoph Oelckers
79a0f76801 - replaced TexMan.operator() with two functions.
This was done to make reviewing easier, again because it is virtually impossible to search for the operators in the code.

Going through this revealed quite a few places where texture animations were on but shouldn't and even more places that did not check PASLVERS, although they were preparing some paletted rendering.
2018-12-07 02:53:18 +01:00
Christoph Oelckers
3dc9eab743 Renamed the operator() and [] methods in FTextureManager which take a name
The operators cannot be easily searched for so this makes it hard to do any evaluations on the use of this method.
2018-12-07 02:43:27 +01:00
Christoph Oelckers
9fedecbe60 Renamed FTextureManager::GetTexture to GetTextureID
It doesn't return a texture after all and I want to repurpose the name for something else.
2018-12-07 02:31:30 +01:00
Christoph Oelckers
bde3558dc2 - moved the bit size variables to FSoftwareTexture
They are only needed by the software rasterizer.
2018-12-07 02:13:11 +01:00
Christoph Oelckers
18c1a3abe5 - make the FWarpTexture class local to the software renderer.
This class has only meaning for software-based warping so it doesn't have to be a part of the FTexture hierarchy.
Making it a subclass of FSoftwareTexture is fully sufficient.
2018-12-07 00:58:37 +01:00
Christoph Oelckers
4c67785c40 - moved the span and swtruecolor creation code into FSoftwareTexture. 2018-12-07 00:04:39 +01:00
Christoph Oelckers
a4d61e6fb1 - everything compiles again.
As a bonus this already fixes several bugs caused by the botched texture scaling implementation the original texture manager came with.
System cursors are currently disabled because they rely on functionality that needs to be moved to different classes.
2018-12-06 20:12:15 +01:00
Christoph Oelckers
6eab4a882c - narrowing down the public interface of the texture class
Cannot refactor if the entire class is this wide open to everything.
Not complete yet, doesn't fully compile!
2018-12-06 01:11:04 +01:00
Christoph Oelckers
024870ba11 - merged DCanvas and DSimpleCanvas and use a TArray to hold its memory. 2018-11-30 17:02:39 +01:00
Christoph Oelckers
08fe9c375b - use the same formula for calculating 3DMidTex offsets as the renderer when per-sidedef scaling is used.
This reuses the FTexCoordInfo class the hardware renderer had been using to calculate wall texture offsetting.
The software renderers still need this sorted out to bring them in line with the rest of the code, though, but they do not have this code sufficiently well organized to make this a straightforward task.
2018-11-17 18:24:14 +01:00
Christoph Oelckers
b79622bcba - added far stronger restrictions for when the Boom-Texture-Y-offset compatibility flag may trigger.
This had absolutely no sanity checks and unconditionally picked the source texture if one existed.
It should only be done for wall textures, only for those defined in TEXTUREx and only for those where the scale is identical with the underlying texture.
2018-11-01 10:51:57 +01:00
Christoph Oelckers
91df3f8c73 - added option to disable alpha testing for user shaders. 2018-10-31 15:56:20 +01:00
Christoph Oelckers
98e111eba0 - merged the nearly identical wrapper texture classes for the software render and the wiper. 2018-10-29 07:39:33 +01:00
Christoph Oelckers
4a7b1aada7 Merge remote-tracking branch 'remotes/origin/modern'
# Conflicts:
#	wadsrc/static/shaders/glsl/main.fp
2018-07-20 10:19:07 +02:00
Magnus Norddahl
8a500a25f5 - rewrite the user shader support for materials - new syntax is to create a 'Material ProcessMaterial()' function 2018-07-15 23:01:40 +02:00
Christoph Oelckers
33ee0f3c27 Merge branch 'master' into modern
# Conflicts:
#	src/gl/renderer/gl_renderer.cpp
#	src/gl/renderer/gl_renderer.h
#	src/gl/renderer/gl_renderstate.h
#	src/gl/system/gl_framebuffer.cpp
#	src/gl/system/gl_framebuffer.h
2018-07-14 13:18:34 +02:00
usernameak
292458ee2d Custom hardware shaders now can use custom texture units 2018-07-14 12:01:54 +02:00
Christoph Oelckers
8ab68264c1 - removal of all code to handle OpenGL 2. From this commit on the main build of GZDoom will be OpenGL 3.3 or higher.
# Conflicts:
#	src/gl/renderer/gl_renderer.cpp
#	src/gl/shaders/gl_shader.cpp
#	src/gl/system/gl_framebuffer.cpp
#	src/gl_load/gl_interface.cpp
2018-06-15 21:45:05 +02:00
Magnus Norddahl
cadc4f2a30 - add #include support to TEXTURES lump 2018-05-24 21:18:20 +02:00
Christoph Oelckers
64b108ff44 - hw_sprites extracted
- moved the variables for OpenGL's special textures to the texture manager because it is far better suited as a container than the GLRenderer.
2018-04-29 00:09:44 +02:00
Christoph Oelckers
e24b597ae4 - got rid of the gl_info substructure in FTexture and moved all elements into the main class. 2018-04-24 23:51:19 +02:00
Christoph Oelckers
0675315b41 - made FHardwareTexture inherit from an abstract interface to remove all GL dependencies from gl_material.cpp. 2018-04-24 23:06:34 +02:00
Christoph Oelckers
f9a82e66e4 - removed all GL dependencies from gl_material.h. 2018-04-24 22:37:52 +02:00
Christoph Oelckers
5e8a4b96fe - make sure that warping textures never create a warped true color image.
This replaces the old redirection hackery that had to work differently for the legacy render path.
Overriding CopyTrueColorTranslated is far more robust and ensures that no edge cases can reach the GetPixels function, which wasn't the case before.
2018-04-24 21:58:26 +02:00
Christoph Oelckers
c37ff22a05 - removed the intermediate FGLTexture class.
This wasn't serving any real purpose anymore, and all its remaining functionality could be moved to FHardwareTexture
2018-04-24 20:41:52 +02:00
Christoph Oelckers
551691f42a - made FTexture::GetPixels and FTexture::GetColumn non-pure-virtual.
With the software renderer not being used for 2D anymore it would be quite annoying if every texture class had to implement these.
If done properly, the SW renderer should actually be forced to dynamic_cast any texture to a FWorldTexture before using this stuff, but that'd be some pointless overhead better saved.
2018-04-08 21:19:57 +02:00
Christoph Oelckers
221beec979 - added palette shader and fixed a few things. 2018-04-07 12:17:23 +02:00
Christoph Oelckers
52c5328412 - made the glow getter functions members of sector_t. 2018-04-02 13:36:28 +02:00
Christoph Oelckers
d01bc452ba - moved all variables not related to the hardware renderer's texture state out of gl_info. 2018-04-02 13:00:33 +02:00
Christoph Oelckers
1fc4c9801b - moved all GLDEFS parsing into a dedicated source file.
- split gl_postprocessshader.h in two so that the hardware independent part can be used by GLDEFS without pulling in all of OpenGL.
2018-04-02 12:28:20 +02:00
Christoph Oelckers
8b79eedfea - moved CreateTexBuffer out of the GL code.
This is merely a buffer creation function with no dependencies on the renderer.
2018-04-01 14:38:48 +02:00
Christoph Oelckers
e49cd2cb83 - moved the hires replacement and upscaling code out of the GL classes into FTexture.
This theoretically means that the software renderer could access this data as well - if it just had been written with a more flexible texture interface.
However, as things stand, this may require quite a bit of work to achieve.
2018-04-01 10:41:04 +02:00
Christoph Oelckers
bc485a7f2c - moved a large portion of gl_textures.cpp into the main files for the implementing classes.
The old organization made sense when ZDoom still was a thing but now it'd be better if all pure data with no dependence on renderer implementation details was moved out.
A separation between GL2 and GL3+4 renderers looks to be inevitable and the more data is out of the renderer when that happens, the better.
2018-03-31 19:20:59 +02:00
Christoph Oelckers
410d6817b2 - minor cleanup on the texture layer data in FTexture. 2018-03-31 12:27:41 +02:00