Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /******************************************************************************/
- /******************************************************************************/
- //"opengl_metaballs_2025-06-26\include\sound_stuff.hpp":
- // This file should not be included on its own,
- // but rather as part of "public_stuff.hpp"!
- //
- // (Most of this is lifted straight from kit_sdl2, so if some
- // things here are inconsisent with the rest, that's why!)
- //
- // ALSO, DO NOT USE THIS AS REFERENCE IN A FUTURE PROJECT,
- // BECAUSE IT'S A HACKY MESS!
- #ifndef _SOUND_STUFF_HPP
- #define _SOUND_STUFF_HPP
- #ifdef SOUND_STUFF_USED
- #include <windows.h>
- //#define AUDIODATA_FILELOAD_USED
- #define AUDIODATA_SAVEAUDIO_USED
- #define AUDIODATA_CONVERTFORMAT_USED
- #define GET_AUDIO_BITSIZE(x) (x & (0xFF ))
- #define GET_AUDIO_ISFLOAT(x) (x & (1<< 8))
- #define GET_AUDIO_ISBIGENDIAN(x) (x & (1<<12))
- #define GET_AUDIO_ISSIGNED(x) (x & (1<<15))
- #define GET_AUDIO_BYTESIZE(x) (GET_AUDIO_BITSIZE(x)/8)
- enum AudioSampleFormatEnum {
- SMPFMT_U8 = 0x0008, //unsigned 8-bit samples
- SMPFMT_S8 = 0x8008, // signed 8-bit samples
- SMPFMT_U16LSB = 0x0010, //unsigned 16-bit samples
- SMPFMT_S16LSB = 0x8010, // signed 16-bit samples
- SMPFMT_S32LSB = 0x8020, // signed 32-bit samples
- SMPFMT_F32LSB = 0x8120, //32-bit floating point samples
- SMPFMT_U16MSB = 0x1010, //same as LSB, except with big-endian byte order
- SMPFMT_S16MSB = 0x9010, //same as LSB, except with big-endian byte order
- SMPFMT_S32MSB = 0x9020, //same as LSB, except with big-endian byte order
- SMPFMT_F32MSB = 0x9120, //same as LSB, except with big-endian byte order
- SMPFMT_S24LSB = 0x8018, // signed 24-bit samples
- SMPFMT_F64LSB = 0x8140, //64-bit floating point samples
- SMPFMT_S24MSB = 0x9018, //same as LSB, except with big-endian byte order
- SMPFMT_F64MSB = 0x9140, //same as LSB, except with big-endian byte order
- //aliases
- SMPFMT_U16 = SMPFMT_U16LSB,
- SMPFMT_S16 = SMPFMT_S16LSB,
- SMPFMT_S24 = SMPFMT_S24LSB,
- SMPFMT_S32 = SMPFMT_S32LSB,
- SMPFMT_F32 = SMPFMT_F32LSB,
- SMPFMT_F64 = SMPFMT_F64LSB,
- //may also be used as a wildcard
- //(as in this may be associated with a value != 0xFFFF)
- SMPFMT_UKNOWN = 0xFFFF,
- };
- /******************************************************************************/
- struct AudioDataHeader;
- // The pointer this returns MUST have been allocated with mem_alloc()
- // Also, ->samples must not be a separate allocation! samples must be contiguous
- // and on the same memory block as the header itself!
- //
- // (Basically, header_ptr->samples = (u8*)header_ptr+header_ptr->headerSize)
- typedef AudioDataHeader* (*AudioDataLoaderCallback)(const char* filePath);
- typedef bool (*AudioDataSaverCallback)(const char* filePath,
- AudioDataHeader& header_in);
- // File signature = "kPxM" (no null terminator)
- #define KPM_FILE_SIG (0x4D78506B)
- // This struct is identical to a ".kpm" file as it contains the same header data
- struct AudioDataHeader { //72B (0x48B)
- u32 magic; // (0x00) = KPM_FILE_SIG = 0x4D78506B = "kPxM"
- u16 format; // (0x04) = one of AudioSampleFormatEnum if fmt_version == 1
- u16 headerSize; // (0x06) = must be >=sizeof(AudioDataHeader)
- u64 dataSize; // (0x08) = size of audio data, in bytes
- u64 loopStart; // (0x10) = which sample to loop back to
- u64 loopEnd; // (0x18) = which sample to jump back to loopStart on
- u64 numSamples; // (0x20) = # of sample frames in audio data
- u32 sampleRate; // (0x28) = the audio data's sample rate, in Hz
- u32 bitRate; // (0x2C) = the audio's bit rate (per second)
- u16 loopCount; // (0x30) = # of times to loop audio (0 = no loop, 0xFFFF = inf loop)
- u16 channels; // (0x32) = # of interlaced channels in the audio data
- u8 _reserved; // (0x34)
- u8 fmt_version; // (0x35) = 0=kit_w32, 1=kit_sdl2
- u8 mode; // (0x36) = 0 for normal PCM or float data types
- u8 metadata_type; // (0x37) = 0 for no metadata
- void* samples; // (0x38) = the audio's sample data (appears as nullptr in file)
- void* userdata; // (0x40) = user-defined (also appears nullptr in file)
- // (0x48) = (start of sample data, assuming a .kpm file)
- // Only useful #ifdef _DEBUG
- void printHeader(const char* name = nullptr);
- };
- class AudioData {
- bool _allocate_hdr(u16 headerSize, u64 dataSize);
- public:
- AudioDataHeader* hdr = nullptr;
- StereoF32 volume = {1.0f, 1.0f};
- // Create with everything zeroed out, except headerSize, dataSize, and samples
- AudioData(u16 headerSize, u64 dataSize){ _allocate_hdr(headerSize,dataSize); }
- // Create with zeroed out sample data
- AudioData(AudioSampleFormatEnum format,
- u64 numSamples, u16 channels, u32 sampleRate);
- #ifdef AUDIODATA_FILELOAD_USED
- // Create from an audio file of a specific file format
- AudioData(const char* filePath, AudioDataLoaderCallback callback);
- #endif
- ~AudioData();
- inline void printHeader(const char* name = nullptr)
- { if(hdr != nullptr) hdr->printHeader(name); }
- #ifdef AUDIODATA_SAVEAUDIO_USED
- // (This will overwrite any file named filePath! make sure to check
- // with fileio_exists() unless you intend to overwrite the previous file)
- bool saveAudio(const char* filePath, AudioDataSaverCallback callback);
- #endif
- #ifdef AUDIODATA_CONVERTFORMAT_USED
- // The conversion method used is slightly inaccurate for a number of reasons.
- // This function only serves as a convenience, where accuracy isn't
- // needed beyond sounding more or less the same.
- //
- // (This will return early if hdr->format == format,
- // since no conversion would be necessary)
- bool convertFormat(AudioSampleFormatEnum format);
- #endif
- };
- /******************************************************************************/
- struct SoundEngineTrack { //88B
- const AudioDataHeader* audio;
- // Time at the point of audio being queued, in seconds
- f64 timestamp;
- f64 position;
- f64 spd_old;
- f64 spd_new;
- f64 spdDelta;
- StereoF32 vol_old;
- StereoF32 vol_new;
- StereoF32 volDelta;
- StereoF32 volMaster;
- u16 loops;
- bool stopping;
- char _padding[5];
- };
- // WARNING: IF A CURRENTLY PLAYING AUDIO CLIP IS DESTROYED BEFORE
- // SOUNDENGINE, AN ACCESS VIOLATION MIGHT OCCUR IF ACTIVELY MIXING!
- class SoundEngine {
- SoundEngineTrack _tracks[64];
- CRITICAL_SECTION _lock;
- u16 _tracks_len = 64;
- u8 _padding;
- public:
- // (ALL TRACKS MUST BE FULLY STOPPED BEFORE CHANGING SAMPLERATE,
- // AS SAMPLERATE IS USED TO CALCULATE SOME AUDIO CLIP INFO!)
- bool stopIfVolumeIsZero = true;
- f32 sampleRate = (f32)sample_rate; // The *device*'s sample rate
- StereoF32 volumeMaster = {1.0f, 1.0f};
- // (Only the left channel of volumeMaster
- // is used if the source audio is mono)
- SoundEngine(u16 numTracks = 64, f32 _sampleRate = (f32)sample_rate);
- ~SoundEngine();
- bool isTrackPlaying(u16 track);
- u16 getActiveTracks();
- inline u16 getTrackCount(){ return _tracks_len; }
- // Sets the volume multiplier of a given track,
- // or all active tracks if track == 0xFFFF
- //
- // When forced == true, the volume state is set instantly, instead of
- // being interpolated over the course of the next call to mixTracks()
- bool setVolume(f32 volumeL, f32 volumeR,
- u16 track = 0xFFFF, bool forced = false);
- // Sets the speed multiplier of a given track,
- // or all active tracks if track == 0xFFFF
- //
- // Forced has the same behavior as setVolume
- bool setSpeed(f64 speedNew,
- u16 track = 0xFFFF, bool forced = false);
- // Sets the change in volume over time for a given track.
- // or all active tracks if track == 0xFFFF
- //
- // DeltaSeconds is the time it will take for the volume
- // to go from 0.0x -> 1.0x (or vice versa)
- bool setVolumeDelta(f32 deltaSecondsL, f32 deltaSecondsR,
- u16 track = 0xFFFF);
- // Same behavior as setVolumeDelta, except applied to the speed multiplier
- bool setSpeedDelta(f64 deltaSeconds,
- u16 track = 0xFFFF);
- // Returns the track the audio was queued into,
- // or 0xFFFF if no empty track was found,
- // or 0xFFFE on error
- u16 play(const AudioData& audio, // (only f32 or StereoF32 samples allowed!)
- f32 volumeL = 1.0f, f32 volumeR = 1.0f, f64 speed = 1.0);
- // (Make sure to stop all tracks before freeing any instances of AudioData,
- // as to avoid any issues related to dangling pointers and whatnot)
- //
- // (Also, unless forced is set to true, this function
- // won't work if stopIfVolumeIsZero is false!)
- bool stop(u16 track = 0xFFFF, bool forced = false);
- // Returns false if timeout is reached, true otherwise
- //
- // Set timeoutSeconds to 0 to wait indefinitely
- bool waitForTrack(f64 timeoutSeconds = 0, u16 track = 0xFFFF);
- // buffer_len is in elements, not bytes
- //
- // Returns referenceTimestamp, or 0.0 on error
- f64 mixTracks(StereoF32* buffer, size_t buffer_len,
- f64 referenceTimestamp = timeGetSeconds());
- };
- #endif /* SOUND_STUFF_USED */
- #endif /* _SOUND_STUFF_HPP */
- /******************************************************************************/
- /******************************************************************************/
- //"opengl_metaballs_2025-06-26\include\win32\audio.hpp":
- #ifndef _WIN32_AUDIO_HPP
- #define _WIN32_AUDIO_HPP
- #include <public_stuff.hpp>
- #include <windows.h>
- #include <mmsystem.h>
- #define timeGetDevCaps _Winmm_func.timeGetDevCaps_
- #define timeBeginPeriod _Winmm_func.timeBeginPeriod_
- #define waveOutGetNumDevs _Winmm_func.waveOutGetNumDevs_
- #define waveOutGetDevCapsA _Winmm_func.waveOutGetDevCapsA_
- #define waveOutGetVolume _Winmm_func.waveOutGetVolume_
- #define waveOutSetVolume _Winmm_func.waveOutSetVolume_
- #define waveOutGetErrorTextA _Winmm_func.waveOutGetErrorTextA_
- #define waveOutOpen _Winmm_func.waveOutOpen_
- #define waveOutClose _Winmm_func.waveOutClose_
- #define waveOutPrepareHeader _Winmm_func.waveOutPrepareHeader_
- #define waveOutUnprepareHeader _Winmm_func.waveOutUnprepareHeader_
- #define waveOutWrite _Winmm_func.waveOutWrite_
- #define waveOutPause _Winmm_func.waveOutPause_
- #define waveOutRestart _Winmm_func.waveOutRestart_
- #define waveOutReset _Winmm_func.waveOutReset_
- #define waveOutBreakLoop _Winmm_func.waveOutBreakLoop_
- #define waveOutGetPosition _Winmm_func.waveOutGetPosition_
- #define waveOutGetPitch _Winmm_func.waveOutGetPitch_
- #define waveOutSetPitch _Winmm_func.waveOutSetPitch_
- #define waveOutGetPlaybackRate _Winmm_func.waveOutGetPlaybackRate_
- #define waveOutSetPlaybackRate _Winmm_func.waveOutSetPlaybackRate_
- #define waveOutGetID _Winmm_func.waveOutGetID_
- #define waveOutMessage _Winmm_func.waveOutMessage_
- union _Winmm_func_t {
- FARPROC ptrs[1];
- struct {
- // Idk why these first two are in WinMM at all, but whatever
- MMRESULT (WINAPI *timeGetDevCaps_)(LPTIMECAPS, UINT);
- MMRESULT (WINAPI *timeBeginPeriod_)(UINT);
- //UINT (WINAPI *waveOutGetNumDevs_)(void);
- MMRESULT (WINAPI *waveOutGetDevCapsA_)(UINT_PTR, LPWAVEOUTCAPSA, UINT);
- //MMRESULT (WINAPI *waveOutGetVolume_)(HWAVEOUT, LPDWORD);
- MMRESULT (WINAPI *waveOutSetVolume_)(HWAVEOUT, DWORD);
- //MMRESULT (WINAPI *waveOutGetErrorTextA_)(MMRESULT, LPSTR, UINT);
- MMRESULT (WINAPI *waveOutOpen_)(LPHWAVEOUT, UINT, LPCWAVEFORMATEX, DWORD_PTR, DWORD_PTR, DWORD);
- //MMRESULT (WINAPI *waveOutClose_)(HWAVEOUT);
- MMRESULT (WINAPI *waveOutPrepareHeader_)(HWAVEOUT, LPWAVEHDR, UINT);
- //MMRESULT (WINAPI *waveOutUnprepareHeader_)(HWAVEOUT, LPWAVEHDR, UINT);
- MMRESULT (WINAPI *waveOutWrite_)(HWAVEOUT, LPWAVEHDR, UINT);
- MMRESULT (WINAPI *waveOutPause_)(HWAVEOUT);
- //MMRESULT (WINAPI *waveOutRestart_)(HWAVEOUT);
- //MMRESULT (WINAPI *waveOutReset_)(HWAVEOUT);
- //MMRESULT (WINAPI *waveOutBreakLoop_)(HWAVEOUT);
- //MMRESULT (WINAPI *waveOutGetPosition_)(HWAVEOUT, LPMMTIME, UINT);
- //MMRESULT (WINAPI *waveOutGetPitch_)(HWAVEOUT, LPDWORD);
- //MMRESULT (WINAPI *waveOutSetPitch_)(HWAVEOUT, DWORD);
- //MMRESULT (WINAPI *waveOutGetPlaybackRate_)(HWAVEOUT, LPDWORD);
- //MMRESULT (WINAPI *waveOutSetPlaybackRate_)(HWAVEOUT, DWORD);
- //MMRESULT (WINAPI *waveOutGetID_)(HWAVEOUT, LPUINT);
- //MMRESULT (WINAPI *waveOutMessage_)(HWAVEOUT, UINT, DWORD_PTR, DWORD_PTR);
- };
- };
- extern _Winmm_func_t _Winmm_func;
- extern char _Winmm_names_a[];
- extern char _Winmm_names_b[];
- /******************************************************************************/
- // Stereo audio samples as two 16-bit signed ints
- struct StereoS16 { s16 l,r; };
- int WaveOutInit();
- void WaveOutQuit();
- #endif /* _WIN32_AUDIO_HPP */
- /******************************************************************************/
- /******************************************************************************/
- //"opengl_metaballs_2025-06-26\include\win32\input.hpp":
- #ifndef _WIN32_INPUT_HPP
- #define _WIN32_INPUT_HPP
- #include <windows.h>
- #include <public_stuff.hpp>
- int InputInit();
- void InputQuit();
- union Event; // Forward declaration
- // Returns false if queue is full
- bool AddToEventQueue(Event& event);
- // Returns a EVENT_NULL event if queue is empty
- Event RemoveFromEventQueue();
- #endif /* _WIN32_INPUT_HPP */
- /******************************************************************************/
- /******************************************************************************/
- //"opengl_metaballs_2025-06-26\include\win32\opengl.hpp":
- #ifndef _OPENGL_HPP
- #define _OPENGL_HPP
- #define WIN32_LEAN_AND_MEAN
- #include <windows.h>
- #include <GL/gl.h>
- #include <GL/glext.h>
- #include <GL/glcorearb.h>
- // wgl (OpenGL 1.1):
- #define WGL_1_1_LEN 16
- #define wglCopyContext _Opengl32_func.wglCopyContext_
- #define wglCreateContext _Opengl32_func.wglCreateContext_
- #define wglCreateLayerContext _Opengl32_func.wglCreateLayerContext_
- #define wglDeleteContext _Opengl32_func.wglDeleteContext_
- #define wglDescribeLayerPlane _Opengl32_func.wglDescribeLayerPlane_
- #define wglGetCurrentContext _Opengl32_func.wglGetCurrentContext_
- #define wglGetCurrentDC _Opengl32_func.wglGetCurrentDC_
- #define wglGetLayerPaletteEntries _Opengl32_func.wglGetLayerPaletteEntries_
- #define wglGetProcAddress _Opengl32_func.wglGetProcAddress_
- #define wglMakeCurrent _Opengl32_func.wglMakeCurrent_
- #define wglRealizeLayerPalette _Opengl32_func.wglRealizeLayerPalette_
- #define wglSetLayerPaletteEntries _Opengl32_func.wglSetLayerPaletteEntries_
- #define wglShareLists _Opengl32_func.wglShareLists_
- #define wglSwapLayerBuffers _Opengl32_func.wglSwapLayerBuffers_
- #define wglUseFontBitmapsA _Opengl32_func.wglUseFontBitmapsA_
- #define wglUseFontOutlinesA _Opengl32_func.wglUseFontOutlinesA_
- // gl (OpenGL 1.1):
- #define GL_1_1_LEN 9
- #define glClearColor _Opengl32_func.glClearColor_
- #define glClear _Opengl32_func.glClear_
- #define glPolygonMode _Opengl32_func.glPolygonMode_
- #define glViewport _Opengl32_func.glViewport_
- #define glGetBooleanv _Opengl32_func.glGetBooleanv_
- #define glGetDoublev _Opengl32_func.glGetDoublev_
- #define glGetFloatv _Opengl32_func.glGetFloatv_
- #define glGetIntegerv _Opengl32_func.glGetIntegerv_
- #define glGetError _Opengl32_func.glGetError_
- // The rest of the wgl functions:
- // ...
- // The rest of the gl functions:
- #define glCreateShader _Opengl32_func.glCreateShader_
- #define glShaderSource _Opengl32_func.glShaderSource_
- #define glCompileShader _Opengl32_func.glCompileShader_
- #define glGetShaderiv _Opengl32_func.glGetShaderiv_
- #define glGetShaderInfoLog _Opengl32_func.glGetShaderInfoLog_
- #define glCreateProgram _Opengl32_func.glCreateProgram_
- #define glAttachShader _Opengl32_func.glAttachShader_
- #define glLinkProgram _Opengl32_func.glLinkProgram_
- #define glGetProgramInfoLog _Opengl32_func.glGetProgramInfoLog_
- #define glDeleteShader _Opengl32_func.glDeleteShader_
- #define glGenVertexArrays _Opengl32_func.glGenVertexArrays_
- #define glGenBuffers _Opengl32_func.glGenBuffers_
- #define glBindVertexArray _Opengl32_func.glBindVertexArray_
- #define glBindBuffer _Opengl32_func.glBindBuffer_
- #define glBufferData _Opengl32_func.glBufferData_
- #define glVertexAttribPointer _Opengl32_func.glVertexAttribPointer_
- #define glVertexAttribIPointer _Opengl32_func.glVertexAttribIPointer_
- #define glEnableVertexAttribArray _Opengl32_func.glEnableVertexAttribArray_
- #define glDisableVertexAttribArray _Opengl32_func.glDisableVertexAttribArray_
- #define glUseProgram _Opengl32_func.glUseProgram_
- #define glDrawArrays _Opengl32_func.glDrawArrays_
- #define glDeleteVertexArrays _Opengl32_func.glDeleteVertexArrays_
- #define glDeleteBuffers _Opengl32_func.glDeleteBuffers_
- #define glDeleteProgram _Opengl32_func.glDeleteProgram_
- #define glGetProgramiv _Opengl32_func.glGetProgramiv_
- #define glBufferSubData _Opengl32_func.glBufferSubData_
- #define glMapBufferRange _Opengl32_func.glMapBufferRange_
- #define glGenTextures _Opengl32_func.glGenTextures_
- #define glBindTexture _Opengl32_func.glBindTexture_
- #define glTexBuffer _Opengl32_func.glTexBuffer_
- #define glGetUniformLocation _Opengl32_func.glGetUniformLocation_
- #define glUniform1f _Opengl32_func.glUniform1f_
- #define glUniform2f _Opengl32_func.glUniform2f_
- #define glUniform3f _Opengl32_func.glUniform3f_
- #define glUniform4f _Opengl32_func.glUniform4f_
- #define glUniform1i _Opengl32_func.glUniform1i_
- #define glUniform2i _Opengl32_func.glUniform2i_
- #define glUniform3i _Opengl32_func.glUniform3i_
- #define glUniform4i _Opengl32_func.glUniform4i_
- #define glUniform1ui _Opengl32_func.glUniform1ui_
- #define glUniform2ui _Opengl32_func.glUniform2ui_
- #define glUniform3ui _Opengl32_func.glUniform3ui_
- #define glUniform4ui _Opengl32_func.glUniform4ui_
- #define glUniform1fv _Opengl32_func.glUniform1fv_
- #define glUniform2fv _Opengl32_func.glUniform2fv_
- #define glUniform3fv _Opengl32_func.glUniform3fv_
- #define glUniform4fv _Opengl32_func.glUniform4fv_
- #define glUniform1iv _Opengl32_func.glUniform1iv_
- #define glUniform2iv _Opengl32_func.glUniform2iv_
- #define glUniform3iv _Opengl32_func.glUniform3iv_
- #define glUniform4iv _Opengl32_func.glUniform4iv_
- #define glUniform1uiv _Opengl32_func.glUniform1uiv_
- #define glUniform2uiv _Opengl32_func.glUniform2uiv_
- #define glUniform3uiv _Opengl32_func.glUniform3uiv_
- #define glUniform4uiv _Opengl32_func.glUniform4uiv_
- #define glUniformMatrix2fv _Opengl32_func.glUniformMatrix2fv_
- #define glUniformMatrix3fv _Opengl32_func.glUniformMatrix3fv_
- #define glUniformMatrix4fv _Opengl32_func.glUniformMatrix4fv_
- #define glUniformMatrix2x3fv _Opengl32_func.glUniformMatrix2x3fv_
- #define glUniformMatrix3x2fv _Opengl32_func.glUniformMatrix3x2fv_
- #define glUniformMatrix2x4fv _Opengl32_func.glUniformMatrix2x4fv_
- #define glUniformMatrix4x2fv _Opengl32_func.glUniformMatrix4x2fv_
- #define glUniformMatrix3x4fv _Opengl32_func.glUniformMatrix3x4fv_
- #define glUniformMatrix4x3fv _Opengl32_func.glUniformMatrix4x3fv_
- #define glDeleteTextures _Opengl32_func.glDeleteTextures_
- // wglCreateContextAttribsARB is loaded and handled separately to _Opengl32_func
- #define wglCreateContextAttribsARB wglCreateContextAttribsARB_
- typedef HGLRC (WINAPI *PFNWGLCREATECONTEXTATTRIBSARBPROC)(HDC,HGLRC,const int*);
- extern PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribsARB_;
- #undef wglUseFontBitmaps
- #undef wglUseFontOutlines
- #define wglUseFontBitmaps wglUseFontBitmapsA
- #define wglUseFontOutlines wglUseFontOutlinesA
- union _Opengl32_func_t {
- struct {
- PROC ptrs_wgl_1_1[WGL_1_1_LEN];
- PROC ptrs_gl_1_1[GL_1_1_LEN];
- PROC ptrs_wgl[1];
- PROC ptrs_gl[1];
- };
- struct {
- // wgl (OpenGL 1.1):
- WINBOOL (WINAPI *wglCopyContext_)(HGLRC,HGLRC,UINT);
- HGLRC (WINAPI *wglCreateContext_)(HDC);
- HGLRC (WINAPI *wglCreateLayerContext_)(HDC,int);
- WINBOOL (WINAPI *wglDeleteContext_)(HGLRC);
- WINBOOL (WINAPI *wglDescribeLayerPlane_)(HDC,int,int,UINT,LPLAYERPLANEDESCRIPTOR);
- HGLRC (WINAPI *wglGetCurrentContext_)(VOID);
- HDC (WINAPI *wglGetCurrentDC_)(VOID);
- int (WINAPI *wglGetLayerPaletteEntries_)(HDC,int,int,int,COLORREF*);
- PROC (WINAPI *wglGetProcAddress_)(LPCSTR);
- WINBOOL (WINAPI *wglMakeCurrent_)(HDC,HGLRC);
- WINBOOL (WINAPI *wglRealizeLayerPalette_)(HDC,int,WINBOOL);
- int (WINAPI *wglSetLayerPaletteEntries_)(HDC,int,int,int,CONST COLORREF*);
- WINBOOL (WINAPI *wglShareLists_)(HGLRC,HGLRC);
- WINBOOL (WINAPI *wglSwapLayerBuffers_)(HDC,UINT);
- WINBOOL (WINAPI *wglUseFontBitmapsA_)(HDC,DWORD,DWORD,DWORD);
- WINBOOL (WINAPI *wglUseFontOutlinesA_)(HDC,DWORD,DWORD,DWORD,FLOAT,FLOAT,int,LPGLYPHMETRICSFLOAT);
- // gl (OpenGL 1.1):
- void (APIENTRY *glClearColor_)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
- void (APIENTRY *glClear_)(GLbitfield mask);
- void (APIENTRY *glPolygonMode_)(GLenum face, GLenum mode);
- void (APIENTRY *glViewport_)(GLint x, GLint y, GLsizei width, GLsizei height);
- void (APIENTRY *glGetBooleanv_)(GLenum pname, GLboolean *data);
- void (APIENTRY *glGetDoublev_)(GLenum pname, GLdouble *data);
- void (APIENTRY *glGetFloatv_)(GLenum pname, GLfloat *data);
- void (APIENTRY *glGetIntegerv_)(GLenum pname, GLint *data);
- GLenum (APIENTRY *glGetError_)(void);
- // The rest of the wgl functions:
- void* _dummy_ptr; // (Replace this with a proper proc if/when appropriate)
- // ...
- // The rest of the gl functions:
- GLuint (*glCreateShader_)(GLenum shaderType);
- void (*glShaderSource_)(GLuint shader, GLsizei count, const GLchar **string, const GLint *length);
- void (*glCompileShader_)(GLuint shader);
- void (*glGetShaderiv_)(GLuint shader, GLenum pname, GLint *params);
- void (*glGetShaderInfoLog_)(GLuint shader, GLsizei maxLength, GLsizei *length, GLchar *infoLog);
- GLuint (*glCreateProgram_)(void);
- void (*glAttachShader_)(GLuint program, GLuint shader);
- void (*glLinkProgram_)(GLuint program);
- void (*glGetProgramInfoLog_)(GLuint program, GLsizei maxLength, GLsizei *length, GLchar *infoLog);
- void (*glDeleteShader_)(GLuint shader);
- void (*glGenVertexArrays_)(GLsizei n, GLuint *arrays);
- void (*glGenBuffers_)(GLsizei n, GLuint *buffers);
- void (*glBindVertexArray_)(GLuint array);
- void (*glBindBuffer_)(GLenum target, GLuint buffer);
- void (*glBufferData_)(GLenum target, GLsizeiptr size, const void *data, GLenum usage);
- void (*glVertexAttribPointer_)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer);
- void (*glVertexAttribIPointer_)(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer);
- void (*glEnableVertexAttribArray_)(GLuint index);
- void (*glDisableVertexAttribArray_)(GLuint index);
- void (*glUseProgram_)(GLuint program);
- void (*glDrawArrays_)(GLenum mode, GLint first, GLsizei count);
- void (*glDeleteVertexArrays_)(GLsizei n, const GLuint *arrays);
- void (*glDeleteBuffers_)(GLsizei n, const GLuint *buffers);
- void (*glDeleteProgram_)(GLuint program);
- void (*glGetInteger64v_)(GLenum pname, GLint64 *data);
- void (*glGetBooleani_v_)(GLenum target, GLuint index, GLboolean *data);
- void (*glGetIntegeri_v_)(GLenum target, GLuint index, GLint *data);
- void (*glGetInteger64i_v_)(GLenum target, GLuint index, GLint64 *data);
- void (*glGetProgramiv_)(GLuint program, GLenum pname, GLint *params);
- void (*glBufferSubData_)(GLenum target, GLintptr offset, GLsizeiptr size, const void *data);
- void* (*glMapBufferRange_)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
- void (*glGenTextures_)(GLsizei n, GLuint *textures);
- void (*glBindTexture_)(GLenum target, GLuint texture);
- void (*glTexBuffer_)(GLenum target, GLenum internalformat, GLuint buffer);
- GLint (*glGetUniformLocation_)(GLuint program, const GLchar *name);
- void (*glUniform1f_)(GLint location, GLfloat v0);
- void (*glUniform2f_)(GLint location, GLfloat v0, GLfloat v1);
- void (*glUniform3f_)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
- void (*glUniform4f_)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
- void (*glUniform1i_)(GLint location, GLint v0);
- void (*glUniform2i_)(GLint location, GLint v0, GLint v1);
- void (*glUniform3i_)(GLint location, GLint v0, GLint v1, GLint v2);
- void (*glUniform4i_)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
- //void (*glUniform1ui_)(GLint location, GLuint v0);
- //void (*glUniform2ui_)(GLint location, GLuint v0, GLuint v1);
- //void (*glUniform3ui_)(GLint location, GLuint v0, GLuint v1, GLuint v2);
- //void (*glUniform4ui_)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
- //
- //void (*glUniform1fv_)(GLint location, GLsizei count, const GLfloat *value);
- //void (*glUniform2fv_)(GLint location, GLsizei count, const GLfloat *value);
- //void (*glUniform3fv_)(GLint location, GLsizei count, const GLfloat *value);
- //void (*glUniform4fv_)(GLint location, GLsizei count, const GLfloat *value);
- //
- //void (*glUniform1iv_)(GLint location, GLsizei count, const GLint *value);
- //void (*glUniform2iv_)(GLint location, GLsizei count, const GLint *value);
- //void (*glUniform3iv_)(GLint location, GLsizei count, const GLint *value);
- //void (*glUniform4iv_)(GLint location, GLsizei count, const GLint *value);
- //
- //void (*glUniform1uiv_)(GLint location, GLsizei count, const GLuint *value);
- //void (*glUniform2uiv_)(GLint location, GLsizei count, const GLuint *value);
- //void (*glUniform3uiv_)(GLint location, GLsizei count, const GLuint *value);
- //void (*glUniform4uiv_)(GLint location, GLsizei count, const GLuint *value);
- //
- //void (*glUniformMatrix2fv_)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
- //void (*glUniformMatrix3fv_)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
- //void (*glUniformMatrix4fv_)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
- //void (*glUniformMatrix2x3fv_)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
- //void (*glUniformMatrix3x2fv_)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
- //void (*glUniformMatrix2x4fv_)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
- //void (*glUniformMatrix4x2fv_)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
- //void (*glUniformMatrix3x4fv_)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
- //void (*glUniformMatrix4x3fv_)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
- void (*glDeleteTextures_)(GLsizei n, const GLuint *textures);
- };
- };
- extern _Opengl32_func_t _Opengl32_func;
- extern char _Opengl32_names_wgl_1_1[];
- extern char _Opengl32_names_gl_1_1[];
- extern char _Opengl32_names_wgl[];
- extern char _Opengl32_names_gl[];
- // Creates an OpenGL 3.3 core context, and loads any required extensions
- // (OpenGL 1.1 stuff is loaded inside "src/main.cpp"!)
- int OpenGLInit();
- void OpenGLQuit();
- #endif // _OPENGL_HPP
- /******************************************************************************/
- /******************************************************************************/
- //"opengl_metaballs_2025-06-26\include\win32\video.hpp":
- #ifndef _WIN32_VIDEO_HPP
- #define _WIN32_VIDEO_HPP
- #include <windows.h>
- #define RegisterClassA _User32_func.RegisterClassA_
- #define CreateWindowExA _User32_func.CreateWindowExA_
- #define DefWindowProcA _User32_func.DefWindowProcA_
- #define InvalidateRect _User32_func.InvalidateRect_
- #define UpdateWindow _User32_func.UpdateWindow_
- #define BeginPaint _User32_func.BeginPaint_
- #define EndPaint _User32_func.EndPaint_
- #define PeekMessageA _User32_func.PeekMessageA_
- #define DispatchMessageA _User32_func.DispatchMessageA_
- #define DestroyWindow _User32_func.DestroyWindow_
- #define ReleaseDC _User32_func.ReleaseDC_
- #define GetDC _User32_func.GetDC_
- #define PostQuitMessage _User32_func.PostQuitMessage_
- #define MessageBoxA _User32_func.MessageBoxA_
- #define TranslateMessage _User32_func.TranslateMessage_
- #define GetWindowLongA _User32_func.GetWindowLongA_
- #define AdjustWindowRectEx _User32_func.AdjustWindowRectEx_
- #define LoadCursorA _User32_func.LoadCursorA_
- #define MapVirtualKeyA _User32_func.MapVirtualKeyA_
- #define GetCursorPos _User32_func.GetCursorPos_
- #define ScreenToClient _User32_func.ScreenToClient_
- #define ShowCursor _User32_func.ShowCursor_
- #define ClipCursor _User32_func.ClipCursor_
- #define GetClientRect _User32_func.GetClientRect_
- #define ClientToScreen _User32_func.ClientToScreen_
- #define SetCapture _User32_func.SetCapture_
- #define ReleaseCapture _User32_func.ReleaseCapture_
- #define SetCursorPos _User32_func.SetCursorPos_
- #define RegisterRawInputDevices _User32_func.RegisterRawInputDevices_
- #define GetRawInputData _User32_func.GetRawInputData_
- #define FillRect _User32_func.FillRect_
- #define ShowWindow _User32_func.ShowWindow_
- union _User32_func_t {
- FARPROC ptrs[1];
- struct {
- ATOM (WINAPI *RegisterClassA_)(CONST WNDCLASSA*);
- HWND (WINAPI *CreateWindowExA_)(DWORD, LPCSTR, LPCSTR, DWORD, int, int, int, int, HWND, HMENU, HINSTANCE, LPVOID);
- LRESULT (WINAPI *DefWindowProcA_)(HWND, UINT, WPARAM, LPARAM);
- WINBOOL (WINAPI *InvalidateRect_)(HWND, CONST RECT*, WINBOOL);
- WINBOOL (WINAPI *UpdateWindow_)(HWND);
- HDC (WINAPI *BeginPaint_)(HWND, LPPAINTSTRUCT);
- WINBOOL (WINAPI *EndPaint_)(HWND, CONST PAINTSTRUCT*);
- WINBOOL (WINAPI *PeekMessageA_)(LPMSG, HWND, UINT, UINT, UINT);
- LRESULT (WINAPI *DispatchMessageA_)(CONST MSG*);
- WINBOOL (WINAPI *DestroyWindow_)(HWND);
- int (WINAPI *ReleaseDC_)(HWND, HDC);
- HDC (WINAPI *GetDC_)(HWND);
- VOID (WINAPI *PostQuitMessage_)(int);
- int (WINAPI *MessageBoxA_)(HWND, LPCSTR, LPCSTR, UINT);
- WINBOOL (WINAPI *TranslateMessage_)(CONST MSG*);
- LONG (WINAPI *GetWindowLongA_)(HWND, int);
- WINBOOL (WINAPI *AdjustWindowRectEx_)(LPRECT, DWORD, WINBOOL, DWORD);
- HCURSOR (WINAPI *LoadCursorA_)(HINSTANCE, LPCSTR);
- UINT (WINAPI *MapVirtualKeyA_)(UINT, UINT);
- //WINBOOL (WINAPI *GetCursorPos_)(LPPOINT);
- WINBOOL (WINAPI *ScreenToClient_)(HWND, LPPOINT);
- int (WINAPI *ShowCursor_)(WINBOOL);
- WINBOOL (WINAPI *ClipCursor_)(CONST RECT*);
- WINBOOL (WINAPI *GetClientRect_)(HWND, LPRECT);
- WINBOOL (WINAPI *ClientToScreen_)(HWND, LPPOINT);
- HWND (WINAPI *SetCapture_)(HWND);
- WINBOOL (WINAPI *ReleaseCapture_)(VOID);
- WINBOOL (WINAPI *SetCursorPos_)(int, int);
- WINBOOL (WINAPI *RegisterRawInputDevices_)(PCRAWINPUTDEVICE, UINT, UINT);
- UINT (WINAPI *GetRawInputData_)(HRAWINPUT, UINT, LPVOID, PUINT, UINT);
- int (WINAPI *FillRect_)(HDC, CONST RECT*, HBRUSH);
- WINBOOL (WINAPI *ShowWindow_)(HWND, int);
- };
- };
- extern _User32_func_t _User32_func;
- extern char _User32_names_a[];
- /******************************************************************************/
- #define CreateCompatibleDC _Gdi32_func.CreateCompatibleDC_
- #define CreateDIBSection _Gdi32_func.CreateDIBSection_
- #define SelectObject _Gdi32_func.SelectObject_
- #define DeleteObject _Gdi32_func.DeleteObject_
- #define BitBlt _Gdi32_func.BitBlt_
- #define DeleteDC _Gdi32_func.DeleteDC_
- #define StretchBlt _Gdi32_func.StretchBlt_
- #define CreateCompatibleBitmap _Gdi32_func.CreateCompatibleBitmap_
- #define SetStretchBltMode _Gdi32_func.SetStretchBltMode_
- #define SetDIBColorTable _Gdi32_func.SetDIBColorTable_
- #define CreateSolidBrush _Gdi32_func.CreateSolidBrush_
- #define SetPixelFormat _Gdi32_func.SetPixelFormat_
- #define ChoosePixelFormat _Gdi32_func.ChoosePixelFormat_
- #define SwapBuffers _Gdi32_func.SwapBuffers_
- union _Gdi32_func_t {
- FARPROC ptrs[1];
- struct {
- HDC (WINAPI *CreateCompatibleDC_)(HDC);
- HBITMAP (WINAPI *CreateDIBSection_)(HDC, CONST BITMAPINFO*, UINT, VOID**, HANDLE, DWORD);
- HGDIOBJ (WINAPI *SelectObject_)(HDC, HGDIOBJ);
- WINBOOL (WINAPI *DeleteObject_)(HGDIOBJ);
- WINBOOL (WINAPI *BitBlt_)(HDC, int, int, int, int, HDC, int, int, DWORD);
- WINBOOL (WINAPI *DeleteDC_)(HDC);
- WINBOOL (WINAPI *StretchBlt_)(HDC, int, int, int, int, HDC, int, int, int, int, DWORD);
- HBITMAP (WINAPI *CreateCompatibleBitmap_)(HDC, int, int);
- int (WINAPI *SetStretchBltMode_)(HDC, int);
- UINT (WINAPI *SetDIBColorTable_)(HDC, UINT, UINT, CONST RGBQUAD*);
- HBRUSH (WINAPI *CreateSolidBrush_)(COLORREF);
- WINBOOL (WINAPI *SetPixelFormat_)(HDC, int, CONST PIXELFORMATDESCRIPTOR*);
- int (WINAPI *ChoosePixelFormat_)(HDC, CONST PIXELFORMATDESCRIPTOR*);
- WINBOOL (WINAPI *SwapBuffers_)(HDC);
- };
- };
- extern _Gdi32_func_t _Gdi32_func;
- extern char _Gdi32_names_a[];
- /******************************************************************************/
- int WindowInit(HINSTANCE hThisInst);
- void WindowQuit();
- #endif /* _WIN32_VIDEO_HPP */
- /******************************************************************************/
- /******************************************************************************/
- //"opengl_metaballs_2025-06-26\src\win32\_WindowProc.hpp":
- #ifndef _WIN32__WINDOWPROC_HPP
- #define _WIN32__WINDOWPROC_HPP
- #include <win32/video.hpp>
- #include <win32/input.hpp>
- #include <windowsx.h>
- #include <public_stuff.hpp>
- //assumes window is without a menu
- static inline Point2d CalculateWindowSize(u32 innerWidth, u32 innerHeight,
- u32 flags, u32 flagsEx)
- {
- RECT winSize;
- winSize.left = 0;
- winSize.top = 0;
- winSize.right = innerWidth;
- winSize.bottom = innerHeight;
- AdjustWindowRectEx(&winSize, flags, false, flagsEx);
- Point2d winSizeAdjusted;
- winSizeAdjusted.x = winSize.right - winSize.left;
- winSizeAdjusted.y = winSize.bottom - winSize.top;
- return winSizeAdjusted;
- }
- static inline Rect2d ConvertToKitRect(RECT& rectIn){
- Rect2d rectOut;
- rectOut.x = rectIn.left;
- rectOut.y = rectIn.top;
- rectOut.w = rectIn.right - rectIn.left;
- rectOut.h = rectIn.bottom - rectIn.top;
- return rectOut;
- }
- static inline RECT ConvertFromKitRect(Rect2d& rectIn){
- RECT rectOut;
- rectOut.left = rectIn.x;
- rectOut.top = rectIn.y;
- rectOut.right = rectIn.x + rectIn.w;
- rectOut.bottom = rectIn.y + rectIn.h;
- return rectOut;
- }
- union KEY_Params {
- struct {
- u32 repeatCount : 16; // 0 -> 15
- u32 scanCode : 8; //16 -> 23
- u32 extendedKey : 1; //24
- u32 _reserved : 4; //25 -> 28
- u32 altKeyDown : 1; //29
- u32 prevUnpressed : 1; //30
- u32 currUnpressed : 1; //31
- };
- u32 value;
- KEY_Params(u32 _value) : value(_value) {}
- };
- // This event handler is used for KEY_CHAR, KEY_UP, and KEY_DOWN events
- static inline void HANDLE_KEY_CHARUPDOWN(Event& event,
- bool charEvent,u8 virtualKeyCode,
- KEY_Params& params, u16 kmods)
- {
- if(charEvent){
- event.type = EVENT_KEY_CHAR;
- } else {
- if(params.currUnpressed) event.type = EVENT_KEY_UP;
- else event.type = EVENT_KEY_DOWN;
- }
- event.key.kmods = kmods;
- event.key.pkey = params.scanCode;
- event.key.vkey = virtualKeyCode;
- event.key.pressed = !params.currUnpressed;
- event.key.repeat = params.repeatCount>0; //modified to act as a boolean
- event.key.ischar = charEvent;
- }
- union MOUSE_ButtonStates {
- // The positions of these bits are the same as
- // the bitmasks in Event_Mouse_ButtonEnum
- struct {
- u8 left : 1;
- u8 middle : 1;
- u8 right : 1;
- u8 x1 : 1;
- u8 x2 : 1;
- u8 ctrl : 1; // 'Is the control key currently pressed?'
- u8 shift : 1; // 'Is the shift key currently pressed?'
- u8 _unused : 1;
- };
- u8 value;
- MOUSE_ButtonStates() : value(0) {}
- MOUSE_ButtonStates(u8 _value) : value(_value) {}
- };
- extern MOUSE_ButtonStates mbutton_states;
- static inline void HANDLE_MOUSE_MOVED(Event& event, u8 buttonStates,
- Point2d& previous, Point2d& current)
- {
- event.type = EVENT_MOUSE_MOVED;
- event.mouse.x = current.x;
- event.mouse.y = current.y;
- Fpoint2d _previous = { (f32)previous.x, (f32)previous.y };
- Fpoint2d _current = { (f32) current.x, (f32) current.y };
- event.mouse.dx = _current.x - _previous.x;
- event.mouse.dy = _current.y - _previous.y;
- event.mouse.button = buttonStates;
- event.mouse.pressed = buttonStates!=0;
- }
- // Same event handler is used for both MOUSE_HWHEEL and MOUSE_VWHEEL events
- static inline void HANDLE_MOUSE_HVWHEEL(Event& event,
- bool verticalScroll, s16 scrollAmount,
- u8 buttonStates, Point2d& mousePos)
- {
- if(verticalScroll){
- event.type = EVENT_MOUSE_VWHEEL;
- event.mouse.dy = (f32)scrollAmount/WHEEL_DELTA;
- } else {
- event.type = EVENT_MOUSE_HWHEEL;
- event.mouse.dx = (f32)scrollAmount/WHEEL_DELTA;
- }
- event.mouse.x = mousePos.x;
- event.mouse.y = mousePos.y;
- event.mouse.button = buttonStates;
- event.mouse.pressed = buttonStates!=0;
- }
- // Same event handler is used for both MOUSE_UP and MOUSE_DOWN events
- static inline void HANDLE_MOUSE_UPDOWN(Event& event, Point2d& clickPosition,
- u8 buttonStates, bool pressed, bool doubleClick)
- {
- if(pressed) event.type = EVENT_MOUSE_DOWN;
- else event.type = EVENT_MOUSE_UP;
- event.mouse.x = clickPosition.x;
- event.mouse.y = clickPosition.y;
- event.mouse.button = buttonStates;
- event.mouse.pressed = pressed;
- event.mouse.dblClick = doubleClick;
- }
- static void add_event(Event& evt);
- // flag_which must be one of the "DOWN" flags (Ex.: RI_MOUSE_BUTTON_1_DOWN)
- // (Also, timestamp is assumed to have already been set inside evt!)
- static void send_raw_mbutton_press(Event& evt, u16 flags,
- u16 flag_which, u8 button_which);
- // This doesn't handle a single mouse event,
- // but rather all of the mouse events when the cursor is trapped
- static inline void HANDLE_MOUSE_RAWINPUT(Event& evt,
- u16 flags, f32 deltaWheel,
- f32 deltaX, f32 deltaY)
- {
- QueryPerformanceCounter((LARGE_INTEGER*)&evt.common.timestamp);
- evt.mouse.button = mbutton_states.value;
- send_raw_mbutton_press(evt, flags, RI_MOUSE_BUTTON_1_DOWN, MBUTTON_LEFT );
- send_raw_mbutton_press(evt, flags, RI_MOUSE_BUTTON_2_DOWN, MBUTTON_MIDDLE);
- send_raw_mbutton_press(evt, flags, RI_MOUSE_BUTTON_3_DOWN, MBUTTON_RIGHT );
- send_raw_mbutton_press(evt, flags, RI_MOUSE_BUTTON_4_DOWN, MBUTTON_X1 );
- send_raw_mbutton_press(evt, flags, RI_MOUSE_BUTTON_5_DOWN, MBUTTON_X2 );
- evt.mouse.pressed = evt.mouse.button!=0;
- if(flags&RI_MOUSE_WHEEL){
- evt.type = EVENT_MOUSE_VWHEEL;
- evt.mouse.dy = deltaWheel;
- _add_event_func: add_event(evt);
- } else if(flags&RI_MOUSE_HWHEEL){
- evt.type = EVENT_MOUSE_HWHEEL;
- evt.mouse.dx = deltaWheel;
- goto _add_event_func;
- }
- if(deltaX != 0.0f || deltaY != 0.0f){
- evt.type = EVENT_MOUSE_MOVED;
- evt.mouse.dx = deltaX;
- evt.mouse.dy = deltaY;
- add_event(evt);
- }
- }
- #endif /* _WIN32__WINDOWPROC_HPP */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement