mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-11-17 10:00:54 +00:00
040cb17370
# Conflicts: # CMakeLists.txt # libraries/glslang/OGLCompilersDLL/CMakeLists.txt # libraries/glslang/OGLCompilersDLL/InitializeDll.cpp # libraries/glslang/OGLCompilersDLL/InitializeDll.h # libraries/glslang/glslang/CMakeLists.txt # libraries/glslang/glslang/GenericCodeGen/CodeGen.cpp # libraries/glslang/glslang/GenericCodeGen/Link.cpp # libraries/glslang/glslang/Include/BaseTypes.h # libraries/glslang/glslang/Include/Common.h # libraries/glslang/glslang/Include/ConstantUnion.h # libraries/glslang/glslang/Include/InfoSink.h # libraries/glslang/glslang/Include/InitializeGlobals.h # libraries/glslang/glslang/Include/PoolAlloc.h # libraries/glslang/glslang/Include/ResourceLimits.h # libraries/glslang/glslang/Include/ShHandle.h # libraries/glslang/glslang/Include/Types.h # libraries/glslang/glslang/Include/arrays.h # libraries/glslang/glslang/Include/intermediate.h # libraries/glslang/glslang/Include/revision.h # libraries/glslang/glslang/Include/revision.template # libraries/glslang/glslang/MachineIndependent/Constant.cpp # libraries/glslang/glslang/MachineIndependent/InfoSink.cpp # libraries/glslang/glslang/MachineIndependent/Initialize.cpp # libraries/glslang/glslang/MachineIndependent/Initialize.h # libraries/glslang/glslang/MachineIndependent/IntermTraverse.cpp # libraries/glslang/glslang/MachineIndependent/Intermediate.cpp # libraries/glslang/glslang/MachineIndependent/LiveTraverser.h # libraries/glslang/glslang/MachineIndependent/ParseContextBase.cpp # libraries/glslang/glslang/MachineIndependent/ParseHelper.cpp # libraries/glslang/glslang/MachineIndependent/ParseHelper.h # libraries/glslang/glslang/MachineIndependent/PoolAlloc.cpp # libraries/glslang/glslang/MachineIndependent/RemoveTree.cpp # libraries/glslang/glslang/MachineIndependent/RemoveTree.h # libraries/glslang/glslang/MachineIndependent/Scan.cpp # libraries/glslang/glslang/MachineIndependent/Scan.h # libraries/glslang/glslang/MachineIndependent/ScanContext.h # libraries/glslang/glslang/MachineIndependent/ShaderLang.cpp # libraries/glslang/glslang/MachineIndependent/SymbolTable.cpp # libraries/glslang/glslang/MachineIndependent/SymbolTable.h # libraries/glslang/glslang/MachineIndependent/Versions.cpp # libraries/glslang/glslang/MachineIndependent/Versions.h # libraries/glslang/glslang/MachineIndependent/attribute.cpp # libraries/glslang/glslang/MachineIndependent/attribute.h # libraries/glslang/glslang/MachineIndependent/gl_types.h # libraries/glslang/glslang/MachineIndependent/glslang.y # libraries/glslang/glslang/MachineIndependent/glslang_tab.cpp # libraries/glslang/glslang/MachineIndependent/glslang_tab.cpp.h # libraries/glslang/glslang/MachineIndependent/intermOut.cpp # libraries/glslang/glslang/MachineIndependent/iomapper.cpp # libraries/glslang/glslang/MachineIndependent/iomapper.h # libraries/glslang/glslang/MachineIndependent/limits.cpp # libraries/glslang/glslang/MachineIndependent/linkValidate.cpp # libraries/glslang/glslang/MachineIndependent/localintermediate.h # libraries/glslang/glslang/MachineIndependent/parseConst.cpp # libraries/glslang/glslang/MachineIndependent/parseVersions.h # libraries/glslang/glslang/MachineIndependent/pch.cpp # libraries/glslang/glslang/MachineIndependent/pch.h # libraries/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp # libraries/glslang/glslang/MachineIndependent/preprocessor/PpAtom.cpp # libraries/glslang/glslang/MachineIndependent/preprocessor/PpContext.cpp # libraries/glslang/glslang/MachineIndependent/preprocessor/PpContext.h # libraries/glslang/glslang/MachineIndependent/preprocessor/PpScanner.cpp # libraries/glslang/glslang/MachineIndependent/preprocessor/PpTokens.cpp # libraries/glslang/glslang/MachineIndependent/preprocessor/PpTokens.h # libraries/glslang/glslang/MachineIndependent/propagateNoContraction.cpp # libraries/glslang/glslang/MachineIndependent/propagateNoContraction.h # libraries/glslang/glslang/MachineIndependent/reflection.cpp # libraries/glslang/glslang/MachineIndependent/reflection.h # libraries/glslang/glslang/OSDependent/Unix/CMakeLists.txt # libraries/glslang/glslang/OSDependent/Unix/ossource.cpp # libraries/glslang/glslang/OSDependent/Windows/CMakeLists.txt # libraries/glslang/glslang/OSDependent/Windows/main.cpp # libraries/glslang/glslang/OSDependent/Windows/ossource.cpp # libraries/glslang/glslang/OSDependent/osinclude.h # libraries/glslang/glslang/Public/ShaderLang.h # libraries/glslang/glslang/updateGrammar # libraries/glslang/spirv/CMakeLists.txt # libraries/glslang/spirv/GLSL.ext.AMD.h # libraries/glslang/spirv/GLSL.ext.EXT.h # libraries/glslang/spirv/GLSL.ext.KHR.h # libraries/glslang/spirv/GLSL.ext.NV.h # libraries/glslang/spirv/GLSL.std.450.h # libraries/glslang/spirv/GlslangToSpv.cpp # libraries/glslang/spirv/GlslangToSpv.h # libraries/glslang/spirv/InReadableOrder.cpp # libraries/glslang/spirv/Logger.cpp # libraries/glslang/spirv/Logger.h # libraries/glslang/spirv/SPVRemapper.cpp # libraries/glslang/spirv/SPVRemapper.h # libraries/glslang/spirv/SpvBuilder.cpp # libraries/glslang/spirv/SpvBuilder.h # libraries/glslang/spirv/SpvPostProcess.cpp # libraries/glslang/spirv/SpvTools.cpp # libraries/glslang/spirv/SpvTools.h # libraries/glslang/spirv/bitutils.h # libraries/glslang/spirv/disassemble.cpp # libraries/glslang/spirv/disassemble.h # libraries/glslang/spirv/doc.cpp # libraries/glslang/spirv/doc.h # libraries/glslang/spirv/hex_float.h # libraries/glslang/spirv/spirv.hpp # libraries/glslang/spirv/spvIR.h # src/CMakeLists.txt
149 lines
3.4 KiB
C++
149 lines
3.4 KiB
C++
// Data reader interface for uniform access
|
|
|
|
// File_Extractor 0.4.0
|
|
#ifndef DATA_READER_H
|
|
#define DATA_READER_H
|
|
|
|
#include "blargg_common.h"
|
|
|
|
#ifdef HAVE_ZLIB_H
|
|
#include <zlib.h>
|
|
#endif
|
|
|
|
// Supports reading and finding out how many bytes are remaining
|
|
class Data_Reader {
|
|
public:
|
|
virtual ~Data_Reader() { }
|
|
|
|
static const char eof_error []; // returned by read() when request goes beyond end
|
|
|
|
// Read at most count bytes and return number actually read, or <= 0 if error
|
|
virtual long read_avail( void*, long n ) = 0;
|
|
|
|
// Read exactly count bytes and return error if they couldn't be read
|
|
virtual blargg_err_t read( void*, long count );
|
|
|
|
// Number of bytes remaining until end of file
|
|
virtual long remain() const = 0;
|
|
|
|
// Read and discard count bytes
|
|
virtual blargg_err_t skip( long count );
|
|
|
|
public:
|
|
Data_Reader() { }
|
|
typedef blargg_err_t error_t; // deprecated
|
|
private:
|
|
// noncopyable
|
|
Data_Reader( const Data_Reader& );
|
|
Data_Reader& operator = ( const Data_Reader& );
|
|
};
|
|
|
|
// Supports seeking in addition to Data_Reader operations
|
|
class File_Reader : public Data_Reader {
|
|
public:
|
|
// Size of file
|
|
virtual long size() const = 0;
|
|
|
|
// Current position in file
|
|
virtual long tell() const = 0;
|
|
|
|
// Go to new position
|
|
virtual blargg_err_t seek( long ) = 0;
|
|
|
|
long remain() const;
|
|
blargg_err_t skip( long n );
|
|
};
|
|
|
|
// Disk file reader
|
|
class Std_File_Reader : public File_Reader {
|
|
public:
|
|
blargg_err_t open( const char* path );
|
|
void close();
|
|
|
|
public:
|
|
Std_File_Reader();
|
|
~Std_File_Reader();
|
|
long size() const;
|
|
blargg_err_t read( void*, long );
|
|
long read_avail( void*, long );
|
|
long tell() const;
|
|
blargg_err_t seek( long );
|
|
private:
|
|
void* file_; // Either FILE* or zlib's gzFile
|
|
#if 0//[ZDOOM:unneeded] def HAVE_ZLIB_H
|
|
long size_; // TODO: Fix ABI compat
|
|
#endif /* HAVE_ZLIB_H */
|
|
};
|
|
|
|
// Treats range of memory as a file
|
|
class Mem_File_Reader : public File_Reader {
|
|
public:
|
|
Mem_File_Reader( const void*, long size );
|
|
#ifdef HAVE_ZLIB_H
|
|
~Mem_File_Reader( );
|
|
#endif /* HAVE_ZLIB_H */
|
|
|
|
public:
|
|
long size() const;
|
|
long read_avail( void*, long );
|
|
long tell() const;
|
|
blargg_err_t seek( long );
|
|
private:
|
|
#ifdef HAVE_ZLIB_H
|
|
bool gz_decompress();
|
|
#endif /* HAVE_ZLIB_H */
|
|
|
|
const char* m_begin;
|
|
long m_size;
|
|
long m_pos;
|
|
#ifdef HAVE_ZLIB_H
|
|
bool m_ownedPtr = false; // set if we must free m_begin
|
|
#endif /* HAVE_ZLIB_H */
|
|
};
|
|
|
|
|
|
// Makes it look like there are only count bytes remaining
|
|
class Subset_Reader : public Data_Reader {
|
|
public:
|
|
Subset_Reader( Data_Reader*, long count );
|
|
|
|
public:
|
|
long remain() const;
|
|
long read_avail( void*, long );
|
|
private:
|
|
Data_Reader* in;
|
|
long remain_;
|
|
};
|
|
|
|
// Joins already-read header and remaining data into original file (to avoid seeking)
|
|
class Remaining_Reader : public Data_Reader {
|
|
public:
|
|
Remaining_Reader( void const* header, long size, Data_Reader* );
|
|
|
|
public:
|
|
long remain() const;
|
|
long read_avail( void*, long );
|
|
blargg_err_t read( void*, long );
|
|
private:
|
|
char const* header;
|
|
char const* header_end;
|
|
Data_Reader* in;
|
|
long read_first( void* out, long count );
|
|
};
|
|
|
|
// Invokes callback function to read data. Size of data must be specified in advance.
|
|
class Callback_Reader : public Data_Reader {
|
|
public:
|
|
typedef const char* (*callback_t)( void* data, void* out, int count );
|
|
Callback_Reader( callback_t, long size, void* data = 0 );
|
|
public:
|
|
long read_avail( void*, long );
|
|
blargg_err_t read( void*, long );
|
|
long remain() const;
|
|
private:
|
|
callback_t const callback;
|
|
void* const data;
|
|
long remain_;
|
|
};
|
|
|
|
#endif
|