diff --git a/AnimModel.cpp b/AnimModel.cpp index 8d90ba0b..87d901c6 100644 --- a/AnimModel.cpp +++ b/AnimModel.cpp @@ -422,16 +422,7 @@ bool TAnimModel::Init(std::string const &asName, std::string const &asReplacable asText = asReplacableTexture.substr( 1, asReplacableTexture.length() - 1 ); // zapamiętanie tekstu } else if( asReplacableTexture != "none" ) { - m_materialdata.replacable_skins[ 1 ] = GfxRenderer.Fetch_Material( asReplacableTexture ); - } - if( ( m_materialdata.replacable_skins[ 1 ] != null_handle ) - && ( GfxRenderer.Material( m_materialdata.replacable_skins[ 1 ] ).has_alpha ) ) { - // tekstura z kanałem alfa - nie renderować w cyklu nieprzezroczystych - m_materialdata.textures_alpha = 0x31310031; - } - else{ - // tekstura nieprzezroczysta - nie renderować w cyklu przezroczystych - m_materialdata.textures_alpha = 0x30300030; + m_materialdata.assign( asReplacableTexture ); } // TODO: redo the random timer initialization @@ -927,7 +918,7 @@ TAnimModel::export_as_text_( std::ostream &Output ) const { // texture auto texturefile { ( m_materialdata.replacable_skins[ 1 ] != null_handle ? - GfxRenderer.Material( m_materialdata.replacable_skins[ 1 ] ).name : + GfxRenderer->Material( m_materialdata.replacable_skins[ 1 ] ).name : "none" ) }; if( texturefile.find( szTexturePath ) == 0 ) { // don't include 'textures/' in the path diff --git a/Classes.h b/Classes.h index 8c4209cc..a01470cc 100644 --- a/Classes.h +++ b/Classes.h @@ -40,6 +40,7 @@ class powergridsource_table; class instance_table; class vehicle_table; struct light_array; +class particle_manager; struct dictionary_source; namespace scene { diff --git a/Driver.cpp b/Driver.cpp index aa6a386c..1fce4918 100644 --- a/Driver.cpp +++ b/Driver.cpp @@ -505,7 +505,7 @@ void TController::TableTraceRoute(double fDistance, TDynamicObject *pVehicle) VelSignalLast = -1.0; } iTableDirection = iDirection; // ustalenie w jakim kierunku jest wypełniana tabelka względem pojazdu - pTrack = pVehicle->RaTrackGet(); // odcinek, na którym stoi + pTrack = pVehicle->GetTrack(); // odcinek, na którym stoi fTrackLength = pVehicle->RaTranslationGet(); // pozycja na tym torze (odległość od Point1) fLastDir = pVehicle->DirectionGet() * pVehicle->RaDirectionGet(); // ustalenie kierunku skanowania na torze if( fLastDir < 0.0 ) { @@ -981,9 +981,14 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN UpdateDelayFlag(); // perform loading/unloading - auto const platformside = static_cast( std::floor( std::abs( sSpeedTable[ i ].evEvent->input_value( 2 ) ) ) ) % 10; - auto const exchangetime = simulation::Station.update_load( pVehicles[ 0 ], *TrainParams, platformside ); - WaitingSet( exchangetime ); + // HACK: manual check if we didn't already do load exchange at this stop + // TODO: remove the check once the station system is in place + if( m_lastexchangestop != asNextStop ) { + auto const platformside = static_cast( std::floor( std::abs( sSpeedTable[ i ].evEvent->input_value( 2 ) ) ) ) % 10; + auto const exchangetime = simulation::Station.update_load( pVehicles[ 0 ], *TrainParams, platformside ); + WaitingSet( exchangetime ); + m_lastexchangestop = asNextStop; + } if (TrainParams->DirectionChange()) { // jeśli "@" w rozkładzie, to wykonanie dalszych komend @@ -1138,6 +1143,17 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN if( sSpeedTable[ i ].fDist > 0.0 ) { // check signals ahead if( sSpeedTable[ i ].IsProperSemaphor( OrderCurrentGet() ) ) { + + if( ( mvOccupied->CategoryFlag & 2 ) + && ( sSpeedTable[ i ].fVelNext != -1.0 ) + && ( sSpeedTable[ i ].fVelNext < 1.0 ) + && ( sSpeedTable[ i ].fDist < -0.5 + std::min( fBrakeDist * 0.2, mvOccupied->Vel * 0.2 ) ) ) { + // special rule for cars: ignore stop signals at distance too short to come to a stop + // as trying to stop in such situation is likely to place the car on train tracks + sSpeedTable[ i ].iFlags &= ~spEnabled; + continue; + } + if( SemNextIndex == -1 ) { // jeśli jest mienięty poprzedni semafor a wcześniej // byl nowy to go dorzucamy do zmiennej, żeby cały czas widział najbliższy @@ -1392,6 +1408,12 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN fVelDes = v; } } + if( ( true == TestFlag( sSpeedTable[ i ].iFlags, spEnd ) ) + && ( mvOccupied->CategoryFlag & 1 ) ) { + // if the railway track ends here set the velnext accordingly as well + // TODO: test this with turntables and such + fNext = 0.0; + } } else if (sSpeedTable[i].iFlags & spTrack) // jeśli tor { // tor ogranicza prędkość, dopóki cały skład nie przejedzie, @@ -1403,12 +1425,6 @@ TCommandType TController::TableUpdate(double &fVelDes, double &fDist, double &fN // ograniczenie aktualnej prędkości aż do wyjechania za ograniczenie fVelDes = v; } - if( ( sSpeedTable[ i ].iFlags & spEnd ) - && ( mvOccupied->CategoryFlag & 1 ) ) { - // if the railway track ends here set the velnext accordingly as well - // TODO: test this with turntables and such - fNext = 0.0; - } // if (v==0.0) fAcc=-0.9; //hamowanie jeśli stop continue; // i tyle wystarczy } @@ -1768,8 +1784,7 @@ void TController::OrdersClear() void TController::Activation() { // umieszczenie obsady w odpowiednim członie, wykonywane wyłącznie gdy steruje AI - iDirection = iDirectionOrder; // kierunek (względem sprzęgów pojazdu z AI) właśnie został - // ustalony (zmieniony) + iDirection = iDirectionOrder; // kierunek (względem sprzęgów pojazdu z AI) właśnie został ustalony (zmieniony) if (iDirection) { // jeśli jest ustalony kierunek TDynamicObject *old = pVehicle, *d = pVehicle; // w tym siedzi AI @@ -1778,7 +1793,7 @@ void TController::Activation() ZeroSpeed(); ZeroDirection(); mvOccupied->SpringBrakeActivate(true); - if (TestFlag(d->MoverParameters->Couplers[iDirectionOrder < 0 ? 1 : 0].CouplingFlag, ctrain_controll)) { + if (TestFlag(d->MoverParameters->Couplers[iDirectionOrder < 0 ? end::rear : end::front].CouplingFlag, ctrain_controll)) { mvControlling->MainSwitch( false); // dezaktywacja czuwaka, jeśli przejście do innego członu mvOccupied->DecLocalBrakeLevel(LocalBrakePosNo); // zwolnienie hamulca w opuszczanym pojeździe // mvOccupied->BrakeLevelSet((mvOccupied->BrakeHandle==FVel6)?4:-2); //odcięcie na @@ -1790,20 +1805,17 @@ void TController::Activation() mvOccupied->ActiveCab = mvOccupied->CabNo; // użytkownik moze zmienić ActiveCab wychodząc mvOccupied->CabDeactivisation(); // tak jest w Train.cpp // przejście AI na drugą stronę EN57, ET41 itp. - while (TestFlag(d->MoverParameters->Couplers[iDirection < 0 ? 1 : 0].CouplingFlag, ctrain_controll)) + while (TestFlag(d->MoverParameters->Couplers[iDirection < 0 ? end::rear : end::front].CouplingFlag, ctrain_controll)) { // jeśli pojazd z przodu jest ukrotniony, to przechodzimy do niego d = iDirection * d->DirectionGet() < 0 ? d->Next() : d->Prev(); // przechodzimy do następnego członu if (d) { - drugi = d->Mechanik; // zapamiętanie tego, co ewentualnie tam siedzi, żeby w razie - // dwóch zamienić miejscami + drugi = d->Mechanik; // zapamiętanie tego, co ewentualnie tam siedzi, żeby w razie dwóch zamienić miejscami d->Mechanik = this; // na razie bilokacja - d->MoverParameters->SetInternalCommand( - "", 0, 0); // usunięcie ewentualnie zalegającej komendy (Change_direction?) + d->MoverParameters->SetInternalCommand("", 0, 0); // usunięcie ewentualnie zalegającej komendy (Change_direction?) if (d->DirectionGet() != pVehicle->DirectionGet()) // jeśli są przeciwne do siebie - iDirection = -iDirection; // to będziemy jechać w drugą stronę względem - // zasiedzianego pojazdu + iDirection = -iDirection; // to będziemy jechać w drugą stronę względem zasiedzianego pojazdu pVehicle->Mechanik = drugi; // wsadzamy tego, co ewentualnie był (podwójna trakcja) pVehicle->MoverParameters->CabNo = 0; // wyłączanie kabin po drodze pVehicle->MoverParameters->ActiveCab = 0; // i zaznaczenie, że nie ma tam nikogo @@ -2100,12 +2112,18 @@ bool TController::CheckVehicles(TOrders user) { // sprawdzanie, czy jest głównym sterującym, żeby nie było konfliktu if (p->Mechanik) // jeśli ma obsadę if (p->Mechanik != this) // ale chodzi o inny pojazd, niż aktualnie sprawdzający - if (p->Mechanik->iDrivigFlags & movePrimary) // a tamten ma priorytet - if ((iDrivigFlags & movePrimary) && (mvOccupied->DirAbsolute) && - (mvOccupied->BrakeCtrlPos >= -1)) // jeśli rządzi i ma kierunek - p->Mechanik->iDrivigFlags &= ~movePrimary; // dezaktywuje tamtego - else + if( p->Mechanik->iDrivigFlags & movePrimary ) { + // a tamten ma priorytet + if( ( iDrivigFlags & movePrimary ) + && ( mvOccupied->DirAbsolute ) + && ( mvOccupied->BrakeCtrlPos >= -1 ) ) { + // jeśli rządzi i ma kierunek + p->Mechanik->primary( false ); // dezaktywuje tamtego + } + else { main = false; // nici z rządzenia + } + } ++iVehicles; // jest jeden pojazd więcej pVehicles[1] = p; // zapamiętanie ostatniego fLength += p->MoverParameters->Dim.L; // dodanie długości pojazdu @@ -2127,20 +2145,17 @@ bool TController::CheckVehicles(TOrders user) p = pVehicles[0]; while (p) { - // HACK: wagony muszą mieć baterię załączoną do otwarcia drzwi... if( p != pVehicle ) { if( ( ( p->MoverParameters->Couplers[ end::front ].CouplingFlag & ( coupling::control ) ) == 0 ) && ( ( p->MoverParameters->Couplers[ end::rear ].CouplingFlag & ( coupling::control ) ) == 0 ) ) { - // NOTE: don't set battery in the occupied vehicle, let the user/ai do it explicitly + // NOTE: don't set battery in controllable vehicles, let the user/ai do it explicitly + // HACK: wagony muszą mieć baterię załączoną do otwarcia drzwi... p->MoverParameters->BatterySwitch( true ); - } - } - // enable heating and converter in carriages with can be heated - // NOTE: don't touch the controlled vehicle, let the user/ai handle it explicitly - if( p->MoverParameters != mvControlling ) { - if( p->MoverParameters->HeatingPower > 0 ) { - p->MoverParameters->HeatingAllow = true; - p->MoverParameters->ConverterSwitch( true, range_t::local ); + // enable heating and converter in carriages with can be heated + if( p->MoverParameters->HeatingPower > 0 ) { + p->MoverParameters->HeatingAllow = true; + p->MoverParameters->ConverterSwitch( true, range_t::local ); + } } } @@ -2272,6 +2287,12 @@ bool TController::CheckVehicles(TOrders user) // zmiana czoła przez manewry iDrivigFlags &= ~movePushPull; } + + if( ( user == Connect ) + || ( user == Disconnect ) ) { + // HACK: force route table update on consist change, new consist length means distances to points of interest are now wrong + iTableDirection = 0; + } } // blok wykonywany, gdy aktywnie prowadzi return true; } @@ -3465,30 +3486,35 @@ void TController::SpeedSet() break; case TEngineType::DieselEngine: // Ra 2014-06: "automatyczna" skrzynia biegów... - if (!mvControlling->MotorParam[mvControlling->ScndCtrlPos].AutoSwitch) // gdy biegi ręczne - if ((mvControlling->ShuntMode ? mvControlling->AnPos : 1.0) * mvControlling->Vel > - 0.75 * mvControlling->MotorParam[mvControlling->ScndCtrlPos].mfi) + if( false == mvControlling->MotorParam[ mvControlling->ScndCtrlPos ].AutoSwitch ) { + // gdy biegi ręczne + if( ( mvControlling->ShuntMode ? mvControlling->AnPos : 1.0 ) * mvControlling->Vel > + 0.75 * mvControlling->MotorParam[ mvControlling->ScndCtrlPos ].mfi ) // if (mvControlling->enrot>0.95*mvControlling->dizel_nMmax) //youBy: jeśli obroty > // 0,95 nmax, wrzuć wyższy bieg - Ra: to nie działa { // jak prędkość większa niż 0.6 maksymalnej na danym biegu, wrzucić wyższy - mvControlling->DecMainCtrl(2); - if (mvControlling->IncScndCtrl(1)) - if (mvControlling->MotorParam[mvControlling->ScndCtrlPos].mIsat == - 0.0) // jeśli bieg jałowy - mvControlling->IncScndCtrl(1); // to kolejny + if( mvControlling->ScndCtrlPos < mvControlling->ScndCtrlPosNo ) { + // ...presuming there is a higher gear + mvControlling->DecMainCtrl( 2 ); + if( mvControlling->IncScndCtrl( 1 ) ) { + while( ( mvControlling->MotorParam[ mvControlling->ScndCtrlPos ].mIsat == 0.0 ) // jeśli bieg jałowy + && ( mvControlling->IncScndCtrl( 1 ) ) ) { // to kolejny + ; + } + } + } } - else if ((mvControlling->ShuntMode ? mvControlling->AnPos : 1.0) * mvControlling->Vel < - mvControlling->MotorParam[mvControlling->ScndCtrlPos].fi) - { // jak prędkość mniejsza niż minimalna na danym biegu, wrzucić niższy - mvControlling->DecMainCtrl(2); - mvControlling->DecScndCtrl(1); - if (mvControlling->MotorParam[mvControlling->ScndCtrlPos].mIsat == - 0.0) // jeśli bieg jałowy - if (mvControlling->ScndCtrlPos) // a jeszcze zera nie osiągnięto - mvControlling->DecScndCtrl(1); // to kolejny wcześniejszy + else if( ( mvControlling->ShuntMode ? mvControlling->AnPos : 1.0 ) * mvControlling->Vel < + mvControlling->MotorParam[ mvControlling->ScndCtrlPos ].fi ) { // jak prędkość mniejsza niż minimalna na danym biegu, wrzucić niższy + mvControlling->DecMainCtrl( 2 ); + mvControlling->DecScndCtrl( 1 ); + if( mvControlling->MotorParam[ mvControlling->ScndCtrlPos ].mIsat == 0.0 ) // jeśli bieg jałowy + if( mvControlling->ScndCtrlPos ) // a jeszcze zera nie osiągnięto + mvControlling->DecScndCtrl( 1 ); // to kolejny wcześniejszy else - mvControlling->IncScndCtrl(1); // a jak zeszło na zero, to powrót + mvControlling->IncScndCtrl( 1 ); // a jak zeszło na zero, to powrót } + } break; } }; @@ -3913,6 +3939,7 @@ bool TController::PutCommand( std::string NewCommand, double NewValue1, double N else TrainParams->NewName(NewCommand); // czyści tabelkę przystanków tsGuardSignal = sound_source { sound_placement::internal, 2 * EU07_SOUND_CABCONTROLSCUTOFFRANGE }; // wywalenie kierownika + m_lastexchangestop.clear(); if (NewCommand != "none") { if (!TrainParams->LoadTTfile( @@ -4810,7 +4837,7 @@ TController::UpdateSituation(double dt) { // rozpoznaj komende bo lokomotywa jej nie rozpoznaje RecognizeCommand(); // samo czyta komendę wstawioną do pojazdu? } - if( mvOccupied->SecuritySystem.Status > 1 ) { + if( mvOccupied->SecuritySystem.Status != s_off ) { // jak zadziałało CA/SHP if( !mvOccupied->SecuritySystemReset() ) { // to skasuj if( ( /*mvOccupied->BrakeCtrlPos*/BrakeCtrlPosition == 0 ) @@ -4879,7 +4906,7 @@ TController::UpdateSituation(double dt) { iCoupler = 0; // dalsza jazda manewrowa już bez łączenia iDrivigFlags &= ~moveConnect; // zdjęcie flagi doczepiania SetVelocity( 0, 0, stopJoin ); // wyłączyć przyspieszanie - CheckVehicles(); // sprawdzić światła nowego składu + CheckVehicles( Connect ); // sprawdzić światła nowego składu JumpToNextOrder(); // wykonanie następnej komendy } } @@ -5246,6 +5273,7 @@ TController::UpdateSituation(double dt) { // tylko jeśli odepnie WriteLog( mvOccupied->Name + " odczepiony." ); iVehicleCount = -2; + CheckVehicles( Disconnect ); // update trainset state } // a jak nie, to dociskać dalej } if ((mvOccupied->Vel < 0.01) && !(iDrivigFlags & movePress)) @@ -5966,7 +5994,7 @@ TController::UpdateSituation(double dt) { /* mvOccupied->BrakeLevelSet( mvOccupied->Handle->GetPos( bh_FS ) ); GBH */ BrakeLevelSet( gbh_FS ); // don't charge the brakes too often, or we risk overcharging - BrakeChargingCooldown = -120.0; + BrakeChargingCooldown = -1 * clamp( iVehicleCount * 3, 30, 90 ); } } /* @@ -6094,7 +6122,10 @@ TController::UpdateSituation(double dt) { // jeśli opóźnienie większe od wymaganego (z histerezą) luzowanie, gdy za dużo // TBD: check if the condition isn't redundant with the DecBrake() code if( /*GBH mvOccupied->BrakeCtrlPos*/BrakeCtrlPosition >= 0 ) { - DecBrake(); // tutaj zmniejszało o 1 przy odczepianiu + if( VelDesired > 0.0 ) { + // sanity check to prevent unintended brake release on sharp slopes + DecBrake(); // tutaj zmniejszało o 1 przy odczepianiu + } } } else if( mvOccupied->Handle->TimeEP ) { @@ -6137,7 +6168,10 @@ TController::UpdateSituation(double dt) { // yB: luzuje hamulec dopiero przy różnicy opóźnień rzędu 0.2 if( OrderCurrentGet() != Disconnect ) { // przy odłączaniu nie zwalniamy tu hamulca - DecBrake(); // tutaj zmniejszało o 1 przy odczepianiu + if( VelDesired > 0.0 ) { + // sanity check to prevent unintended brake release on sharp slopes + DecBrake(); // tutaj zmniejszało o 1 przy odczepianiu + } } fBrakeTime = ( mvOccupied->BrakeDelayFlag > bdelay_G ? @@ -6628,7 +6662,7 @@ TCommandType TController::BackwardScan() double scandist = scanmax; // zmodyfikuje na rzeczywiście przeskanowane basic_event *e = NULL; // event potencjalnie od semafora // opcjonalnie może być skanowanie od "wskaźnika" z przodu, np. W5, Tm=Ms1, koniec toru wg drugiej osi w kierunku ruchu - TTrack *scantrack = BackwardTraceRoute(scandist, scandir, pVehicles[0]->RaTrackGet(), e); + TTrack *scantrack = BackwardTraceRoute(scandist, scandir, pVehicles[0]->GetTrack(), e); auto const dir = startdir * pVehicles[0]->VectorFront(); // wektor w kierunku jazdy/szukania if( !scantrack ) { // jeśli wstecz wykryto koniec toru to raczej nic się nie da w takiej sytuacji zrobić @@ -6816,43 +6850,56 @@ void TController::UpdateDelayFlag() { //-----------koniec skanowania semaforow -void TController::TakeControl(bool yes) +void TController::TakeControl( bool const Aidriver, bool const Forcevehiclecheck ) { // przejęcie kontroli przez AI albo oddanie - if (AIControllFlag == yes) + if (AIControllFlag == Aidriver) return; // już jest jak ma być - if (yes) //żeby nie wykonywać dwa razy + if (Aidriver) //żeby nie wykonywać dwa razy { // teraz AI prowadzi AIControllFlag = AIdriver; pVehicle->Controller = AIdriver; iDirection = 0; // kierunek jazdy trzeba dopiero zgadnąć - // gdy zgaszone światła, flaga podjeżdżania pod semafory pozostaje bez zmiany - // conditional below disabled to get around the situation where the AI train does nothing ever - // because it is waiting for orders which don't come until the engine is engaged, i.e. effectively never - if (OrderCurrentGet()) // jeśli coś robi - PrepareEngine(); // niech sprawdzi stan silnika - else // jeśli nic nie robi - if (pVehicle->iLights[ ( mvOccupied->CabNo < 0 ? - end::rear : - end::front ) ] - & (light::headlight_left | light::headlight_right | light::headlight_upper)) // któreś ze świateł zapalone? - { // od wersji 357 oczekujemy podania komend dla AI przez scenerię - OrderNext(Prepare_engine); - if (pVehicle->iLights[mvOccupied->CabNo < 0 ? end::rear : end::front] & light::headlight_upper) // górne światło zapalone - OrderNext(Obey_train); // jazda pociągowa - else - OrderNext(Shunt); // jazda manewrowa - if (mvOccupied->Vel >= 1.0) // jeśli jedzie (dla 0.1 ma stać) - iDrivigFlags &= ~moveStopHere; // to ma nie czekać na sygnał, tylko jechać - else - iDrivigFlags |= moveStopHere; // a jak stoi, to niech czeka - } - CheckVehicles(); // ustawienie świateł TableClear(); // ponowne utworzenie tabelki, bo człowiek mógł pojechać niezgodnie z sygnałami + if( action() != TAction::actSleep ) { + // gdy zgaszone światła, flaga podjeżdżania pod semafory pozostaje bez zmiany + // conditional below disabled to get around the situation where the AI train does nothing ever + // because it is waiting for orders which don't come until the engine is engaged, i.e. effectively never + if( OrderCurrentGet() ) { + // jeśli coś robi + PrepareEngine(); // niech sprawdzi stan silnika + } + else { + // jeśli nic nie robi + if( pVehicle->iLights[ ( mvOccupied->CabNo < 0 ? + end::rear : + end::front ) ] + & ( light::headlight_left | light::headlight_right | light::headlight_upper ) ) // któreś ze świateł zapalone? + { // od wersji 357 oczekujemy podania komend dla AI przez scenerię + OrderNext( Prepare_engine ); + if( pVehicle->iLights[ mvOccupied->CabNo < 0 ? end::rear : end::front ] & light::headlight_upper ) // górne światło zapalone + OrderNext( Obey_train ); // jazda pociągowa + else + OrderNext( Shunt ); // jazda manewrowa + if( mvOccupied->Vel >= 1.0 ) // jeśli jedzie (dla 0.1 ma stać) + iDrivigFlags &= ~moveStopHere; // to ma nie czekać na sygnał, tylko jechać + else + iDrivigFlags |= moveStopHere; // a jak stoi, to niech czeka + } + } + CheckVehicles(); // ustawienie świateł + } } else { // a teraz użytkownik AIControllFlag = Humandriver; pVehicle->Controller = Humandriver; + if( eAction == TAction::actSleep ) { + eAction = TAction::actUnknown; + } + if( Forcevehiclecheck ) { + // update consist ownership and other consist data + CheckVehicles(); + } } }; diff --git a/Driver.h b/Driver.h index a4c3ada2..43107cb1 100644 --- a/Driver.h +++ b/Driver.h @@ -194,9 +194,13 @@ public: public: void UpdateSituation(double dt); // uruchamiac przynajmniej raz na sekundę void MoveTo(TDynamicObject *to); - void TakeControl(bool yes); + void TakeControl(bool const Aidriver, bool const Forcevehiclecheck = false); inline - bool Primary() const { + bool primary( bool const Primary ) { + SetFlag( iDrivigFlags, ( Primary ? movePrimary : -movePrimary ) ); + return primary(); } + inline + bool primary() const { return ( ( iDrivigFlags & movePrimary ) != 0 ); }; inline TMoverParameters const *Controlling() const { @@ -210,8 +214,11 @@ public: inline int Direction() const { return iDirection; } + inline + TAction & action() { + return eAction; } inline - TAction GetAction() { + TAction const & action() const { return eAction; } private: void Activation(); // umieszczenie obsady w odpowiednim członie @@ -427,6 +434,7 @@ private: Mtable::TTrainParameters *TrainParams = nullptr; // rozkład jazdy zawsze jest, nawet jeśli pusty std::string asNextStop; // nazwa następnego punktu zatrzymania wg rozkładu int iStationStart = 0; // numer pierwszej stacji pokazywanej na podglądzie rozkładu + std::string m_lastexchangestop; // HACK: safeguard to prevent multiple load exchanges per station double fLastStopExpDist = -1.0; // odległość wygasania ostateniego przystanku int iRadioChannel = 1; // numer aktualnego kanału radiowego int iGuardRadio = 0; // numer kanału radiowego kierownika (0, gdy nie używa radia) diff --git a/DynObj.cpp b/DynObj.cpp index d04e0de9..960d2a47 100644 --- a/DynObj.cpp +++ b/DynObj.cpp @@ -162,6 +162,65 @@ void TAnim::Parovoz(){ */ +// assigns specified texture or a group of textures to replacable texture slots +void +material_data::assign( std::string const &Replacableskin ) { + + // check for the pipe method first + if( Replacableskin.find( '|' ) != std::string::npos ) { + cParser nameparser( Replacableskin ); + nameparser.getTokens( 4, true, "|" ); + int skinindex = 0; + std::string texturename; nameparser >> texturename; + while( ( texturename != "" ) && ( skinindex < 4 ) ) { + replacable_skins[ skinindex + 1 ] = GfxRenderer->Fetch_Material( texturename ); + ++skinindex; + texturename = ""; nameparser >> texturename; + } + multi_textures = skinindex; + } + else { + // otherwise try the basic approach + int skinindex = 0; + do { + // test quietly for file existence so we don't generate tons of false errors in the log + // NOTE: this means actual missing files won't get reported which is hardly ideal, but still somewhat better + auto const material { TextureTest( ToLower( Replacableskin + "," + std::to_string( skinindex + 1 ) ) ) }; + if( true == material.empty() ) { break; } + + replacable_skins[ skinindex + 1 ] = GfxRenderer->Fetch_Material( material ); + ++skinindex; + } while( skinindex < 4 ); + multi_textures = skinindex; + if( multi_textures == 0 ) { + // zestaw nie zadziałał, próbujemy normanie + replacable_skins[ 1 ] = GfxRenderer->Fetch_Material( Replacableskin ); + } + } + if( replacable_skins[ 1 ] == null_handle ) { + // last ditch attempt, check for single replacable skin texture + replacable_skins[ 1 ] = GfxRenderer->Fetch_Material( Replacableskin ); + } + + textures_alpha = ( + GfxRenderer->Material( replacable_skins[ 1 ] ).has_alpha ? + 0x31310031 : // tekstura -1 z kanałem alfa - nie renderować w cyklu nieprzezroczystych + 0x30300030 ); // wszystkie tekstury nieprzezroczyste - nie renderować w cyklu przezroczystych + if( GfxRenderer->Material( replacable_skins[ 2 ] ).has_alpha ) { + // tekstura -2 z kanałem alfa - nie renderować w cyklu nieprzezroczystych + textures_alpha |= 0x02020002; + } + if( GfxRenderer->Material( replacable_skins[ 3 ] ).has_alpha ) { + // tekstura -3 z kanałem alfa - nie renderować w cyklu nieprzezroczystych + textures_alpha |= 0x04040004; + } + if( GfxRenderer->Material( replacable_skins[ 4 ] ).has_alpha ) { + // tekstura -4 z kanałem alfa - nie renderować w cyklu nieprzezroczystych + textures_alpha |= 0x08080008; + } +} + + void TDynamicObject::destination_data::deserialize( cParser &Input ) { while( true == deserialize_mapping( Input ) ) { @@ -849,15 +908,18 @@ void TDynamicObject::ABuLittleUpdate(double ObjSqrDist) //*************************************************************/// koniec // wezykow // uginanie zderzakow - for (int i = 0; i < 2; i++) - { - double dist = MoverParameters->Couplers[i].Dist / 2.0; - if (smBuforLewy[i]) - if (dist < 0) - smBuforLewy[i]->SetTranslate( Math3D::vector3(dist, 0, 0)); - if (smBuforPrawy[i]) - if (dist < 0) - smBuforPrawy[i]->SetTranslate( Math3D::vector3(dist, 0, 0)); + for (int i = 0; i < 2; ++i) { + + auto const dist { clamp( MoverParameters->Couplers[ i ].Dist / 2.0, -MoverParameters->Couplers[ i ].DmaxB, 0.0 ) }; + + if( dist >= 0.0 ) { continue; } + + if( smBuforLewy[ i ] ) { + smBuforLewy[ i ]->SetTranslate( Math3D::vector3( dist, 0, 0 ) ); + } + if( smBuforPrawy[ i ] ) { + smBuforPrawy[ i ]->SetTranslate( Math3D::vector3( dist, 0, 0 ) ); + } } } // vehicle within 50m @@ -977,8 +1039,8 @@ void TDynamicObject::ABuLittleUpdate(double ObjSqrDist) if( ( false == bDisplayCab ) // edge case, lowpoly may act as a stand-in for the hi-fi cab, so make sure not to show the driver when inside && ( Mechanik != nullptr ) - && ( ( Mechanik->GetAction() != TAction::actSleep ) - || ( MoverParameters->Battery ) ) ) { + && ( ( Mechanik->action() != TAction::actSleep ) + /* || ( MoverParameters->Battery ) */ ) ) { // rysowanie figurki mechanika btMechanik1.Turn( MoverParameters->ActiveCab > 0 ); btMechanik2.Turn( MoverParameters->ActiveCab < 0 ); @@ -1616,6 +1678,7 @@ TDynamicObject::Init(std::string Name, // nazwa pojazdu, np. "EU07-424" } // load the cargo now that we know whether the vehicle will allow it MoverParameters->AssignLoad( LoadType, Load ); + MoverParameters->ComputeMass(); bool driveractive = (fVel != 0.0); // jeśli prędkość niezerowa, to aktywujemy ruch if (!MoverParameters->CheckLocomotiveParameters( @@ -2005,12 +2068,18 @@ TDynamicObject::Init(std::string Name, // nazwa pojazdu, np. "EU07-424" smBuforPrawy[ i ]->WillBeAnimated(); } } - for( auto &axle : m_axlesounds ) { - // wyszukiwanie osi (0 jest na końcu, dlatego dodajemy długość?) - axle.distance = ( - Reversed ? - -axle.offset : - ( axle.offset + MoverParameters->Dim.L ) ) + fDist; + if( Track->fSoundDistance > 0.f ) { + for( auto &axle : m_axlesounds ) { + // wyszukiwanie osi (0 jest na końcu, dlatego dodajemy długość?) + axle.distance = + clamp_circular( + ( Reversed ? + -axle.offset : + axle.offset ) + - 0.5 * MoverParameters->Dim.L + + fDist, + Track->fSoundDistance ); + } } // McZapkie-250202 end. Track->AddDynamicObject(this); // wstawiamy do toru na pozycję 0, a potem przesuniemy @@ -2203,12 +2272,9 @@ void TDynamicObject::Move(double fDistance) // Ra 2F1J: to nie jest stabilne (powoduje rzucanie taborem) i wymaga // dopracowania fAdjustment = vFront.Length() - fAxleDist; // na łuku będzie ujemny - // if (fabs(fAdjustment)>0.02) //jeśli jest zbyt dużo, to rozłożyć na kilka - // przeliczeń - // (wygasza drgania?) + // if (fabs(fAdjustment)>0.02) //jeśli jest zbyt dużo, to rozłożyć na kilka przeliczeń (wygasza drgania?) //{//parę centymetrów trzeba by już skorygować; te błędy mogą się też - // generować na ostrych - //łukach + // generować na ostrych łukach // fAdjustment*=0.5; //w jednym kroku korygowany jest ułamek błędu //} // else @@ -2431,6 +2497,7 @@ void TDynamicObject::update_exchange( double const Deltatime ) { m_exchange.unload_count -= exchangesize; MoverParameters->LoadStatus = 1; MoverParameters->LoadAmount = std::max( 0.f, MoverParameters->LoadAmount - exchangesize ); + MoverParameters->ComputeMass(); update_load_visibility(); } if( m_exchange.unload_count < 0.01 ) { @@ -2445,6 +2512,7 @@ void TDynamicObject::update_exchange( double const Deltatime ) { m_exchange.load_count -= exchangesize; MoverParameters->LoadStatus = 2; MoverParameters->LoadAmount = std::min( MoverParameters->MaxLoad, MoverParameters->LoadAmount + exchangesize ); // std::max not strictly needed but, eh + MoverParameters->ComputeMass(); update_load_visibility(); } } @@ -2759,7 +2827,7 @@ bool TDynamicObject::Update(double dt, double dt1) if (Mechanik) { // Ra 2F3F: do Driver.cpp to przenieść? MoverParameters->EqvtPipePress = GetEPP(); // srednie cisnienie w PG - if ((Mechanik->Primary()) + if ((Mechanik->primary()) && (MoverParameters->EngineType == TEngineType::DieselEngine) && (MoverParameters->EIMCtrlType > 0)) { MoverParameters->CheckEIMIC(dt1); @@ -2768,7 +2836,7 @@ bool TDynamicObject::Update(double dt, double dt1) MoverParameters->eimic_real = std::min(MoverParameters->eimic,MoverParameters->eimicSpeedCtrl); MoverParameters->SendCtrlToNext("EIMIC", MoverParameters->eimic_real, MoverParameters->CabNo); } - if( ( Mechanik->Primary() ) + if( ( Mechanik->primary() ) && ( MoverParameters->EngineType == TEngineType::ElectricInductionMotor ) ) { // jesli glowny i z asynchronami, to niech steruje hamulcem i napedem lacznie dla calego pociagu/ezt auto const kier = (DirectionGet() * MoverParameters->ActiveCab > 0); @@ -2783,8 +2851,8 @@ bool TDynamicObject::Update(double dt, double dt1) auto Frj { 0.0 }; auto osie { 0 }; // 0a. ustal aktualna nastawe zadania sily napedowej i hamowania - if (MoverParameters->Power < 1) - { + if( ( MoverParameters->Power < 1 ) + && ( ctOwner != nullptr ) ) { MoverParameters->MainCtrlPos = ctOwner->Controlling()->MainCtrlPos*MoverParameters->MainCtrlPosNo / std::max(1, ctOwner->Controlling()->MainCtrlPosNo); MoverParameters->SpeedCtrlValue = ctOwner->Controlling()->SpeedCtrlValue; } @@ -3125,11 +3193,22 @@ bool TDynamicObject::Update(double dt, double dt1) -vPosition.x, vPosition.z, vPosition.y }; - TRotation r { 0.0, 0.0, 0.0 }; + TRotation const r { + 0.0, + 0.0, + modelRot.z }; // McZapkie-260202 - dMoveLen przyda sie przy stukocie kol dDOMoveLen = GetdMoveLen() + MoverParameters->ComputeMovement(dt, dt1, ts, tp, tmpTraction, l, r); - if( Mechanik ) - Mechanik->MoveDistanceAdd( dDOMoveLen ); // dodanie aktualnego przemieszczenia + if( Mechanik ) { + // dodanie aktualnego przemieszczenia + Mechanik->MoveDistanceAdd( dDOMoveLen ); + } + if( ( simulation::Train != nullptr ) + && ( simulation::Train->Dynamic() == this ) ) { + // update distance meter in user-controlled cab + // TBD: place the meter on mover logic level? + simulation::Train->add_distance( dDOMoveLen ); + } Move(dDOMoveLen); if (!bEnabled) // usuwane pojazdy nie mają toru { // pojazd do usunięcia @@ -3143,12 +3222,14 @@ bool TDynamicObject::Update(double dt, double dt1) if( MyTrack->fSoundDistance != -1 ) { if( MyTrack->fSoundDistance != dRailLength ) { - dRailLength = MyTrack->fSoundDistance; - for( auto &axle : m_axlesounds ) { - axle.distance = axle.offset + MoverParameters->Dim.L; + if( dRailLength > 0.0 ) { + for( auto &axle : m_axlesounds ) { + axle.distance = axle.offset; + } } + dRailLength = MyTrack->fSoundDistance; } - if( dRailLength != -1 ) { + if( dRailLength > 0.0 ) { if( MoverParameters->Vel > 0 ) { // TODO: track quality and/or environment factors as separate subroutine auto volume = @@ -3170,35 +3251,43 @@ bool TDynamicObject::Update(double dt, double dt1) break; } } - - auto axleindex { 0 }; - for( auto &axle : m_axlesounds ) { - axle.distance -= dDOMoveLen * Sign( dDOMoveLen ); - if( axle.distance < 0 ) { - axle.distance += dRailLength; - if( MoverParameters->Vel > 2.5 ) { - // NOTE: for combined clatter sound we supply 1/100th of actual value, as the sound module converts does the opposite, converting received (typically) 0-1 values to 0-100 range - auto const frequency = ( - true == axle.clatter.is_combined() ? - MoverParameters->Vel * 0.01 : - 1.0 ); - axle.clatter - .pitch( frequency ) - .gain( volume ) - .play(); - // crude bump simulation, drop down on even axles, move back up on the odd ones - MoverParameters->AccVert += - interpolate( - 0.01, 0.05, - clamp( - GetVelocity() / ( 1 + MoverParameters->Vmax ), - 0.0, 1.0 ) ) - * ( ( axleindex % 2 ) != 0 ? - 1 : - -1 ); + if( dRailLength > 0.0 ) { + auto axleindex { 0 }; + auto const directioninconsist { ( + ctOwner == nullptr ? + 1 : + ( ctOwner->Vehicle()->DirectionGet() == DirectionGet() ? + 1 : + -1 ) ) }; + for( auto &axle : m_axlesounds ) { + axle.distance += dDOMoveLen * directioninconsist; + if( ( axle.distance < 0 ) + || ( axle.distance > dRailLength ) ) { + axle.distance = clamp_circular( axle.distance, dRailLength ); + if( MoverParameters->Vel > 0.1 ) { + // NOTE: for combined clatter sound we supply 1/100th of actual value, as the sound module converts does the opposite, converting received (typically) 0-1 values to 0-100 range + auto const frequency = ( + true == axle.clatter.is_combined() ? + MoverParameters->Vel * 0.01 : + 1.0 ); + axle.clatter + .pitch( frequency ) + .gain( volume ) + .play(); + // crude bump simulation, drop down on even axles, move back up on the odd ones + MoverParameters->AccVert += + interpolate( + 0.01, 0.05, + clamp( + GetVelocity() / ( 1 + MoverParameters->Vmax ), + 0.0, 1.0 ) ) + * ( ( axleindex % 2 ) != 0 ? + 1 : + -1 ); + } } + ++axleindex; } - ++axleindex; } } } @@ -3619,7 +3708,10 @@ bool TDynamicObject::FastUpdate(double dt) -vPosition.x, vPosition.z, vPosition.y }; - TRotation r { 0.0, 0.0, 0.0 }; + TRotation const r { + 0.0, + 0.0, + modelRot.z }; // McZapkie: parametry powinny byc pobierane z toru // ts.R=MyTrack->fRadius; // ts.Len= Max0R(MoverParameters->BDist,MoverParameters->ADist); @@ -3903,7 +3995,7 @@ void TDynamicObject::RenderSounds() { } // NBMX sygnal odjazdu if( MoverParameters->Doors.has_warning ) { - for( auto &door : m_doorsounds ) { + for( auto &departuresignalsound : m_departuresignalsounds ) { // TBD, TODO: per-location door state triggers? if( ( MoverParameters->DepartureSignal ) /* @@ -3914,10 +4006,10 @@ void TDynamicObject::RenderSounds() { ) { // for the autonomous doors play the warning automatically whenever a door is closing // MC: pod warunkiem ze jest zdefiniowane w chk - door.sDepartureSignal.play( sound_flags::exclusive | sound_flags::looping ); + departuresignalsound.play( sound_flags::exclusive | sound_flags::looping ); } else { - door.sDepartureSignal.stop(); + departuresignalsound.stop(); } } } @@ -4226,12 +4318,7 @@ void TDynamicObject::RenderSounds() { if( MoverParameters->EventFlag ) { // McZapkie: w razie wykolejenia if( true == TestFlag( MoverParameters->DamageFlag, dtrain_out ) ) { - if( GetVelocity() > 0 ) { - rsDerailment.play(); - } - else { - rsDerailment.stop(); - } + rsDerailment.play( sound_flags::exclusive ); } MoverParameters->EventFlag = false; @@ -4258,11 +4345,24 @@ void TDynamicObject::LoadMMediaFile( std::string const &TypeName, std::string co std::string asAnimName; bool Stop_InternalData = false; pants = NULL; // wskaźnik pierwszego obiektu animującego dla pantografów - cParser parser( TypeName + ".mmd", cParser::buffer_FILE, asBaseDir ); - if( false == parser.ok() ) { - ErrorLog( "Failed to load appearance data for vehicle " + MoverParameters->Name ); - return; + { + // preliminary check whether the file exists + cParser parser( TypeName + ".mmd", cParser::buffer_FILE, asBaseDir ); + if( false == parser.ok() ) { + ErrorLog( "Failed to load appearance data for vehicle " + MoverParameters->Name ); + return; + } } + // use #include wrapper to access the appearance data file + // this allows us to provide the file content with user-defined parameters + cParser parser( + "include " + TypeName + ".mmd" + + " " + asName // (p1) + + " " + TypeName // (p2) + + " " + ReplacableSkin // (p3) + + " end", + cParser::buffer_TEXT, + asBaseDir ); std::string token; do { token = ""; @@ -4284,6 +4384,8 @@ void TDynamicObject::LoadMMediaFile( std::string const &TypeName, std::string co if( asModel[ 0 ] == '/' ) { asModel.erase( 0, 1 ); } + /* + // never really used, may as well get rid of it std::size_t i = asModel.find( ',' ); if ( i != std::string::npos ) { // Ra 2015-01: może szukać przecinka w nazwie modelu, a po przecinku była by liczba tekstur? @@ -4292,76 +4394,15 @@ void TDynamicObject::LoadMMediaFile( std::string const &TypeName, std::string co } m_materialdata.multi_textures = clamp( m_materialdata.multi_textures, 0, 1 ); // na razie ustawiamy na 1 } + */ asModel = asBaseDir + asModel; // McZapkie 2002-07-20: dynamics maja swoje modele w dynamics/basedir Global.asCurrentTexturePath = asBaseDir; // biezaca sciezka do tekstur to dynamic/... mdModel = TModelsManager::GetModel(asModel, true); - if (ReplacableSkin != "none") - { - if (m_materialdata.multi_textures > 0) { - // jeśli model ma 4 tekstury - // check for the pipe method first - if( ReplacableSkin.find( '|' ) != std::string::npos ) { - cParser nameparser( ReplacableSkin ); - nameparser.getTokens( 4, true, "|" ); - int skinindex = 0; - std::string texturename; nameparser >> texturename; - while( ( texturename != "" ) && ( skinindex < 4 ) ) { - m_materialdata.replacable_skins[ skinindex + 1 ] = GfxRenderer.Fetch_Material( texturename ); - ++skinindex; - texturename = ""; nameparser >> texturename; - } - m_materialdata.multi_textures = skinindex; - } - else { - // otherwise try the basic approach - int skinindex = 0; - do { - material_handle material = GfxRenderer.Fetch_Material( ReplacableSkin + "," + std::to_string( skinindex + 1 ), true ); - if( material == null_handle ) { - break; - } - m_materialdata.replacable_skins[ skinindex + 1 ] = material; - ++skinindex; - } while( skinindex < 4 ); - m_materialdata.multi_textures = skinindex; - if( m_materialdata.multi_textures == 0 ) { - // zestaw nie zadziałał, próbujemy normanie - m_materialdata.replacable_skins[ 1 ] = GfxRenderer.Fetch_Material( ReplacableSkin ); - } - } - } - else { - m_materialdata.replacable_skins[ 1 ] = GfxRenderer.Fetch_Material( ReplacableSkin ); - } - + if (ReplacableSkin != "none") { + m_materialdata.assign( ReplacableSkin ); // potentially set blank destination texture DestinationSign.destination_off = DestinationFind( "nowhere" ); // DestinationSet( {}, {} ); - - if( GfxRenderer.Material( m_materialdata.replacable_skins[ 1 ] ).has_alpha ) { - // tekstura -1 z kanałem alfa - nie renderować w cyklu nieprzezroczystych - m_materialdata.textures_alpha = 0x31310031; - } - else { - // wszystkie tekstury nieprzezroczyste - nie renderować w cyklu przezroczystych - m_materialdata.textures_alpha = 0x30300030; - } - - if( ( m_materialdata.replacable_skins[ 2 ] ) - && ( GfxRenderer.Material( m_materialdata.replacable_skins[ 2 ] ).has_alpha ) ) { - // tekstura -2 z kanałem alfa - nie renderować w cyklu nieprzezroczystych - m_materialdata.textures_alpha |= 0x02020002; - } - if( ( m_materialdata.replacable_skins[ 3 ] ) - && ( GfxRenderer.Material( m_materialdata.replacable_skins[ 3 ] ).has_alpha ) ) { - // tekstura -3 z kanałem alfa - nie renderować w cyklu nieprzezroczystych - m_materialdata.textures_alpha |= 0x04040004; - } - if( ( m_materialdata.replacable_skins[ 4 ] ) - && ( GfxRenderer.Material( m_materialdata.replacable_skins[ 4 ] ).has_alpha ) ) { - // tekstura -4 z kanałem alfa - nie renderować w cyklu nieprzezroczystych - m_materialdata.textures_alpha |= 0x08080008; - } } Global.asCurrentTexturePath = szTexturePath; // z powrotem defaultowa sciezka do tekstur do { @@ -4420,15 +4461,30 @@ void TDynamicObject::LoadMMediaFile( std::string const &TypeName, std::string co parser.getTokens(); parser >> asModel; replace_slashes( asModel ); - if( asModel[ 0 ] == '/' ) { - // filename can potentially begin with a slash, and we don't need it - asModel.erase( 0, 1 ); - } + erase_leading_slashes( asModel ); asModel = asBaseDir + asModel; // McZapkie-200702 - dynamics maja swoje modele w dynamic/basedir Global.asCurrentTexturePath = asBaseDir; // biezaca sciezka do tekstur to dynamic/... mdLowPolyInt = TModelsManager::GetModel(asModel, true); } + else if(token == "attachments:") { + // additional 3d models attached to main body + // content provided as a series of values together enclosed in "{}" + // each value is a name of additional 3d model + // value can be optionally set of values enclosed in "[]" in which case one value will be picked randomly + // TBD: reconsider something more yaml-compliant and/or ability to define offset and rotation + while( ( ( token = deserialize_random_set( parser ) ) != "" ) + && ( token != "}" ) ) { + if( token == "{" ) { continue; } + replace_slashes( token ); + Global.asCurrentTexturePath = asBaseDir; // biezaca sciezka do tekstur to dynamic/... + auto *attachmentmodel { TModelsManager::GetModel( asBaseDir + token, true ) }; + if( attachmentmodel != nullptr ) { + mdAttachments.emplace_back( attachmentmodel ); + } + } + } + else if(token == "loads:") { // default load visualization models overrides // content provided as "key: value" pairs together enclosed in "{}" @@ -4972,18 +5028,18 @@ void TDynamicObject::LoadMMediaFile( std::string const &TypeName, std::string co // add another axle entry to the list axle_sounds axle { 0, - std::atof( token.c_str() ), + std::atof( token.c_str() ) * -1.0, // for axle locations negative value means ahead of centre but vehicle faces +Z in 'its' space { sound_placement::external, static_cast( dSDist ) } }; axle.clatter.deserialize( parser, sound_type::single ); axle.clatter.owner( this ); - axle.clatter.offset( { 0, 0, -axle.offset } ); // vehicle faces +Z in 'its' space, for axle locations negative value means ahead of centre + axle.clatter.offset( { 0, 0, axle.offset } ); m_axlesounds.emplace_back( axle ); } // arrange the axles in case they're listed out of order std::sort( std::begin( m_axlesounds ), std::end( m_axlesounds ), []( axle_sounds const &Left, axle_sounds const &Right ) { - return ( Left.offset < Right.offset ); } ); + return ( Left.offset > Right.offset ); } ); } else if( ( token == "engine:" ) @@ -5232,11 +5288,11 @@ void TDynamicObject::LoadMMediaFile( std::string const &TypeName, std::string co sound_source soundtemplate { sound_placement::general, 25.f }; soundtemplate.deserialize( parser, sound_type::multipart, sound_parameters::range ); soundtemplate.owner( this ); - for( auto &door : m_doorsounds ) { + for( auto &departuresignalsound : m_departuresignalsounds ) { // apply configuration to all defined doors, but preserve their individual offsets - auto const dooroffset { door.lock.offset() }; - door.sDepartureSignal = soundtemplate; - door.sDepartureSignal.offset( dooroffset ); + auto const soundoffset { departuresignalsound.offset() }; + departuresignalsound = soundtemplate; + departuresignalsound.offset( soundoffset ); } } @@ -5390,7 +5446,6 @@ void TDynamicObject::LoadMMediaFile( std::string const &TypeName, std::string co // left... auto const location { glm::vec3 { MoverParameters->Dim.W * 0.5f, MoverParameters->Dim.H * 0.5f, offset } }; door.placement = side::left; - door.sDepartureSignal.offset( location ); door.rsDoorClose.offset( location ); door.rsDoorOpen.offset( location ); door.lock.offset( location ); @@ -5402,9 +5457,8 @@ void TDynamicObject::LoadMMediaFile( std::string const &TypeName, std::string co if( ( sides == "both" ) || ( sides == "right" ) ) { // ...and right - auto const location { glm::vec3 { MoverParameters->Dim.W * -0.5f, MoverParameters->Dim.H * 0.5f, offset } }; + auto const location { glm::vec3 { MoverParameters->Dim.W * -0.5f, 2.f, offset } }; door.placement = side::right; - door.sDepartureSignal.offset( location ); door.rsDoorClose.offset( location ); door.rsDoorOpen.offset( location ); door.lock.offset( location ); @@ -5413,6 +5467,10 @@ void TDynamicObject::LoadMMediaFile( std::string const &TypeName, std::string co door.step_open.offset( location ); m_doorsounds.emplace_back( door ); } + // potential departure sound, one per door (pair) on vehicle centreline + sound_source departuresignalsound { sound_placement::general, 25.f }; + departuresignalsound.offset( glm::vec3{ 0.f, 3.f, offset } ); + m_departuresignalsounds.emplace_back( departuresignalsound ); } } @@ -5715,6 +5773,9 @@ void TDynamicObject::LoadMMediaFile( std::string const &TypeName, std::string co mdLoad->Init(); if (mdLowPolyInt) mdLowPolyInt->Init(); + for( auto *attachment : mdAttachments ) { + attachment->Init(); + } Global.asCurrentTexturePath = szTexturePath; // kiedyś uproszczone wnętrze mieszało tekstury nieba Global.asCurrentDynamicPath = ""; @@ -6268,7 +6329,7 @@ void TDynamicObject::DestinationSet(std::string to, std::string numer) { signrequest += "&" + DestinationSign.parameters; } - DestinationSign.destination = GfxRenderer.Fetch_Material( signrequest ); + DestinationSign.destination = GfxRenderer->Fetch_Material( signrequest ); } material_handle TDynamicObject::DestinationFind( std::string Destination ) { @@ -6289,7 +6350,7 @@ material_handle TDynamicObject::DestinationFind( std::string Destination ) { for( auto const &destination : destinations ) { auto material = TextureTest( ToLower( destination ) ); if( false == material.empty() ) { - destinationhandle = GfxRenderer.Fetch_Material( material ); + destinationhandle = GfxRenderer->Fetch_Material( material ); break; } } diff --git a/DynObj.h b/DynObj.h index 4b89c201..55a4ba15 100644 --- a/DynObj.h +++ b/DynObj.h @@ -154,6 +154,9 @@ struct material_data { int textures_alpha{ 0x30300030 }; // maska przezroczystości tekstur. default: tekstury wymienne nie mają przezroczystości material_handle replacable_skins[ 5 ] = { null_handle, null_handle, null_handle, null_handle, null_handle }; // McZapkie:zmienialne nadwozie int multi_textures{ 0 }; //<0 tekstury wskazane wpisem, >0 tekstury z przecinkami, =0 jedna + + // assigns specified texture or a group of textures to replacable texture slots + void assign( std::string const &Replacableskin ); }; class TDynamicObject { // klasa pojazdu @@ -200,6 +203,7 @@ public: TModel3d *mdLowPolyInt; // ABu 010305: wnetrze lowpoly std::array LowPolyIntCabs {}; // pointers to low fidelity version of individual driver cabs bool JointCabs{ false }; // flag for vehicles with multiple virtual 'cabs' sharing location and 3d model(s) + std::vector mdAttachments; // additional models attached to main body struct destination_data { TSubModel *sign { nullptr }; // submodel mapped with replacable texture -4 bool has_light { false }; // the submodel was originally configured with self-illumination attribute @@ -319,7 +323,6 @@ private: }; struct door_sounds { - sound_source sDepartureSignal { sound_placement::general }; sound_source rsDoorOpen { sound_placement::general }; // Ra: przeniesione z kabiny sound_source rsDoorClose { sound_placement::general }; sound_source lock { sound_placement::general }; @@ -446,6 +449,7 @@ private: std::array m_couplersounds; // always front and rear std::vector m_pantographsounds; // typically 2 but can be less (or more?) std::vector m_doorsounds; // can expect symmetrical arrangement, but don't count on it + std::vector m_departuresignalsounds; // single source per door (pair) on the centreline bool m_doorlocks { false }; // sound helper, current state of door locks sound_source sHorn1 { sound_placement::external, 5 * EU07_SOUND_RUNNINGNOISECUTOFFRANGE }; sound_source sHorn2 { sound_placement::external, 5 * EU07_SOUND_RUNNINGNOISECUTOFFRANGE }; @@ -619,7 +623,7 @@ private: Axle1.GetTranslation() : Axle0.GetTranslation(); }; // zwraca tor z aktywną osią - inline TTrack * RaTrackGet() const { + inline TTrack const * RaTrackGet() const { return iAxleFirst ? Axle1.GetTrack() : Axle0.GetTrack(); }; diff --git a/EvLaunch.cpp b/EvLaunch.cpp index aa41b9e4..275be42d 100644 --- a/EvLaunch.cpp +++ b/EvLaunch.cpp @@ -56,34 +56,28 @@ bool TEventLauncher::Load(cParser *parser) dRadius *= dRadius; // do kwadratu, pod warunkiem, że nie jest ujemne parser->getTokens(); // klawisz sterujący *parser >> token; - if (token != "none") - { - if( token.size() == 1 ) + if (token != "none") { + + if( token.size() == 1 ) { + // single char, assigned activation key iKey = vk_to_glfw_key( token[ 0 ] ); - else - iKey = vk_to_glfw_key(stol_def( token, 0 )); // a jak więcej, to jakby numer klawisza jest + } + else { + // this launcher may be activated by radio message + std::map messages { + { "radio_call1", radio_message::call1 }, + { "radio_call3", radio_message::call3 } + }; + auto lookup = messages.find( token ); + iKey = ( + lookup != messages.end() ? + lookup->second : + // a jak więcej, to jakby numer klawisza jest + vk_to_glfw_key( stol_def( token, 0 ) ) ); + } } parser->getTokens(); *parser >> DeltaTime; - if (DeltaTime < 0) - DeltaTime = -DeltaTime; // dla ujemnego zmieniamy na dodatni - else if (DeltaTime > 0) - { // wartość dodatnia oznacza wyzwalanie o określonej godzinie - iMinute = int(DeltaTime) % 100; // minuty są najmłodszymi cyframi dziesietnymi - iHour = int(DeltaTime - iMinute) / 100; // godzina to setki - DeltaTime = 0; // bez powtórzeń - // potentially shift the provided time by requested offset - auto const timeoffset { static_cast( Global.ScenarioTimeOffset * 60 ) }; - if( timeoffset != 0 ) { - auto const adjustedtime { clamp_circular( iHour * 60 + iMinute + timeoffset, 24 * 60 ) }; - iHour = ( adjustedtime / 60 ) % 24; - iMinute = adjustedtime % 60; - } - WriteLog( - "EventLauncher at " - + std::to_string( iHour ) + ":" - + ( iMinute < 10 ? "0" : "" ) + to_string( iMinute ) ); // wyświetlenie czasu - } parser->getTokens(); *parser >> token; asEvent1Name = token; // pierwszy event @@ -132,6 +126,29 @@ bool TEventLauncher::Load(cParser *parser) parser->getTokens(); // słowo zamykające *parser >> token; } + + if( DeltaTime < 0 ) + DeltaTime = -DeltaTime; // dla ujemnego zmieniamy na dodatni + else if( DeltaTime > 0 ) { // wartość dodatnia oznacza wyzwalanie o określonej godzinie + iMinute = int( DeltaTime ) % 100; // minuty są najmłodszymi cyframi dziesietnymi + iHour = int( DeltaTime - iMinute ) / 100; // godzina to setki + DeltaTime = 0; // bez powtórzeń + // potentially shift the provided time by requested offset + auto const timeoffset{ static_cast( Global.ScenarioTimeOffset * 60 ) }; + if( timeoffset != 0 ) { + auto const adjustedtime{ clamp_circular( iHour * 60 + iMinute + timeoffset, 24 * 60 ) }; + iHour = ( adjustedtime / 60 ) % 24; + iMinute = adjustedtime % 60; + } + + WriteLog( + "EventLauncher at " + + std::to_string( iHour ) + ":" + + ( iMinute < 10 ? "0" : "" ) + to_string( iMinute ) + + " (" + asEvent1Name + + ( asEvent2Name != "none" ? " / " + asEvent2Name : "" ) + + ")" ); // wyświetlenie czasu + } return true; } @@ -139,7 +156,7 @@ bool TEventLauncher::check_activation() { auto bCond { false }; - if( iKey != 0 ) { + if( iKey > 0 ) { if( iKey > 255 ) { // key and modifier auto const modifier = ( iKey & 0xff00 ) >> 8; @@ -203,6 +220,11 @@ bool TEventLauncher::IsGlobal() const { && ( dRadius < 0.0 ) ); // bez ograniczenia zasięgu } +bool TEventLauncher::IsRadioActivated() const { + + return ( iKey < 0 ); +} + // radius() subclass details, calculates node's bounding radius float TEventLauncher::radius_() { diff --git a/EvLaunch.h b/EvLaunch.h index 84512e56..b4006901 100644 --- a/EvLaunch.h +++ b/EvLaunch.h @@ -14,6 +14,12 @@ http://mozilla.org/MPL/2.0/. #include "Classes.h" #include "scenenode.h" +// radio-transmitted event launch messages +enum radio_message { + call3 = -3, + call1 = -1 +}; + class TEventLauncher : public scene::basic_node { public: @@ -27,7 +33,11 @@ public: bool check_activation(); // checks conditions associated with the event. returns: true if the conditions are met bool check_conditions(); + inline + auto key() const { + return iKey; } bool IsGlobal() const; + bool IsRadioActivated() const; // members std::string asEvent1Name; std::string asEvent2Name; diff --git a/Event.cpp b/Event.cpp index ac58a10e..fdcf7e93 100644 --- a/Event.cpp +++ b/Event.cpp @@ -897,7 +897,7 @@ whois_event::run_() { // jeśli typ pojazdu // TODO: define and recognize individual request types auto const owner { ( - ( ( m_activator->Mechanik != nullptr ) && ( m_activator->Mechanik->Primary() ) ) ? + ( ( m_activator->Mechanik != nullptr ) && ( m_activator->Mechanik->primary() ) ) ? m_activator->Mechanik : m_activator->ctOwner ) }; auto const consistbrakelevel { ( @@ -952,7 +952,7 @@ whois_event::run_() { } // +0 else if( m_activator->Mechanik ) { - if( m_activator->Mechanik->Primary() ) { // tylko jeśli ktoś tam siedzi - nie powinno dotyczyć pasażera! + if( m_activator->Mechanik->primary() ) { // tylko jeśli ktoś tam siedzi - nie powinno dotyczyć pasażera! targetcell->UpdateValues( m_activator->Mechanik->TrainName(), m_activator->Mechanik->StationCount() - m_activator->Mechanik->StationIndex(), // ile przystanków do końca @@ -1034,7 +1034,7 @@ logvalues_event::export_as_text_( std::ostream &Output ) const { void multi_event::init() { - auto const conditiontchecksmemcell { m_conditions.flags & ( flags::text | flags::value_1 | flags::value_2 ) }; + auto const conditiontchecksmemcell { ( m_conditions.flags & ( flags::text | flags::value_1 | flags::value_2 ) ) != 0 }; // not all multi-events have memory cell checks, for the ones which don't we can keep quiet about it init_targets( simulation::Memory, "memory cell", conditiontchecksmemcell ); if( m_ignored ) { @@ -1932,6 +1932,22 @@ event_manager::queue( TEventLauncher *Launcher ) { m_launcherqueue.emplace_back( Launcher ); } +// inserts in the event query events assigned to event launchers capable of receiving specified radio message sent from specified location +void +event_manager::queue_receivers( radio_message const Message, glm::dvec3 const &Location ) { + + for( auto *launcher : m_radiodrivenlaunchers.sequence() ) { + if( ( launcher->key() == Message ) + && ( ( launcher->dRadius < 0 ) + || ( glm::length2( launcher->location() - Location ) < launcher->dRadius ) ) + && ( true == launcher->check_conditions() ) ) { + // NOTE: only execution of event1 is supported for radio messages + // TBD, TODO: consider ability/way to execute event2 + simulation::Events.AddToQuery( launcher->Event1, nullptr ); + } + } +} + // legacy method, updates event queues void event_manager::update() { @@ -2135,32 +2151,39 @@ event_manager::InitEvents() { void event_manager::InitLaunchers() { - for( auto *launcher : m_launchers.sequence() ) { + std::vector *> launchertables { + &m_inputdrivenlaunchers, + &m_radiodrivenlaunchers + }; - if( launcher->iCheckMask != 0 ) { - if( launcher->asMemCellName != "none" ) { - // jeśli jest powiązana komórka pamięci - launcher->MemCell = simulation::Memory.find( launcher->asMemCellName ); - if( launcher->MemCell == nullptr ) { - ErrorLog( "Bad scenario: event launcher \"" + launcher->name() + "\" can't find memcell \"" + launcher->asMemCellName + "\"" ); + for( auto *launchertable : launchertables ) { + for( auto *launcher : launchertable->sequence() ) { + + if( launcher->iCheckMask != 0 ) { + if( launcher->asMemCellName != "none" ) { + // jeśli jest powiązana komórka pamięci + launcher->MemCell = simulation::Memory.find( launcher->asMemCellName ); + if( launcher->MemCell == nullptr ) { + ErrorLog( "Bad scenario: event launcher \"" + launcher->name() + "\" can't find memcell \"" + launcher->asMemCellName + "\"" ); + } + } + else { + launcher->MemCell = nullptr; } } - else { - launcher->MemCell = nullptr; - } - } - if( launcher->asEvent1Name != "none" ) { - launcher->Event1 = simulation::Events.FindEvent( launcher->asEvent1Name ); - if( launcher->Event1 == nullptr ) { - ErrorLog( "Bad scenario: event launcher \"" + launcher->name() + "\" can't find event \"" + launcher->asEvent1Name + "\"" ); + if( launcher->asEvent1Name != "none" ) { + launcher->Event1 = simulation::Events.FindEvent( launcher->asEvent1Name ); + if( launcher->Event1 == nullptr ) { + ErrorLog( "Bad scenario: event launcher \"" + launcher->name() + "\" can't find event \"" + launcher->asEvent1Name + "\"" ); + } } - } - if( launcher->asEvent2Name != "none" ) { - launcher->Event2 = simulation::Events.FindEvent( launcher->asEvent2Name ); - if( launcher->Event2 == nullptr ) { - ErrorLog( "Bad scenario: event launcher \"" + launcher->name() + "\" can't find event \"" + launcher->asEvent2Name + "\"" ); + if( launcher->asEvent2Name != "none" ) { + launcher->Event2 = simulation::Events.FindEvent( launcher->asEvent2Name ); + if( launcher->Event2 == nullptr ) { + ErrorLog( "Bad scenario: event launcher \"" + launcher->name() + "\" can't find event \"" + launcher->asEvent2Name + "\"" ); + } } } } @@ -2176,8 +2199,14 @@ event_manager::export_as_text( std::ostream &Output ) const { event->export_as_text( Output ); } } - Output << "// event launchers\n"; - for( auto const *launcher : m_launchers.sequence() ) { + Output << "// event launchers, basic\n"; + for( auto const *launcher : m_inputdrivenlaunchers.sequence() ) { + if( launcher->group() == null_handle ) { + launcher->export_as_text( Output ); + } + } + Output << "// event launchers, radio driven\n"; + for( auto const *launcher : m_radiodrivenlaunchers.sequence() ) { if( launcher->group() == null_handle ) { launcher->export_as_text( Output ); } diff --git a/Event.h b/Event.h index 59f82d75..ca01c295 100644 --- a/Event.h +++ b/Event.h @@ -559,6 +559,9 @@ public: // adds specified event launcher to the list of global launchers void queue( TEventLauncher *Launcher ); + // inserts in the event query events assigned to event launchers capable of receiving specified radio message sent from specified location + void + queue_receivers( radio_message const Message, glm::dvec3 const &Location ); // legacy method, updates event queues void update(); @@ -569,7 +572,10 @@ public: inline bool insert( TEventLauncher *Launcher ) { - return m_launchers.insert( Launcher ); } + return ( + Launcher->IsRadioActivated() ? + m_radiodrivenlaunchers.insert( Launcher ) : + m_inputdrivenlaunchers.insert( Launcher ) ); } // returns first event in the queue inline basic_event * @@ -609,7 +615,8 @@ private: basic_event *QueryRootEvent { nullptr }; basic_event *m_workevent { nullptr }; event_map m_eventmap; - basic_table m_launchers; + basic_table m_inputdrivenlaunchers; + basic_table m_radiodrivenlaunchers; eventlauncher_sequence m_launcherqueue; }; diff --git a/Globals.cpp b/Globals.cpp index 562b6b2c..b77a9249 100644 --- a/Globals.cpp +++ b/Globals.cpp @@ -58,7 +58,7 @@ global_settings::ConfigParse(cParser &Parser) { Parser.getTokens( 1, false ); Parser >> FieldOfView; // guard against incorrect values - FieldOfView = clamp( FieldOfView, 15.0f, 75.0f ); + FieldOfView = clamp( FieldOfView, 10.0f, 75.0f ); } else if (token == "width") { @@ -175,12 +175,6 @@ global_settings::ConfigParse(cParser &Parser) { Parser.getTokens(); Parser >> DisabledLogTypes; } - else if( token == "adjustscreenfreq" ) - { - // McZapkie-240403 - czestotliwosc odswiezania ekranu - Parser.getTokens(); - Parser >> bAdjustScreenFreq; - } else if (token == "mousescale") { // McZapkie-060503 - czulosc ruchu myszy (krecenia glowa) @@ -362,6 +356,23 @@ global_settings::ConfigParse(cParser &Parser) { >> shadowtune.depth >> shadowtune.distance; } + else if( token == "gfx.shadows.cab.range" ) { + // shadow render toggle + Parser.getTokens(); + Parser >> RenderCabShadowsRange; + } + else if( token == "gfx.smoke" ) { + // smoke visualization toggle + Parser.getTokens(); + Parser >> Smoke; + } + else if( token == "gfx.smoke.fidelity" ) { + // smoke visualization fidelity + float smokefidelity; + Parser.getTokens(); + Parser >> smokefidelity; + SmokeFidelity = clamp( smokefidelity, 1.f, 4.f ); + } else if (token == "smoothtraction") { // podwójna jasność ambient @@ -638,7 +649,7 @@ global_settings::ConfigParse(cParser &Parser) { >> uart_conf.updatetime; } else if( token == "uarttune" ) { - Parser.getTokens( 14 ); + Parser.getTokens( 16 ); Parser >> uart_conf.mainbrakemin >> uart_conf.mainbrakemax @@ -653,7 +664,9 @@ global_settings::ConfigParse(cParser &Parser) { >> uart_conf.hvmax >> uart_conf.hvuart >> uart_conf.currentmax - >> uart_conf.currentuart; + >> uart_conf.currentuart + >> uart_conf.lvmax + >> uart_conf.lvuart; } else if( token == "uartfeature" ) { Parser.getTokens( 4 ); diff --git a/Globals.h b/Globals.h index 9348b9d1..695b06bc 100644 --- a/Globals.h +++ b/Globals.h @@ -108,6 +108,7 @@ struct global_settings { bool ScaleSpecularValues{ true }; bool BasicRenderer{ false }; bool RenderShadows{ true }; + int RenderCabShadowsRange{ 0 }; struct shadowtune_t { unsigned int map_size{ 2048 }; float width{ 250.f }; // no longer used @@ -122,6 +123,8 @@ struct global_settings { int iMultisampling{ 2 }; // tryb antyaliasingu: 0=brak,1=2px,2=4px,3=8px,4=16px bool bSmoothTraction{ true }; // wygładzanie drutów starym sposobem float SplineFidelity{ 1.f }; // determines segment size during conversion of splines to geometry + bool Smoke{ true }; // toggles smoke simulation and visualization + float SmokeFidelity{ 1.f }; // determines amount of generated smoke particles bool ResourceSweep{ true }; // gfx resource garbage collection bool ResourceMove{ false }; // gfx resources are moved between cpu and gpu side instead of sending a copy bool compress_tex{ true }; // all textures are compressed on gpu side diff --git a/McZapkie/MOVER.h b/McZapkie/MOVER.h index 5b663972..98a16d6b 100644 --- a/McZapkie/MOVER.h +++ b/McZapkie/MOVER.h @@ -204,6 +204,7 @@ static int const dbrake_automatic = 8; /*status czuwaka/SHP*/ //hunter-091012: rozdzielenie alarmow, dodanie testu czuwaka +static int const s_off = 0; //disabled static int const s_waiting = 1; //działa static int const s_aware = 2; //czuwak miga static int const s_active = 4; //SHP świeci @@ -665,6 +666,7 @@ struct TCoupling { double CForce = 0.0; /*sila z jaka dzialal*/ double Dist = 0.0; /*strzalka ugiecia zderzaków*/ bool CheckCollision = false; /*czy sprawdzac sile czy pedy*/ + float stretch_duration { 0.f }; // seconds, elapsed time with excessive force applied to the coupler power_coupling power_high; // power_coupling power_low; // TODO: implement this @@ -1176,10 +1178,10 @@ public: double MED_EPVC_Time = 7; // czas korekcji sily hamowania EP, gdy nie ma dostepnego ED bool MED_Ncor = 0; // czy korekcja sily hamowania z uwzglednieniem nacisku - int DCEMUED_CC; //na którym sprzęgu sprawdzać działanie ED - double DCEMUED_EP_max_Vel; //maksymalna prędkość, przy której działa EP przy włączonym ED w jednostce (dla tocznych) - double DCEMUED_EP_min_Im; //minimalny prąd, przy którym EP nie działa przy włączonym ED w członie (dla silnikowych) - double DCEMUED_EP_delay; //opóźnienie włączenia hamulca EP przy hamowaniu ED - zwłoka wstępna + int DCEMUED_CC { 0 }; //na którym sprzęgu sprawdzać działanie ED + double DCEMUED_EP_max_Vel{ 0.0 }; //maksymalna prędkość, przy której działa EP przy włączonym ED w jednostce (dla tocznych) + double DCEMUED_EP_min_Im{ 0.0 }; //minimalny prąd, przy którym EP nie działa przy włączonym ED w członie (dla silnikowych) + double DCEMUED_EP_delay{ 0.0 }; //opóźnienie włączenia hamulca EP przy hamowaniu ED - zwłoka wstępna /*-dla wagonow*/ struct load_attributes { @@ -1219,6 +1221,7 @@ public: /*--opis konkretnego egzemplarza taboru*/ TLocation Loc { 0.0, 0.0, 0.0 }; //pozycja pojazdów do wyznaczenia odległości pomiędzy sprzęgami TRotation Rot { 0.0, 0.0, 0.0 }; + glm::vec3 Front{}; std::string Name; /*nazwa wlasna*/ TCoupling Couplers[2]; //urzadzenia zderzno-sprzegowe, polaczenia miedzy wagonami std::array Neighbours; // potential collision sources @@ -1330,6 +1333,8 @@ public: /*-zmienne dla lokomotyw*/ bool Mains = false; /*polozenie glownego wylacznika*/ + double MainsInitTime{ 0.0 }; // config, initialization time (in seconds) of the main circuit after it receives power, before it can be closed + double MainsInitTimeCountdown{ 0.0 }; // current state of main circuit initialization, remaining time (in seconds) until it's ready int MainCtrlPos = 0; /*polozenie glownego nastawnika*/ int ScndCtrlPos = 0; /*polozenie dodatkowego nastawnika*/ int LightsPos = 0; /*polozenie przelacznika wielopozycyjnego swiatel*/ @@ -1490,6 +1495,8 @@ public: bool Attach(int ConnectNo, int ConnectToNr, TMoverParameters *ConnectTo, int CouplingType, bool Forced = false, bool Audible = true); int DettachStatus(int ConnectNo); bool Dettach(int ConnectNo); + void damage_coupler( int const End ); + void derail( int const Reason ); bool DirectionForward(); bool DirectionBackward( void );/*! kierunek ruchu*/ void BrakeLevelSet(double b); @@ -1499,8 +1506,8 @@ public: bool ChangeCab(int direction); bool CurrentSwitch(bool const State); void UpdateBatteryVoltage(double dt); - double ComputeMovement(double dt, double dt1, const TTrackShape &Shape, TTrackParam &Track, TTractionParam &ElectricTraction, const TLocation &NewLoc, TRotation &NewRot); //oblicza przesuniecie pojazdu - double FastComputeMovement(double dt, const TTrackShape &Shape, TTrackParam &Track, const TLocation &NewLoc, TRotation &NewRot); //oblicza przesuniecie pojazdu - wersja zoptymalizowana + double ComputeMovement(double dt, double dt1, const TTrackShape &Shape, TTrackParam &Track, TTractionParam &ElectricTraction, TLocation const &NewLoc, TRotation const &NewRot); //oblicza przesuniecie pojazdu + double FastComputeMovement(double dt, const TTrackShape &Shape, TTrackParam &Track, TLocation const &NewLoc, TRotation const &NewRot); //oblicza przesuniecie pojazdu - wersja zoptymalizowana void compute_movement_( double const Deltatime ); double ShowEngineRotation(int VehN); @@ -1588,7 +1595,7 @@ public: /*funkcje obliczajace sily*/ void ComputeConstans(void);//ABu: wczesniejsze wyznaczenie stalych dla liczenia sil - double ComputeMass(void); + void ComputeMass(void); void ComputeTotalForce(double dt); double Adhesive(double staticfriction) const; double TractionForce(double dt); @@ -1597,7 +1604,7 @@ public: double BrakeForceP(double press, double velocity); double BrakeForce(const TTrackParam &Track); double CouplerForce(int const End, double dt); - void CollisionDetect(int CouplerN, double dt); + void CollisionDetect(int const End, double const dt); /*obrot kol uwzgledniajacy poslizg*/ double ComputeRotatingWheel(double WForce, double dt, double n) const; @@ -1620,6 +1627,7 @@ public: bool CompressorSwitch( bool State, range_t const Notify = range_t::consist );/*! wl/wyl sprezarki*/ /*-funkcje typowe dla lokomotywy elektrycznej*/ + void MainsCheck( double const Deltatime ); void PowerCouplersCheck( double const Deltatime ); void ConverterCheck( double const Timestep ); // przetwornica void HeatingCheck( double const Timestep ); @@ -1744,3 +1752,11 @@ private: }; //double Distance(TLocation Loc1, TLocation Loc2, TDimension Dim1, TDimension Dim2); + +namespace simulation { + +using weights_table = std::unordered_map; + +extern weights_table Weights; + +} // simulation diff --git a/McZapkie/Mover.cpp b/McZapkie/Mover.cpp index a7e51e9c..a6d66e66 100644 --- a/McZapkie/Mover.cpp +++ b/McZapkie/Mover.cpp @@ -1001,68 +1001,145 @@ double TMoverParameters::PipeRatio(void) // Q: 20160716 // Wykrywanie kolizji // ************************************************************************************************* -void TMoverParameters::CollisionDetect(int CouplerN, double dt) +void TMoverParameters::CollisionDetect(int const End, double const dt) { - double CCF, Vprev, VprevC; - bool VirtualCoupling; + if( Neighbours[ End ].vehicle == nullptr ) { return; } // shouldn't normally happen but, eh - CCF = 0; - // with Couplers[CouplerN] do - auto &coupler = Couplers[ CouplerN ]; + auto &coupler { Couplers[ End ] }; + auto *othervehicle { Neighbours[ End ].vehicle->MoverParameters }; + auto const otherend { Neighbours[ End ].vehicle_end }; + auto &othercoupler { othervehicle->Couplers[ otherend ] }; - if (coupler.Connected != nullptr) - { - VirtualCoupling = (coupler.CouplingFlag == ctrain_virtual); - Vprev = V; - VprevC = coupler.Connected->V; - switch (CouplerN) - { - case 0: + auto velocity { V }; + auto othervehiclevelocity { othervehicle->V }; + // calculate collision force and new velocities for involved vehicles + auto const VirtualCoupling { ( coupler.CouplingFlag == coupling::faux ) }; + auto CCF { 0.0 }; + + switch( End ) { + case 0: { CCF = ComputeCollision( - V, - coupler.Connected->V, - TotalMass, - coupler.Connected->TotalMass, - (coupler.beta + coupler.Connected->Couplers[coupler.ConnectedNr].beta) / 2.0, - VirtualCoupling) - / (dt); + velocity, othervehiclevelocity, + TotalMass, othervehicle->TotalMass, + ( coupler.beta + othercoupler.beta ) / 2.0, + VirtualCoupling ) + / ( dt ); break; // yB: ej ej ej, a po - case 1: + } + case 1: { CCF = ComputeCollision( - coupler.Connected->V, - V, - coupler.Connected->TotalMass, - TotalMass, - (coupler.beta + coupler.Connected->Couplers[coupler.ConnectedNr].beta) / 2.0, - VirtualCoupling) - / (dt); - break; // czemu tu jest +0.01?? + othervehiclevelocity, velocity, + othervehicle->TotalMass, TotalMass, + ( coupler.beta + othercoupler.beta ) / 2.0, + VirtualCoupling ) + / ( dt ); + break; } - AccS = AccS + (V - Vprev) / dt; // korekta przyspieszenia o siły wynikające ze zderzeń? - coupler.Connected->AccS += (coupler.Connected->V - VprevC) / dt; - if ((coupler.Dist > 0) && (!VirtualCoupling)) - if (FuzzyLogic(abs(CCF), 5.0 * (coupler.FmaxC + 1.0), p_coupldmg)) - { //! zerwanie sprzegu - if (SetFlag(DamageFlag, dtrain_coupling)) - EventFlag = true; + default: { + break; + } + } - if ((coupler.CouplingFlag & ctrain_pneumatic) == ctrain_pneumatic) - AlarmChainFlag = true; // hamowanie nagle - zerwanie przewodow hamulcowych - coupler.CouplingFlag = 0; + if( ( coupler.Dist < 0 ) + && ( FuzzyLogic( std::abs( CCF ), 5.0 * ( coupler.FmaxC + 1.0 ), p_coupldmg ) ) ) { + // small chance to smash the coupler if it's hit with excessive force + damage_coupler( End ); + } - switch (CouplerN) // wyzerowanie flag podlaczenia ale ciagle sa wirtualnie polaczone - { - case 0: - coupler.Connected->Couplers[1].CouplingFlag = 0; - break; - case 1: - coupler.Connected->Couplers[0].CouplingFlag = 0; - break; - } - WriteLog( "Bad driving: " + Name + " broke a coupler" ); + auto const safevelocitylimit { 15.0 }; + auto const velocitydifference { + glm::length( + glm::angleAxis( Rot.Rz, glm::dvec3{ 0, 1, 0 } ) * V + - glm::angleAxis( othervehicle->Rot.Rz, glm::dvec3{ 0, 1, 0 } ) * othervehicle->V ) + * 3.6 }; // m/s -> km/h + + if( velocitydifference > safevelocitylimit ) { + // HACK: crude estimation for potential derail, will take place with velocity difference > 15 km/h adjusted for vehicle mass ratio + if( ( false == TestFlag( DamageFlag, dtrain_out ) ) + || ( false == TestFlag( othervehicle->DamageFlag, dtrain_out ) ) ) { + WriteLog( "Bad driving: " + Name + " and " + othervehicle->Name + " collided with velocity " + to_string( velocitydifference, 0 ) + " km/h" ); + } + + if( velocitydifference > safevelocitylimit * ( TotalMass / othervehicle->TotalMass ) ) { + derail( 5 ); + } + if( velocitydifference > safevelocitylimit * ( othervehicle->TotalMass / TotalMass ) ) { + othervehicle->derail( 5 ); + } + } + + // adjust velocity and acceleration of affected vehicles + if( false == TestFlag( DamageFlag, dtrain_out ) ) { + auto const accelerationchange{ ( velocity - V ) / dt }; + // if( accelerationchange / AccS < 1.0 ) { + // HACK: prevent excessive vehicle pinball cases + AccS += accelerationchange; + // AccS = clamp( AccS, -2.0, 2.0 ); + V = velocity; +// } + } + if( false == TestFlag( othervehicle->DamageFlag, dtrain_out ) ) { + auto const othervehicleaccelerationchange{ ( othervehiclevelocity - othervehicle->V ) / dt }; +// if( othervehicleaccelerationchange / othervehicle->AccS < 1.0 ) { + // HACK: prevent excessive vehicle pinball cases + othervehicle->AccS += othervehicleaccelerationchange; + othervehicle->V = othervehiclevelocity; +// } + } +} + +void +TMoverParameters::damage_coupler( int const End ) { + + auto &coupler{ Couplers[ End ] }; + + if( coupler.CouplerType == TCouplerType::Articulated ) { return; } // HACK: don't break articulated couplings no matter what + + if( SetFlag( DamageFlag, dtrain_coupling ) ) + EventFlag = true; + + if( ( coupler.CouplingFlag & coupling::brakehose ) == coupling::brakehose ) { + // hamowanie nagle - zerwanie przewodow hamulcowych + AlarmChainFlag = true; + } + + coupler.CouplingFlag = 0; + + if( coupler.Connected != nullptr ) { + switch( End ) { + // break connection with other vehicle, if there's any + case 0: { + coupler.Connected->Couplers[ end::rear ].CouplingFlag = coupling::faux; + break; } + case 1: { + coupler.Connected->Couplers[ end::front ].CouplingFlag = coupling::faux; + break; + } + default: { + break; + } + } + } + + WriteLog( "Bad driving: " + Name + " broke a coupler" ); +} + +void +TMoverParameters::derail( int const Reason ) { + + if( SetFlag( DamageFlag, dtrain_out ) ) { + + DerailReason = Reason; // TODO: enum derail causes + EventFlag = true; + MainSwitch( false, range_t::local ); + + AccS *= 0.65; + V *= 0.65; + + WriteLog( "Bad driving: " + Name + " derailed" ); } } @@ -1071,7 +1148,7 @@ void TMoverParameters::CollisionDetect(int CouplerN, double dt) // ************************************************************************************************* double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShape &Shape, TTrackParam &Track, TTractionParam &ElectricTraction, - const TLocation &NewLoc, TRotation &NewRot) + TLocation const &NewLoc, TRotation const &NewRot) { const double Vepsilon = 1e-5; const double Aepsilon = 1e-3; // ASBSpeed=0.8; @@ -1105,9 +1182,6 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap // TODO: investigate, seems supplied NewRot is always 0 although the code here suggests some actual values are expected Loc = NewLoc; Rot = NewRot; - NewRot.Rx = 0; - NewRot.Ry = 0; - NewRot.Rz = 0; if (dL == 0) // oblicz przesuniecie} { @@ -1236,17 +1310,14 @@ double TMoverParameters::ComputeMovement(double dt, double dt1, const TTrackShap // ************************************************************************************************* double TMoverParameters::FastComputeMovement(double dt, const TTrackShape &Shape, - TTrackParam &Track, const TLocation &NewLoc, - TRotation &NewRot) + TTrackParam &Track, TLocation const &NewLoc, + TRotation const &NewRot) { int b; // T_MoverParameters::FastComputeMovement(dt, Shape, Track, NewLoc, NewRot); Loc = NewLoc; Rot = NewRot; - NewRot.Rx = 0.0; - NewRot.Ry = 0.0; - NewRot.Rz = 0.0; if (dL == 0) // oblicz przesuniecie { @@ -1315,10 +1386,11 @@ void TMoverParameters::compute_movement_( double const Deltatime ) { RunInternalCommand(); // automatyczny rozruch - if (EngineType == TEngineType::ElectricSeriesMotor) - - if (AutoRelayCheck()) - SetFlag(SoundFlag, sound::relay); + if( EngineType == TEngineType::ElectricSeriesMotor ) { + if( AutoRelayCheck() ) { + SetFlag( SoundFlag, sound::relay ); + } + } if( ( EngineType == TEngineType::DieselEngine ) || ( EngineType == TEngineType::DieselElectric ) ) { @@ -1330,6 +1402,8 @@ void TMoverParameters::compute_movement_( double const Deltatime ) { // TODO: gather and move current calculations to dedicated method TotalCurrent = 0; + // main circuit + MainsCheck( Deltatime ); // traction motors MotorBlowersCheck( Deltatime ); // uklady hamulcowe: @@ -1371,6 +1445,37 @@ void TMoverParameters::compute_movement_( double const Deltatime ) { PowerCouplersCheck( Deltatime ); } +void TMoverParameters::MainsCheck( double const Deltatime ) { + + // TODO: move other main circuit checks here + + if( MainsInitTime == 0.0 ) { return; } + + if( MainsInitTimeCountdown > 0.0 ) { + MainsInitTimeCountdown -= Deltatime; + } + // TBD, TODO: move voltage calculation to separate method and use also in power coupler state calculation? + auto localvoltage { 0.0 }; + switch( EnginePowerSource.SourceType ) { + case TPowerSource::CurrentCollector: { + localvoltage = + std::max( + localvoltage, + std::max( + PantFrontVolt, + PantRearVolt ) ); + break; + } + default: { + break; + } + } + if( ( localvoltage == 0.0 ) + && ( GetTrainsetVoltage() == 0 ) ) { + MainsInitTimeCountdown = MainsInitTime; + } +} + void TMoverParameters::PowerCouplersCheck( double const Deltatime ) { // TODO: add support for other power sources auto localvoltage { 0.0 }; @@ -1382,7 +1487,13 @@ void TMoverParameters::PowerCouplersCheck( double const Deltatime ) { break; } case TPowerSource::Main: { - localvoltage = ( true == Mains ? Voltage : 0.0 ); + // HACK: main circuit can be fed through couplers, so we explicitly check pantograph supply here + localvoltage = ( + true == Mains ? + std::max( + PantFrontVolt, + PantRearVolt ) : + 0.0 ); break; } default: { @@ -1544,6 +1655,8 @@ void TMoverParameters::HeatingCheck( double const Timestep ) { auto const absrevolutions { std::abs( generator.revolutions ) }; generator.voltage = ( + false == HeatingAllow ? 0.0 : + // TODO: add support for desired voltage selector absrevolutions < generator.revolutions_min ? generator.voltage_min * absrevolutions / generator.revolutions_min : // absrevolutions > generator.revolutions_max ? generator.voltage_max * absrevolutions / generator.revolutions_max : interpolate( @@ -1680,7 +1793,7 @@ void TMoverParameters::OilPumpCheck( double const Timestep ) { OilPump.pressure = std::max( OilPump.pressure_target, - OilPump.pressure - 0.01 * Timestep ); + OilPump.pressure - ( enrot > 5.0 ? 0.05 : 0.035 ) * 0.5 * Timestep ); } OilPump.pressure = clamp( OilPump.pressure, 0.f, 1.5f ); } @@ -2115,14 +2228,14 @@ bool TMoverParameters::IncScndCtrl(int CtrlSpeed) SendCtrlToNext("SpeedCntrl", SpeedCtrlValue, CabNo); } - if ((OK) && (SpeedCtrl) && (ScndCtrlPos == 1) && (EngineType == TEngineType::DieselEngine)) + if ((OK) && (SpeedCtrl) && (ScndCtrlPos == 1) && (EngineType == TEngineType::DieselEngine)) { // NOTE: round() already adds 0.5, are the ones added here as well correct? SpeedCtrlValue = Round(Vel); SpeedCtrlUnit.IsActive = true; } - return OK; + return OK; } // ************************************************************************************************* @@ -2177,14 +2290,13 @@ bool TMoverParameters::DecScndCtrl(int CtrlSpeed) SpeedCtrlUnit.IsActive = false; } - if ((OK) && (SpeedCtrl) && (ScndCtrlPos == 0) && (EngineType == TEngineType::DieselEngine)) + if ((OK) && (SpeedCtrl) && (ScndCtrlPos == 0) && (EngineType == TEngineType::DieselEngine)) { - // NOTE: round() already adds 0.5, are the ones added here as well correct? SpeedCtrlValue = 0; SpeedCtrlUnit.IsActive = false; } - return OK; + return OK; } // ************************************************************************************************* @@ -2220,7 +2332,7 @@ bool TMoverParameters::CabDeactivisation(void) CabNo = 0; DirAbsolute = ActiveDir * CabNo; DepartureSignal = false; // nie buczeć z nieaktywnej kabiny - SecuritySystem.Status = 0; // deactivate alerter TODO: make it part of control based cab selection + SecuritySystem.Status = s_off; // deactivate alerter TODO: make it part of control based cab selection SendCtrlToNext("CabActivisation", 0, ActiveCab); // CabNo==0! } @@ -2439,8 +2551,9 @@ void TMoverParameters::SecuritySystemCheck(double dt) if ((!Radio)) RadiostopSwitch(false); - if ((SecuritySystem.SystemType > 0) && (SecuritySystem.Status > 0) && - (Battery)) // Ra: EZT ma teraz czuwak w rozrządczym + if ((SecuritySystem.SystemType > 0) + && (SecuritySystem.Status != s_off) + && (Battery)) // Ra: EZT ma teraz czuwak w rozrządczym { // CA if( ( SecuritySystem.AwareMinSpeed > 0.0 ? @@ -2468,30 +2581,29 @@ void TMoverParameters::SecuritySystemCheck(double dt) SecuritySystem.EmergencyBrakeDelay) && (SecuritySystem.EmergencyBrakeDelay >= 0)) SetFlag(SecuritySystem.Status, s_CAebrake); - - // SHP - if (TestFlag(SecuritySystem.SystemType, 2) && - TestFlag(SecuritySystem.Status, s_active)) // jeśli świeci albo miga - SecuritySystem.SystemSoundSHPTimer += dt; - if (TestFlag(SecuritySystem.SystemType, 2) && - TestFlag(SecuritySystem.Status, s_SHPalarm)) // jeśli buczy + } + // SHP + if( TestFlag( SecuritySystem.SystemType, 2 ) ) { + if( TestFlag( SecuritySystem.Status, s_SHPalarm ) ) { + // jeśli buczy SecuritySystem.SystemBrakeSHPTimer += dt; - if (TestFlag(SecuritySystem.SystemType, 2) && TestFlag(SecuritySystem.Status, s_active)) - if ((Vel > SecuritySystem.VelocityAllowed) && (SecuritySystem.VelocityAllowed >= 0)) - SetFlag(SecuritySystem.Status, s_SHPebrake); - else if (((SecuritySystem.SystemSoundSHPTimer > SecuritySystem.SoundSignalDelay) && - (SecuritySystem.SoundSignalDelay >= 0)) || - ((Vel > SecuritySystem.NextVelocityAllowed) && - (SecuritySystem.NextVelocityAllowed >= 0))) - if (!SetFlag(SecuritySystem.Status, - s_SHPalarm)) // juz wlaczony sygnal dzwiekowy} - if ((SecuritySystem.SystemBrakeSHPTimer > - SecuritySystem.EmergencyBrakeDelay) && - (SecuritySystem.EmergencyBrakeDelay >= 0)) - SetFlag(SecuritySystem.Status, s_SHPebrake); - - } // else SystemTimer:=0; + } + if( TestFlag( SecuritySystem.Status, s_active ) ) { + // jeśli świeci albo miga + SecuritySystem.SystemSoundSHPTimer += dt; + if( ( SecuritySystem.VelocityAllowed >= 0 ) && ( Vel > SecuritySystem.VelocityAllowed ) ) { + SetFlag( SecuritySystem.Status, s_SHPebrake ); + } + else if( ( ( SecuritySystem.SoundSignalDelay >= 0 ) && ( SecuritySystem.SystemSoundSHPTimer > SecuritySystem.SoundSignalDelay ) ) + || ( ( SecuritySystem.NextVelocityAllowed >= 0 ) && ( Vel > SecuritySystem.NextVelocityAllowed ) ) ) { + SetFlag( SecuritySystem.Status, s_SHPalarm ); + if( ( SecuritySystem.EmergencyBrakeDelay >= 0 ) && ( SecuritySystem.SystemBrakeSHPTimer > SecuritySystem.EmergencyBrakeDelay ) ) { + SetFlag( SecuritySystem.Status, s_SHPebrake ); + } + } + } + } // TEST CA if (TestFlag(SecuritySystem.Status, s_CAtest)) // jeśli świeci albo miga SecuritySystem.SystemBrakeCATestTimer += dt; @@ -2531,8 +2643,8 @@ bool TMoverParameters::BatterySwitch(bool State) SendCtrlToNext("BatterySwitch", 0, CabNo); BS = true; - if ((Battery) && (ActiveCab != 0)) /*|| (TrainType==dt_EZT)*/ - SecuritySystem.Status = (SecuritySystem.Status | s_waiting); // aktywacja czuwaka + if ((Battery) && (ActiveCab != 0)) + SecuritySystem.Status |= s_waiting; // aktywacja czuwaka else SecuritySystem.Status = 0; // wyłączenie czuwaka @@ -2999,6 +3111,7 @@ void TMoverParameters::MainSwitch_( bool const State ) { if( ( false == State ) || ( ( ( ScndCtrlPos == 0 ) || ( EngineType == TEngineType::ElectricInductionMotor ) ) && ( ( ConvOvldFlag == false ) || ( TrainType == dt_EZT ) ) + && ( MainsInitTimeCountdown <= 0.0 ) && ( true == NoVoltRelay ) && ( true == OvervoltageRelay ) && ( LastSwitchingTime > CtrlDelay ) @@ -4228,7 +4341,6 @@ void TMoverParameters::ComputeConstans(void) double BearingF, RollF, HideModifier; double Curvature; // Ra 2014-07: odwrotność promienia - TotalMass = ComputeMass(); TotalMassxg = TotalMass * g; // TotalMass*g BearingF = 2.0 * (DamageFlag && dtrain_bearing); @@ -4279,29 +4391,28 @@ void TMoverParameters::ComputeConstans(void) // Q: 20160713 // Oblicza masę ładunku // ************************************************************************************************* -double TMoverParameters::ComputeMass(void) +void TMoverParameters::ComputeMass() { - double M { 0.0 }; - // TODO: unit weight table, pulled from external data file - if( LoadAmount > 0 ) { - - if (ToLower(LoadQuantity) == "tonns") - M = LoadAmount * 1000; - else if (LoadType.name == "passengers") - M = LoadAmount * 80; - else if (LoadType.name == "luggage") - M = LoadAmount * 100; - else if (LoadType.name == "cars") - M = LoadAmount * 1200; // 800 kilo to miał maluch - else if (LoadType.name == "containers") - M = LoadAmount * 8000; - else if (LoadType.name == "transformers") - M = LoadAmount * 50000; - else - M = LoadAmount * 1000; - } // Ra: na razie tak, ale nie wszędzie masy wirujące się wliczają - return Mass + M + Mred; + TotalMass = Mass + Mred; + + if( LoadAmount == 0 ) { return; } + + // include weight of carried load + auto loadtypeunitweight { 0.f }; + + if( ToLower( LoadQuantity ) == "tonns" ) { + loadtypeunitweight = 1000; + } + else { + auto const lookup { simulation::Weights.find( LoadType.name ) }; + loadtypeunitweight = ( + lookup != simulation::Weights.end() ? + lookup->second : + 1000.f ); // legacy default unit weight value + } + + TotalMass += LoadAmount * loadtypeunitweight; } // ************************************************************************************************* @@ -4343,6 +4454,11 @@ void TMoverParameters::ComputeTotalForce(double dt) { // juz zoptymalizowane: FStand = FrictionForce(RunningShape.R, RunningTrack.DamageFlag); // siła oporów ruchu + if( true == TestFlag( DamageFlag, dtrain_out ) ) { + // HACK: crude way to reduce speed after derailment + // TBD, TODO: more accurate approach? + FStand *= 1e20; + } double old_nrot = abs(nrot); nrot = v2n(); // przeliczenie prędkości liniowej na obrotową @@ -4635,15 +4751,13 @@ double TMoverParameters::CouplerForce( int const End, double dt ) { auto &othercoupler { othervehicle->Couplers[ otherend ] }; auto const othervehiclemove { ( othervehicle->dMoveLen * DirPatch( End, otherend ) ) }; + auto const initialdistance { Neighbours[ End ].distance }; // odległość od sprzęgu sąsiada auto const distancedelta { ( End == end::front ? othervehiclemove - dMoveLen : dMoveLen - othervehiclemove ) }; - auto const initialdistance { Neighbours[ End ].distance }; // odległość od sprzęgu sąsiada - auto const newdistance = - initialdistance - + 10.0 * distancedelta; + auto const newdistance { initialdistance + 10.0 * distancedelta }; auto const dV { V - ( othervehicle->V * DirPatch( End, otherend ) ) }; auto const absdV { std::abs( dV ) }; @@ -4673,11 +4787,15 @@ double TMoverParameters::CouplerForce( int const End, double dt ) { } coupler.CheckCollision = false; + coupler.Dist = 0.0; + double CF { 0.0 }; if( ( coupler.CouplingFlag != coupling::faux ) || ( initialdistance < 0 ) ) { + coupler.Dist = clamp( newdistance, -coupler.DmaxB, coupler.DmaxC ); + double BetaAvg = 0; double Fmax = 0; @@ -4692,8 +4810,8 @@ double TMoverParameters::CouplerForce( int const End, double dt ) { Fmax = 0.5 * ( coupler.FmaxC + coupler.FmaxB + othercoupler.FmaxC + othercoupler.FmaxB ) * CouplerTune; } auto const distDelta { std::abs( newdistance ) - std::abs( coupler.Dist ) }; // McZapkie-191103: poprawka na histereze - coupler.Dist = newdistance; - if (coupler.Dist > 0) { + + if (newdistance > 0) { if( distDelta > 0 ) { CF = ( -( coupler.SpringKC + othercoupler.SpringKC ) * coupler.Dist / 2.0 ) * DirF( End ) @@ -4704,12 +4822,25 @@ double TMoverParameters::CouplerForce( int const End, double dt ) { - Fmax * dV * BetaAvg; } // liczenie sily ze sprezystosci sprzegu - if( coupler.Dist > ( coupler.DmaxC + othercoupler.DmaxC ) ) { + if( newdistance > ( coupler.DmaxC + othercoupler.DmaxC ) ) { // zderzenie coupler.CheckCollision = true; } + if( std::abs( CF ) > coupler.FmaxC ) { + // coupler is stretched with excessive force, may break + coupler.stretch_duration += dt; + // give coupler 1 sec of leeway to account for simulation glitches, before checking whether it breaks + // (arbitrary) chance to break grows from 10-100% over 10 sec period + if( ( coupler.stretch_duration > 1.f ) + && ( Random() < ( coupler.stretch_duration * 0.1f * dt ) ) ) { + damage_coupler( End ); + } + } + else { + coupler.stretch_duration = 0.f; + } } - if( coupler.Dist < 0 ) { + if( newdistance < 0 ) { if( distDelta > 0 ) { CF = ( -( coupler.SpringKB + othercoupler.SpringKB ) * coupler.Dist / 2.0 ) * DirF( End ) @@ -4720,7 +4851,7 @@ double TMoverParameters::CouplerForce( int const End, double dt ) { - Fmax * dV * BetaAvg; } // liczenie sily ze sprezystosci zderzaka - if( -coupler.Dist > ( coupler.DmaxB + othercoupler.DmaxB ) ) { + if( -newdistance > ( coupler.DmaxB + othercoupler.DmaxB ) ) { // zderzenie coupler.CheckCollision = true; if( ( coupler.CouplerType == TCouplerType::Automatic ) @@ -4774,9 +4905,12 @@ double TMoverParameters::TractionForce( double dt ) { EngineHeatingRPM ) / 60.0 ); } + // NOTE: fake dizel_fill calculation for the sake of smoke emitter which uses this parameter to determine smoke opacity + dizel_fill = clamp( 0.2 + 0.35 * ( tmp - enrot ), 0.0, 1.0 ); } else { tmp = 0.0; + dizel_fill = 0.0; } if( enrot != tmp ) { @@ -5523,12 +5657,12 @@ double TMoverParameters::TractionForce( double dt ) { eimv[eimv_Fzad] = PosRatio; if ((Flat) && (eimc[eimc_p_F0] * eimv[eimv_Fful] > 0)) PosRatio = Min0R(PosRatio * eimc[eimc_p_F0] / eimv[eimv_Fful], 1); -/* if (SpeedCtrlValue > 0) //speed control +/* if (ScndCtrlActualPos > 0) //speed control if (Vmax < 250) - PosRatio = Min0R(PosRatio, Max0R(-1, 0.5 * (SpeedCtrlValue - Vel))); + PosRatio = Min0R(PosRatio, Max0R(-1, 0.5 * (ScndCtrlActualPos - Vel))); else PosRatio = - Min0R(PosRatio, Max0R(-1, 0.5 * (SpeedCtrlValue * 2 - Vel))); */ + Min0R(PosRatio, Max0R(-1, 0.5 * (ScndCtrlActualPos * 2 - Vel))); */ // PosRatio = 1.0 * (PosRatio * 0 + 1) * PosRatio; // 1 * 1 * PosRatio = PosRatio Hamulec->SetED(0); // (Hamulec as TLSt).SetLBP(LocBrakePress); @@ -5616,25 +5750,19 @@ double TMoverParameters::TractionForce( double dt ) { eimv[eimv_ks] = eimv[eimv_Fr] / eimv[eimv_FMAXMAX]; eimv[eimv_df] = eimv[eimv_ks] * eimc[eimc_s_dfmax]; - eimv[eimv_fp] = DirAbsolute * enrot * eimc[eimc_s_p] + - eimv[eimv_df]; // do przemyslenia dzialanie pp z tmpV + eimv[eimv_fp] = DirAbsolute * enrot * eimc[eimc_s_p] + eimv[eimv_df]; // do przemyslenia dzialanie pp z tmpV // eimv[eimv_U]:=Max0R(eimv[eimv_Uzsmax],Min0R(eimc[eimc_f_cfu]*eimv[eimv_fp],eimv[eimv_Uzsmax])); // eimv[eimv_pole]:=eimv[eimv_U]/(eimv[eimv_fp]*eimc[eimc_s_cfu]); if ((abs(eimv[eimv_fp]) <= eimv[eimv_fkr])) eimv[eimv_pole] = eimc[eimc_f_cfu] / eimc[eimc_s_cfu]; else - eimv[eimv_pole] = - eimv[eimv_Uzsmax] / eimc[eimc_s_cfu] / abs(eimv[eimv_fp]); + eimv[eimv_pole] = eimv[eimv_Uzsmax] / eimc[eimc_s_cfu] / abs(eimv[eimv_fp]); eimv[eimv_U] = eimv[eimv_pole] * eimv[eimv_fp] * eimc[eimc_s_cfu]; - eimv[eimv_Ic] = (eimv[eimv_fp] - DirAbsolute * enrot * eimc[eimc_s_p]) * - eimc[eimc_s_dfic] * eimv[eimv_pole]; + eimv[eimv_Ic] = (eimv[eimv_fp] - DirAbsolute * enrot * eimc[eimc_s_p]) * eimc[eimc_s_dfic] * eimv[eimv_pole]; eimv[eimv_If] = eimv[eimv_Ic] * eimc[eimc_s_icif]; eimv[eimv_M] = eimv[eimv_pole] * eimv[eimv_Ic] * eimc[eimc_s_cim]; - eimv[eimv_Ipoj] = (eimv[eimv_Ic] * NPoweredAxles * eimv[eimv_U]) / - (Voltage - eimc[eimc_f_DU]) + - eimc[eimc_f_I0]; - eimv[eimv_Pm] = - ActiveDir * eimv[eimv_M] * NPoweredAxles * enrot * Pirazy2 / 1000; + eimv[eimv_Ipoj] = (eimv[eimv_Ic] * NPoweredAxles * eimv[eimv_U]) / (Voltage - eimc[eimc_f_DU]) + eimc[eimc_f_I0]; + eimv[eimv_Pm] = ActiveDir * eimv[eimv_M] * NPoweredAxles * enrot * Pirazy2 / 1000; eimv[eimv_Pe] = eimv[eimv_Ipoj] * Voltage / 1000; eimv[eimv_eta] = eimv[eimv_Pm] / eimv[eimv_Pe]; @@ -5655,7 +5783,7 @@ double TMoverParameters::TractionForce( double dt ) { if( ( RlistSize > 0 ) && ( ( std::abs( eimv[ eimv_If ] ) > 1.0 ) - || ( tmpV > 0.1 ) ) ) { + && ( tmpV > 0.1 ) ) ) { int i = 0; while( ( i < RlistSize - 1 ) @@ -7386,6 +7514,7 @@ TMoverParameters::AssignLoad( std::string const &Name, float const Amount ) { if( Name == loadattributes.name ) { LoadType = loadattributes; LoadAmount = clamp( Amount, 0.f, MaxLoad ) ; + ComputeMass(); return true; } } @@ -7405,7 +7534,7 @@ bool TMoverParameters::LoadingDone(double const LSpeed, std::string const &Loadn return true; } - if( Loadname.empty() ) { return ( LoadStatus >= 4 ); } + if( Loadname.empty() ) { return ( LoadStatus >= 4 ); } if( Loadname != LoadType.name ) { return ( LoadStatus >= 4 ); } // test zakończenia załadunku/rozładunku @@ -7428,6 +7557,7 @@ bool TMoverParameters::LoadingDone(double const LSpeed, std::string const &Loadn if( LoadAmount == 0.f ) { AssignLoad(""); // jak nic nie ma, to nie ma też nazwy } + ComputeMass(); } } else if( LSpeed > 0 ) { @@ -7442,6 +7572,7 @@ bool TMoverParameters::LoadingDone(double const LSpeed, std::string const &Loadn LoadStatus = 4; // skończony załadunek LoadAmount = std::min( MaxLoad * ( 1.0 + OverLoadFactor ), LoadAmount ); } + ComputeMass(); } } @@ -8614,7 +8745,7 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) continue; } - if (issection("SpeedControl:", inputline)) + if (issection("SpeedControl:", inputline)) { startBPT = false; fizlines.emplace("SpeedControl", inputline); @@ -8622,7 +8753,7 @@ bool TMoverParameters::LoadFIZ(std::string chkpath) continue; } - if( issection( "Engine:", inputline ) ) + if( issection( "Engine:", inputline ) ) { startBPT = false; fizlines.emplace( "Engine", inputline ); @@ -9373,6 +9504,8 @@ void TMoverParameters::LoadFIZ_Cntrl( std::string const &line ) { extract_value( StopBrakeDecc, "SBD", line, "" ); + // main circuit + extract_value( MainsInitTime, "MainInitTime", line, "" ); // converter { std::map starts { @@ -10767,10 +10900,13 @@ bool TMoverParameters::RunCommand( std::string Command, double CValue1, double C Battery = true; else if ((CValue1 == 0)) Battery = false; - if ((Battery) && (ActiveCab != 0) /*or (TrainType=dt_EZT)*/) - SecuritySystem.Status = SecuritySystem.Status || s_waiting; // aktywacja czuwaka + /* + // TBD: makes no sense to activate alerters in entire consist + if ((Battery) && (ActiveCab != 0) ) + SecuritySystem.Status = SecuritySystem.Status | s_waiting; // aktywacja czuwaka else SecuritySystem.Status = 0; // wyłączenie czuwaka + */ OK = SendCtrlToNext( Command, CValue1, CValue2, Couplertype ); } // else if command='EpFuseSwitch' then {NBMX} @@ -11138,3 +11274,9 @@ double TMoverParameters::ShowCurrentP(int AmpN) const return current; } } + +namespace simulation { + +weights_table Weights; + +} // simulation \ No newline at end of file diff --git a/MdlMngr.cpp b/MdlMngr.cpp index f71b2921..52b47acb 100644 --- a/MdlMngr.cpp +++ b/MdlMngr.cpp @@ -37,7 +37,7 @@ TMdlContainer::LoadModel(std::string const &Name, bool const Dynamic) { } }; -TModelsManager::modelcontainer_sequence TModelsManager::m_models { 1, {} }; +TModelsManager::modelcontainer_sequence TModelsManager::m_models { 1, TMdlContainer() }; TModelsManager::stringmodelcontainerindex_map TModelsManager::m_modelsmap; // wczytanie modelu do tablicy diff --git a/Model3d.cpp b/Model3d.cpp index 52a24399..85dd480f 100644 --- a/Model3d.cpp +++ b/Model3d.cpp @@ -371,14 +371,14 @@ int TSubModel::Load( cParser &parser, TModel3d *Model, /*int Pos,*/ bool dynamic material.insert( 0, Global.asCurrentTexturePath ); } */ - m_material = GfxRenderer.Fetch_Material( material ); + m_material = GfxRenderer->Fetch_Material( material ); // renderowanie w cyklu przezroczystych tylko jeśli: // 1. Opacity=0 (przejściowo <1, czy tam <100) oraz // 2. tekstura ma przezroczystość iFlags |= ( ( ( Opacity < 1.0 ) && ( ( m_material != null_handle ) - && ( GfxRenderer.Material( m_material ).has_alpha ) ) ) ? + && ( GfxRenderer->Material( m_material ).has_alpha ) ) ) ? 0x20 : 0x10 ); // 0x10-nieprzezroczysta, 0x20-przezroczysta }; @@ -646,7 +646,7 @@ int TSubModel::TriangleAdd(TModel3d *m, material_handle tex, int tri) s = new TSubModel(); m->AddTo(this, s); } - s->Name_Material(GfxRenderer.Material(tex).name); + s->Name_Material(GfxRenderer->Material(tex).name); s->m_material = tex; s->eType = GL_TRIANGLES; } @@ -703,7 +703,8 @@ void TSubModel::InitialRotate(bool doit) } else if (Global.iConvertModels & 2) { // optymalizacja jest opcjonalna - if ((iFlags & 0xC000) == 0x8000) // o ile nie ma animacji + if ( ((iFlags & 0xC000) == 0x8000) // o ile nie ma animacji + && ( false == is_emitter() ) ) // don't optimize smoke emitter attachment points { // jak nie ma potomnych, można wymnożyć przez transform i wyjedynkować go float4x4 *mat = GetMatrix(); // transform submodelu if( false == Vertices.empty() ) { @@ -810,6 +811,26 @@ TSubModel::find_replacable4() { return std::make_tuple( nullptr, false ); } +// locates particle emitter submodels and adds them to provided list +void +TSubModel::find_smoke_sources( nameoffset_sequence &Sourcelist ) const { + + auto const name { ToLower( pName ) }; + + if( ( eType == TP_ROTATOR ) + && ( pName.find( "smokesource_" ) == 0 ) ) { + Sourcelist.emplace_back( pName, offset() ); + } + + if( Next != nullptr ) { + Next->find_smoke_sources( Sourcelist ); + } + + if( Child != nullptr ) { + Child->find_smoke_sources( Sourcelist ); + } +} + int TSubModel::FlagsCheck() { // analiza koniecznych zmian pomiędzy submodelami // samo pomijanie glBindTexture() nie poprawi wydajności @@ -1047,7 +1068,7 @@ void TSubModel::RaAnimation(TAnimType a) } }; - //--------------------------------------------------------------------------- +//--------------------------------------------------------------------------- void TSubModel::serialize_geometry( std::ostream &Output ) const { @@ -1055,7 +1076,7 @@ void TSubModel::serialize_geometry( std::ostream &Output ) const { Child->serialize_geometry( Output ); } if( m_geometry != null_handle ) { - for( auto const &vertex : GfxRenderer.Vertices( m_geometry ) ) { + for( auto const &vertex : GfxRenderer->Vertices( m_geometry ) ) { vertex.serialize( Output ); } } @@ -1081,7 +1102,7 @@ TSubModel::create_geometry( std::size_t &Dataoffset, gfx::geometrybank_handle co eType < TP_ROTATOR ? eType : GL_POINTS ); - m_geometry = GfxRenderer.Insert( Vertices, Bank, type ); + m_geometry = GfxRenderer->Insert( Vertices, Bank, type ); } if( m_geometry != NULL ) { @@ -1091,7 +1112,7 @@ TSubModel::create_geometry( std::size_t &Dataoffset, gfx::geometrybank_handle co // since we're comparing squared radii, we need to square it back for correct results m_boundingradius *= m_boundingradius; auto const submodeloffset { offset( std::numeric_limits::max() ) }; - for( auto const &vertex : GfxRenderer.Vertices( m_geometry ) ) { + for( auto const &vertex : GfxRenderer->Vertices( m_geometry ) ) { squaredradius = glm::length2( submodeloffset + vertex.position ); if( squaredradius > m_boundingradius ) { m_boundingradius = squaredradius; @@ -1132,6 +1153,14 @@ void TSubModel::ColorsSet( glm::vec3 const &Ambient, glm::vec3 const &Diffuse, g */ }; +bool +TSubModel::is_emitter() const { + + return ( + ( eType == TP_ROTATOR ) + && ( ToLower( pName ).find( "smokesource_" ) == 0 ) ); +} + // pobranie transformacji względem wstawienia modelu void TSubModel::ParentMatrix( float4x4 *m ) const { @@ -1185,7 +1214,7 @@ float TSubModel::MaxY( float4x4 const &m ) { // binary and text models invoke this function at different stages, either after or before geometry data was sent to the geometry manager if( m_geometry != null_handle ) { - for( auto const &vertex : GfxRenderer.Vertices( m_geometry ) ) { + for( auto const &vertex : GfxRenderer->Vertices( m_geometry ) ) { maxy = std::max( maxy, m[ 0 ][ 1 ] * vertex.position.x @@ -1230,8 +1259,9 @@ TModel3d::~TModel3d() { } }; -TSubModel *TModel3d::AddToNamed(const char *Name, TSubModel *SubModel) -{ +TSubModel * +TModel3d::AddToNamed(const char *Name, TSubModel *SubModel) { + TSubModel *sm = Name ? GetFromName(Name) : nullptr; if( ( sm == nullptr ) && ( Name != nullptr ) && ( std::strcmp( Name, "none" ) != 0 ) ) { @@ -1243,6 +1273,7 @@ TSubModel *TModel3d::AddToNamed(const char *Name, TSubModel *SubModel) // jedyny poprawny sposób dodawania submodeli, inaczej mogą zginąć przy zapisie E3D void TModel3d::AddTo(TSubModel *tmp, TSubModel *SubModel) { + if (tmp) { // jeśli znaleziony, podłączamy mu jako potomny tmp->ChildAdd(SubModel); @@ -1269,6 +1300,18 @@ TSubModel *TModel3d::GetFromName(std::string const &Name) const } }; +// locates particle source submodels and stores them on internal list +nameoffset_sequence const & +TModel3d::find_smoke_sources() { + + m_smokesources.clear(); + if( Root != nullptr ) { + Root->find_smoke_sources( m_smokesources ); + } + + return smoke_sources(); +} + // returns offset vector from root glm::vec3 TSubModel::offset( float const Geometrytestoffsetthreshold ) const { @@ -1284,7 +1327,7 @@ TSubModel::offset( float const Geometrytestoffsetthreshold ) const { // TODO: do proper bounding area calculation for submodel when loading mesh and grab the centre point from it here auto const &vertices { ( m_geometry != null_handle ? - GfxRenderer.Vertices( m_geometry ) : + GfxRenderer->Vertices( m_geometry ) : Vertices ) }; if( false == vertices.empty() ) { // transformation matrix for the submodel can still contain rotation and/or scaling, @@ -1553,7 +1596,7 @@ void TModel3d::deserialize(std::istream &s, size_t size, bool dynamic) { Root = nullptr; if( m_geometrybank == null_handle ) { - m_geometrybank = GfxRenderer.Create_Bank(); + m_geometrybank = GfxRenderer->Create_Bank(); } std::streampos end = s.tellg() + (std::streampos)size; @@ -1638,7 +1681,7 @@ void TModel3d::deserialize(std::istream &s, size_t size, bool dynamic) break; } } - submodel.m_geometry = GfxRenderer.Insert( vertices, m_geometrybank, type ); + submodel.m_geometry = GfxRenderer->Insert( vertices, m_geometrybank, type ); } } @@ -1739,12 +1782,12 @@ void TSubModel::BinInit(TSubModel *s, float4x4 *m, std::vector *t, m_materialname = Global.asCurrentTexturePath + m_materialname; } */ - m_material = GfxRenderer.Fetch_Material( m_materialname ); + m_material = GfxRenderer->Fetch_Material( m_materialname ); if( ( iFlags & 0x30 ) == 0 ) { // texture-alpha based fallback if for some reason we don't have opacity flag set yet iFlags |= ( ( ( m_material != null_handle ) - && ( GfxRenderer.Material( m_material ).has_alpha ) ) ? + && ( GfxRenderer->Material( m_material ).has_alpha ) ) ? 0x20 : 0x10 ); // 0x10-nieprzezroczysta, 0x20-przezroczysta } @@ -1877,7 +1920,7 @@ void TModel3d::Init() iFlags |= Root->FlagsCheck() | 0x8000; // flagi całego modelu if (iNumVerts) { if( m_geometrybank == null_handle ) { - m_geometrybank = GfxRenderer.Create_Bank(); + m_geometrybank = GfxRenderer->Create_Bank(); } std::size_t dataoffset = 0; Root->create_geometry( dataoffset, m_geometrybank ); @@ -1888,6 +1931,8 @@ void TModel3d::Init() asBinary = ""; // zablokowanie powtórnego zapisu } } + // check if the model contains particle emitters + find_smoke_sources(); }; //----------------------------------------------------------------------------- diff --git a/Model3d.h b/Model3d.h index 412c1f2b..ca479e19 100644 --- a/Model3d.h +++ b/Model3d.h @@ -51,6 +51,8 @@ namespace scene { class shape_node; } +using nameoffset_sequence = std::vector>; + class TSubModel { // klasa submodelu - pojedyncza siatka, punkt świetlny albo grupa punktów //m7todo: zrobić normalną serializację @@ -149,6 +151,8 @@ public: // chwilowo private: int SeekFaceNormal( std::vector const &Masks, int const Startface, unsigned int const Mask, glm::vec3 const &Position, gfx::vertex_array const &Vertices ); void RaAnimation(TAnimType a); + // returns true if the submodel is a smoke emitter attachment point, false otherwise + bool is_emitter() const; public: static size_t iInstance; // identyfikator egzemplarza, który aktualnie renderuje model @@ -168,6 +172,8 @@ public: int count_children(); // locates submodel mapped with replacable -4 std::tuple find_replacable4(); + // locates particle emitter submodels and adds them to provided list + void find_smoke_sources( nameoffset_sequence &Sourcelist ) const; int TriangleAdd(TModel3d *m, material_handle tex, int tri); void SetRotate(float3 vNewRotateAxis, float fNewAngle); void SetRotateXYZ( Math3D::vector3 vNewAngles); @@ -240,6 +246,7 @@ private: int iSubModelsCount; // Ra: używane do tworzenia binarnych std::string asBinary; // nazwa pod którą zapisać model binarny std::string m_filename; + nameoffset_sequence m_smokesources; // list of particle sources defined in the model public: TModel3d(); @@ -252,6 +259,7 @@ public: inline TSubModel * GetSMRoot() { return (Root); }; TSubModel * GetFromName(std::string const &Name) const; TSubModel * AddToNamed(const char *Name, TSubModel *SubModel); + nameoffset_sequence const & find_smoke_sources(); void AddTo(TSubModel *tmp, TSubModel *SubModel); void LoadFromTextFile(std::string const &FileName, bool dynamic); void LoadFromBinFile(std::string const &FileName, bool dynamic); @@ -260,6 +268,8 @@ public: int Flags() const { return iFlags; }; void Init(); std::string NameGet() const { return m_filename; }; + nameoffset_sequence const & smoke_sources() const { + return m_smokesources; } int TerrainCount() const; TSubModel * TerrainSquare(int n); void deserialize(std::istream &s, size_t size, bool dynamic); diff --git a/Names.h b/Names.h index 9c6652ab..4f0f1089 100644 --- a/Names.h +++ b/Names.h @@ -35,7 +35,7 @@ public: if( true == mapping.second ) { return true; } - // cell with this name already exists; update mapping to point to the new one, for backward compatibility + // item with this name already exists; update mapping to point to the new one, for backward compatibility mapping.first->second = itemhandle; return false; } // locates item with specified name. returns pointer to the item, or nullptr diff --git a/PyInt.cpp b/PyInt.cpp index e36fd903..ea7720af 100644 --- a/PyInt.cpp +++ b/PyInt.cpp @@ -111,7 +111,7 @@ auto python_taskqueue::init() -> bool { // release the lock, save the state for future use m_mainthread = PyEval_SaveThread(); - WriteLog( "Python Interpreter setup complete" ); + WriteLog( "Python Interpreter: setup complete" ); // init workers for( auto &worker : m_workers ) { @@ -192,8 +192,7 @@ auto python_taskqueue::run_file( std::string const &File, std::string const &Pat if( lookup.first.empty() ) { return false; } std::ifstream inputfile { lookup.first + lookup.second }; - std::string input; - input.assign( std::istreambuf_iterator( inputfile ), std::istreambuf_iterator() ); + std::string const input { std::istreambuf_iterator( inputfile ), std::istreambuf_iterator() }; if( PyRun_SimpleString( input.c_str() ) != 0 ) { error(); @@ -215,7 +214,7 @@ void python_taskqueue::release_lock() { PyEval_SaveThread(); } -auto python_taskqueue::fetch_renderer( std::string const Renderer ) ->PyObject * { +auto python_taskqueue::fetch_renderer( std::string const Renderer ) -> PyObject * { auto const lookup { m_renderers.find( Renderer ) }; if( lookup != std::end( m_renderers ) ) { @@ -296,7 +295,9 @@ void python_taskqueue::run( GLFWwindow *Context, rendertask_sequence &Tasks, thr { // execute python code task->run(); - error(); + if( PyErr_Occurred() != nullptr ) { + error(); + } } // clear the thread state PyEval_SaveThread(); @@ -318,8 +319,7 @@ void python_taskqueue::run( GLFWwindow *Context, rendertask_sequence &Tasks, thr void python_taskqueue::error() { - if( PyErr_Occurred() == nullptr ) { return; } - + ErrorLog( "Python Interpreter: encountered error" ); if( m_stderr != nullptr ) { // std err pythona jest buforowane PyErr_Print(); diff --git a/Segment.cpp b/Segment.cpp index a3f63708..8521b30f 100644 --- a/Segment.cpp +++ b/Segment.cpp @@ -527,7 +527,7 @@ bool TSegment::RenderLoft( gfx::vertex_array &Output, Math3D::vector3 const &Ori void TSegment::Render() { Math3D::vector3 pt; - GfxRenderer.Bind_Material( null_handle ); + GfxRenderer->Bind_Material( null_handle ); if (bCurve) { diff --git a/Track.cpp b/Track.cpp index f4326127..bf0fdfd9 100644 --- a/Track.cpp +++ b/Track.cpp @@ -462,7 +462,7 @@ void TTrack::Load(cParser *parser, glm::dvec3 const &pOrigin) m_material1 = ( str == "none" ? null_handle : - GfxRenderer.Fetch_Material( str ) ); + GfxRenderer->Fetch_Material( str ) ); parser->getTokens(); *parser >> fTexLength; // tex tile length if (fTexLength < 0.01) @@ -472,7 +472,7 @@ void TTrack::Load(cParser *parser, glm::dvec3 const &pOrigin) m_material2 = ( str == "none" ? null_handle : - GfxRenderer.Fetch_Material( str ) ); + GfxRenderer->Fetch_Material( str ) ); parser->getTokens(3); *parser >> fTexHeight1 @@ -584,17 +584,14 @@ void TTrack::Load(cParser *parser, glm::dvec3 const &pOrigin) else if (iCategoryFlag & 2) if (m_material1 && fTexLength) { // dla drogi trzeba ustalić proporcje boków nawierzchni - float w, h; - GfxRenderer.Bind_Material(m_material1); - glGetTexLevelParameterfv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &w); - glGetTexLevelParameterfv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &h); - if (h != 0.0) - fTexRatio1 = w / h; // proporcja boków - GfxRenderer.Bind_Material(m_material2); - glGetTexLevelParameterfv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &w); - glGetTexLevelParameterfv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &h); - if (h != 0.0) - fTexRatio2 = w / h; // proporcja boków + auto const &texture1 { GfxRenderer->Texture( GfxRenderer->Material( m_material1 ).texture1 ) }; + if( texture1.height() > 0 ) { + fTexRatio1 = static_cast( texture1.width() ) / static_cast( texture1.height() ); // proporcja boków + } + auto const &texture2 { GfxRenderer->Texture( GfxRenderer->Material( m_material2 ).texture1 ) }; + if( texture2.height() > 0 ) { + fTexRatio2 = static_cast( texture2.width() ) / static_cast( texture2.height() ); // proporcja boków + } } break; } @@ -883,7 +880,7 @@ void TTrack::Load(cParser *parser, glm::dvec3 const &pOrigin) // switch trackbed texture auto const trackbedtexture { parser->getToken() }; if( eType == tt_Switch ) { - SwitchExtension->m_material3 = GfxRenderer.Fetch_Material( trackbedtexture ); + SwitchExtension->m_material3 = GfxRenderer->Fetch_Material( trackbedtexture ); } } else if( str == "railprofile" ) { @@ -1138,11 +1135,11 @@ void TTrack::create_geometry( gfx::geometrybank_handle const &Bank ) { gfx::vertex_array vertices; Segment->RenderLoft(vertices, m_origin, bpts1, iTrapezoid > 0, texturelength); if( ( Bank != 0 ) && ( true == Geometry2.empty() ) ) { - Geometry2.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry2.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); } if( ( Bank == 0 ) && ( false == Geometry2.empty() ) ) { // special variant, replace existing data for a turntable track - GfxRenderer.Replace( vertices, Geometry2[ 0 ] ); + GfxRenderer->Replace( vertices, Geometry2[ 0 ] ); } } if (m_material1) @@ -1152,18 +1149,18 @@ void TTrack::create_geometry( gfx::geometrybank_handle const &Bank ) { gfx::vertex_array vertices; if( ( Bank != 0 ) && ( true == Geometry1.empty() ) ) { Segment->RenderLoft( vertices, m_origin, rpts1, iTrapezoid > 0, texturelength ); - Geometry1.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry1.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); vertices.clear(); // reuse the scratchpad Segment->RenderLoft( vertices, m_origin, rpts2, iTrapezoid > 0, texturelength ); - Geometry1.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry1.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); } if( ( Bank == 0 ) && ( false == Geometry1.empty() ) ) { // special variant, replace existing data for a turntable track Segment->RenderLoft( vertices, m_origin, rpts1, iTrapezoid > 0, texturelength ); - GfxRenderer.Replace( vertices, Geometry1[ 0 ] ); + GfxRenderer->Replace( vertices, Geometry1[ 0 ] ); vertices.clear(); // reuse the scratchpad Segment->RenderLoft( vertices, m_origin, rpts2, iTrapezoid > 0, texturelength ); - GfxRenderer.Replace( vertices, Geometry1[ 1 ] ); + GfxRenderer->Replace( vertices, Geometry1[ 1 ] ); } } break; @@ -1188,21 +1185,21 @@ void TTrack::create_geometry( gfx::geometrybank_handle const &Bank ) { // composed from two parts: transition from blade to regular rail, and regular rail SwitchExtension->Segments[ 0 ]->RenderLoft( vertices, m_origin, rpts3, true, texturelength, 1.0, 0, bladelength / 2, { SwitchExtension->fOffset2, SwitchExtension->fOffset2 / 2 } ); SwitchExtension->Segments[ 0 ]->RenderLoft( vertices, m_origin, rpts1, false, texturelength, 1.0, bladelength / 2, bladelength, { SwitchExtension->fOffset2 / 2, 0.f } ); - Geometry1.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry1.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); vertices.clear(); // fixed parts SwitchExtension->Segments[ 0 ]->RenderLoft( vertices, m_origin, rpts1, false, texturelength, 1.0, bladelength ); - Geometry1.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry1.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); vertices.clear(); if( jointlength > 0 ) { // part of the diverging rail touched by wheels of vehicle going straight SwitchExtension->Segments[ 1 ]->RenderLoft( vertices, m_origin, rpts1, false, texturelength, 1.0, 0, jointlength ); - Geometry1.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry1.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); vertices.clear(); } // other rail, full length SwitchExtension->Segments[ 0 ]->RenderLoft( vertices, m_origin, rpts2, false, texturelength ); - Geometry1.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry1.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); vertices.clear(); } if( m_material2 ) { @@ -1211,15 +1208,15 @@ void TTrack::create_geometry( gfx::geometrybank_handle const &Bank ) { // composed from two parts: transition from blade to regular rail, and regular rail SwitchExtension->Segments[ 1 ]->RenderLoft( vertices, m_origin, rpts4, true, texturelength, 1.0, 0, bladelength / 2, { -fMaxOffset + SwitchExtension->fOffset1, ( -fMaxOffset + SwitchExtension->fOffset1 ) / 2 } ); SwitchExtension->Segments[ 1 ]->RenderLoft( vertices, m_origin, rpts2, false, texturelength, 1.0, bladelength / 2, bladelength, { ( -fMaxOffset + SwitchExtension->fOffset1 ) / 2, 0.f } ); - Geometry2.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry2.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); vertices.clear(); // fixed parts SwitchExtension->Segments[ 1 ]->RenderLoft( vertices, m_origin, rpts2, false, texturelength, 1.0, bladelength ); - Geometry2.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry2.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); vertices.clear(); // diverging rail, potentially minus part touched by wheels of vehicle going straight SwitchExtension->Segments[ 1 ]->RenderLoft( vertices, m_origin, rpts1, false, texturelength, 1.0, jointlength ); - Geometry2.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry2.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); vertices.clear(); } } @@ -1232,22 +1229,22 @@ void TTrack::create_geometry( gfx::geometrybank_handle const &Bank ) { // composed from two parts: transition from blade to regular rail, and regular rail SwitchExtension->Segments[ 0 ]->RenderLoft( vertices, m_origin, rpts4, true, texturelength, 1.0, 0, bladelength / 2, { -SwitchExtension->fOffset2, -SwitchExtension->fOffset2 / 2 } ); SwitchExtension->Segments[ 0 ]->RenderLoft( vertices, m_origin, rpts2, false, texturelength, 1.0, bladelength / 2, bladelength, { -SwitchExtension->fOffset2 / 2, 0.f } ); - Geometry1.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry1.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); vertices.clear(); // fixed parts // prawa szyna za iglicą SwitchExtension->Segments[ 0 ]->RenderLoft( vertices, m_origin, rpts2, false, texturelength, 1.0, bladelength ); - Geometry1.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry1.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); vertices.clear(); if( jointlength > 0 ) { // part of the diverging rail touched by wheels of vehicle going straight SwitchExtension->Segments[ 1 ]->RenderLoft( vertices, m_origin, rpts2, false, texturelength, 1.0, 0, jointlength ); - Geometry1.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry1.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); vertices.clear(); } // other rail, full length SwitchExtension->Segments[ 0 ]->RenderLoft( vertices, m_origin, rpts1, false, texturelength ); - Geometry1.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry1.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); vertices.clear(); } if( m_material2 ) { @@ -1256,16 +1253,16 @@ void TTrack::create_geometry( gfx::geometrybank_handle const &Bank ) { // composed from two parts: transition from blade to regular rail, and regular rail SwitchExtension->Segments[ 1 ]->RenderLoft( vertices, m_origin, rpts3, true, texturelength, 1.0, 0, bladelength / 2, { fMaxOffset - SwitchExtension->fOffset1, ( fMaxOffset - SwitchExtension->fOffset1 ) / 2 } ); SwitchExtension->Segments[ 1 ]->RenderLoft( vertices, m_origin, rpts1, false, texturelength, 1.0, bladelength / 2, bladelength, { ( fMaxOffset - SwitchExtension->fOffset1 ) / 2, 0.f } ); - Geometry2.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry2.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); vertices.clear(); // fixed parts // lewa szyna za iglicą SwitchExtension->Segments[ 1 ]->RenderLoft( vertices, m_origin, rpts1, false, texturelength, 1.0, bladelength ); - Geometry2.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry2.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); vertices.clear(); // diverging rail, potentially minus part touched by wheels of vehicle going straight SwitchExtension->Segments[ 1 ]->RenderLoft( vertices, m_origin, rpts2, false, texturelength, 1.0, jointlength ); - Geometry2.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry2.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); vertices.clear(); } } @@ -1274,7 +1271,7 @@ void TTrack::create_geometry( gfx::geometrybank_handle const &Bank ) { if( true == Global.CreateSwitchTrackbeds ) { gfx::vertex_array vertices; create_switch_trackbed( vertices ); - SwitchExtension->Geometry3 = GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ); + SwitchExtension->Geometry3 = GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ); vertices.clear(); } @@ -1297,7 +1294,7 @@ void TTrack::create_geometry( gfx::geometrybank_handle const &Bank ) { auto const texturelength { texture_length( m_material1 ) }; gfx::vertex_array vertices; Segment->RenderLoft(vertices, m_origin, bpts1, iTrapezoid > 0, texturelength); - Geometry1.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry1.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); } if (m_material2) { // pobocze drogi - poziome przy przechyłce (a może krawężnik i chodnik zrobić jak w Midtown Madness 2?) @@ -1310,13 +1307,13 @@ void TTrack::create_geometry( gfx::geometrybank_handle const &Bank ) { if( ( fTexHeight1 >= 0.0 ) || ( slop != 0.0 ) ) { // tylko jeśli jest z prawej Segment->RenderLoft( vertices, m_origin, rpts1, iTrapezoid > 0, texturelength ); - Geometry2.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry2.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); vertices.clear(); } if( ( fTexHeight1 >= 0.0 ) || ( side != 0.0 ) ) { // tylko jeśli jest z lewej Segment->RenderLoft( vertices, m_origin, rpts2, iTrapezoid > 0, texturelength ); - Geometry2.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry2.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); vertices.clear(); } } @@ -1393,22 +1390,22 @@ void TTrack::create_geometry( gfx::geometrybank_handle const &Bank ) { if( ( fTexHeight1 >= 0.0 ) || ( side != 0.0 ) ) { SwitchExtension->Segments[ 2 ]->RenderLoft( vertices, m_origin, rpts2, true, texturelength, 1.0, 0, 0, {}, &b, render ); if( true == render ) { - Geometry2.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry2.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); vertices.clear(); } SwitchExtension->Segments[ 3 ]->RenderLoft( vertices, m_origin, rpts2, true, texturelength, 1.0, 0, 0, {}, &b, render ); if( true == render ) { - Geometry2.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry2.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); vertices.clear(); } SwitchExtension->Segments[ 4 ]->RenderLoft( vertices, m_origin, rpts2, true, texturelength, 1.0, 0, 0, {}, &b, render ); if( true == render ) { - Geometry2.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry2.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); vertices.clear(); } SwitchExtension->Segments[ 5 ]->RenderLoft( vertices, m_origin, rpts2, true, texturelength, 1.0, 0, 0, {}, &b, render ); if( true == render ) { - Geometry2.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry2.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); vertices.clear(); } } @@ -1418,17 +1415,17 @@ void TTrack::create_geometry( gfx::geometrybank_handle const &Bank ) { if( ( fTexHeight1 >= 0.0 ) || ( side != 0.0 ) ) { SwitchExtension->Segments[ 2 ]->RenderLoft( vertices, m_origin, rpts2, true, texturelength, 1.0, 0, 0, {}, &b, render ); // z P2 do P4 if( true == render ) { - Geometry2.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry2.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); vertices.clear(); } SwitchExtension->Segments[ 1 ]->RenderLoft( vertices, m_origin, rpts2, true, texturelength, 1.0, 0, 0, {}, &b, render ); // z P4 do P3=P1 (odwrócony) if( true == render ) { - Geometry2.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry2.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); vertices.clear(); } SwitchExtension->Segments[ 0 ]->RenderLoft( vertices, m_origin, rpts2, true, texturelength, 1.0, 0, 0, {}, &b, render ); // z P1 do P2 if( true == render ) { - Geometry2.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry2.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); vertices.clear(); } } @@ -1483,7 +1480,7 @@ void TTrack::create_geometry( gfx::geometrybank_handle const &Bank ) { cosa0 * u + sina0 * v + 0.5, -sina0 * u + cosa0 * v + 0.5 } ); } - Geometry1.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_FAN ) ); + Geometry1.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_FAN ) ); } break; } // tt_cross @@ -1502,7 +1499,7 @@ void TTrack::create_geometry( gfx::geometrybank_handle const &Bank ) { { // tworzenie trójkątów nawierzchni szosy gfx::vertex_array vertices; Segment->RenderLoft(vertices, m_origin, bpts1, iTrapezoid > 0, fTexLength); - Geometry1.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry1.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); } if (m_material2) { // pobocze drogi - poziome przy przechyłce (a może krawężnik i chodnik zrobić jak w Midtown Madness 2?) @@ -1510,10 +1507,10 @@ void TTrack::create_geometry( gfx::geometrybank_handle const &Bank ) { create_road_side_profile( rpts1, rpts2, bpts1 ); gfx::vertex_array vertices; Segment->RenderLoft( vertices, m_origin, rpts1, iTrapezoid > 0, fTexLength ); - Geometry2.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry2.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); vertices.clear(); Segment->RenderLoft( vertices, m_origin, rpts2, iTrapezoid > 0, fTexLength ); - Geometry2.emplace_back( GfxRenderer.Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); + Geometry2.emplace_back( GfxRenderer->Insert( vertices, Bank, GL_TRIANGLE_STRIP ) ); vertices.clear(); } } @@ -1791,7 +1788,7 @@ TTrack * TTrack::RaAnimate() // composed from two parts: transition from blade to regular rail, and regular rail SwitchExtension->Segments[ 0 ]->RenderLoft( vertices, m_origin, rpts3, true, texturelength, 1.0, 0, bladelength / 2, { SwitchExtension->fOffset2, SwitchExtension->fOffset2 / 2 } ); SwitchExtension->Segments[ 0 ]->RenderLoft( vertices, m_origin, rpts1, false, texturelength, 1.0, bladelength / 2, bladelength, { SwitchExtension->fOffset2 / 2, 0.f } ); - GfxRenderer.Replace( vertices, Geometry1[ 0 ] ); + GfxRenderer->Replace( vertices, Geometry1[ 0 ] ); vertices.clear(); } if( m_material2 ) { @@ -1800,7 +1797,7 @@ TTrack * TTrack::RaAnimate() // composed from two parts: transition from blade to regular rail, and regular rail SwitchExtension->Segments[ 1 ]->RenderLoft( vertices, m_origin, rpts4, true, texturelength, 1.0, 0, bladelength / 2, { -fMaxOffset + SwitchExtension->fOffset1, ( -fMaxOffset + SwitchExtension->fOffset1 ) / 2 } ); SwitchExtension->Segments[ 1 ]->RenderLoft( vertices, m_origin, rpts2, false, texturelength, 1.0, bladelength / 2, bladelength, { ( -fMaxOffset + SwitchExtension->fOffset1 ) / 2, 0.f } ); - GfxRenderer.Replace( vertices, Geometry2[ 0 ] ); + GfxRenderer->Replace( vertices, Geometry2[ 0 ] ); vertices.clear(); } } @@ -1811,7 +1808,7 @@ TTrack * TTrack::RaAnimate() // composed from two parts: transition from blade to regular rail, and regular rail SwitchExtension->Segments[ 0 ]->RenderLoft( vertices, m_origin, rpts4, true, texturelength, 1.0, 0, bladelength / 2, { -SwitchExtension->fOffset2, -SwitchExtension->fOffset2 / 2 } ); SwitchExtension->Segments[ 0 ]->RenderLoft( vertices, m_origin, rpts2, false, texturelength, 1.0, bladelength / 2, bladelength, { -SwitchExtension->fOffset2 / 2, 0.f } ); - GfxRenderer.Replace( vertices, Geometry1[ 0 ] ); + GfxRenderer->Replace( vertices, Geometry1[ 0 ] ); vertices.clear(); } if( m_material2 ) { @@ -1820,7 +1817,7 @@ TTrack * TTrack::RaAnimate() // composed from two parts: transition from blade to regular rail, and regular rail SwitchExtension->Segments[ 1 ]->RenderLoft( vertices, m_origin, rpts3, true, texturelength, 1.0, 0, bladelength / 2, { fMaxOffset - SwitchExtension->fOffset1, ( fMaxOffset - SwitchExtension->fOffset1 ) / 2 } ); SwitchExtension->Segments[ 1 ]->RenderLoft( vertices, m_origin, rpts1, false, texturelength, 1.0, bladelength / 2, bladelength, { ( fMaxOffset - SwitchExtension->fOffset1 ) / 2, 0.f } ); - GfxRenderer.Replace( vertices, Geometry2[ 0 ] ); + GfxRenderer->Replace( vertices, Geometry2[ 0 ] ); vertices.clear(); } } @@ -2071,7 +2068,7 @@ TTrack::export_as_text_( std::ostream &Output ) const { // texture parameters are supplied only if the path is set as visible auto texturefile { ( m_material1 != null_handle ? - GfxRenderer.Material( m_material1 ).name : + GfxRenderer->Material( m_material1 ).name : "none" ) }; if( texturefile.find( szTexturePath ) == 0 ) { // don't include 'textures/' in the path @@ -2083,7 +2080,7 @@ TTrack::export_as_text_( std::ostream &Output ) const { texturefile = ( m_material2 != null_handle ? - GfxRenderer.Material( m_material2 ).name : + GfxRenderer->Material( m_material2 ).name : "none" ); if( texturefile.find( szTexturePath ) == 0 ) { // don't include 'textures/' in the path @@ -2157,7 +2154,7 @@ TTrack::export_as_text_( std::ostream &Output ) const { } if( ( eType == tt_Switch ) && ( SwitchExtension->m_material3 != null_handle ) ) { - auto texturefile { GfxRenderer.Material( m_material2 ).name }; + auto texturefile { GfxRenderer->Material( m_material2 ).name }; if( texturefile.find( szTexturePath ) == 0 ) { // don't include 'textures/' in the path texturefile.erase( 0, std::string{ szTexturePath }.size() ); @@ -2277,7 +2274,7 @@ TTrack::texture_length( material_handle const Material ) { if( Material == null_handle ) { return fTexLength; } - auto const texturelength { GfxRenderer.Material( Material ).size.y }; + auto const texturelength { GfxRenderer->Material( Material ).size.y }; return ( texturelength < 0.f ? fTexLength : diff --git a/Traction.cpp b/Traction.cpp index d0169b95..7e81285f 100644 --- a/Traction.cpp +++ b/Traction.cpp @@ -168,7 +168,7 @@ TTraction::endpoints() const { std::size_t TTraction::create_geometry( gfx::geometrybank_handle const &Bank ) { if( m_geometry != null_handle ) { - return GfxRenderer.Vertices( m_geometry ).size() / 2; + return GfxRenderer->Vertices( m_geometry ).size() / 2; } gfx::vertex_array vertices; @@ -341,7 +341,7 @@ TTraction::create_geometry( gfx::geometrybank_handle const &Bank ) { } auto const elementcount = vertices.size() / 2; - m_geometry = GfxRenderer.Insert( vertices, Bank, GL_LINES ); + m_geometry = GfxRenderer->Insert( vertices, Bank, GL_LINES ); return elementcount; } diff --git a/Train.cpp b/Train.cpp index 174330b9..13547570 100644 --- a/Train.cpp +++ b/Train.cpp @@ -17,6 +17,7 @@ http://mozilla.org/MPL/2.0/. #include "Globals.h" #include "simulation.h" +#include "Event.h" #include "simulationtime.h" #include "Camera.h" #include "Logs.h" @@ -201,6 +202,9 @@ TTrain::commandhandler_map const TTrain::m_commandhandlers = { { user_command::alarmchaintoggle, &TTrain::OnCommand_alarmchaintoggle }, { user_command::wheelspinbrakeactivate, &TTrain::OnCommand_wheelspinbrakeactivate }, { user_command::sandboxactivate, &TTrain::OnCommand_sandboxactivate }, + { user_command::autosandboxtoggle, &TTrain::OnCommand_autosandboxtoggle }, + { user_command::autosandboxactivate, &TTrain::OnCommand_autosandboxactivate }, + { user_command::autosandboxdeactivate, &TTrain::OnCommand_autosandboxdeactivate }, { user_command::epbrakecontroltoggle, &TTrain::OnCommand_epbrakecontroltoggle }, { user_command::trainbrakeoperationmodeincrease, &TTrain::OnCommand_trainbrakeoperationmodeincrease }, { user_command::trainbrakeoperationmodedecrease, &TTrain::OnCommand_trainbrakeoperationmodedecrease }, @@ -345,6 +349,7 @@ TTrain::commandhandler_map const TTrain::m_commandhandlers = { { user_command::radiochanneldecrease, &TTrain::OnCommand_radiochanneldecrease }, { user_command::radiostopsend, &TTrain::OnCommand_radiostopsend }, { user_command::radiostoptest, &TTrain::OnCommand_radiostoptest }, + { user_command::radiocall3send, &TTrain::OnCommand_radiocall3send }, { user_command::cabchangeforward, &TTrain::OnCommand_cabchangeforward }, { user_command::cabchangebackward, &TTrain::OnCommand_cabchangebackward }, { user_command::generictoggle0, &TTrain::OnCommand_generictoggle }, @@ -364,6 +369,7 @@ TTrain::commandhandler_map const TTrain::m_commandhandlers = { { user_command::springbrakeshutoffenable, &TTrain::OnCommand_springbrakeshutoffenable }, { user_command::springbrakeshutoffdisable, &TTrain::OnCommand_springbrakeshutoffdisable }, { user_command::springbrakerelease, &TTrain::OnCommand_springbrakerelease }, + { user_command::distancecounteractivate, &TTrain::OnCommand_distancecounteractivate }, { user_command::speedcontrolincrease, &TTrain::OnCommand_speedcontrolincrease }, { user_command::speedcontroldecrease, &TTrain::OnCommand_speedcontroldecrease }, { user_command::speedcontrolpowerincrease, &TTrain::OnCommand_speedcontrolpowerincrease }, @@ -467,31 +473,36 @@ bool TTrain::Init(TDynamicObject *NewDynamicObject, bool e3d) dictionary_source *TTrain::GetTrainState() { - auto const *mover = DynamicObject->MoverParameters; - if( mover == nullptr ) { return nullptr; } + if( ( mvOccupied == nullptr ) + || ( mvControlled == nullptr ) ) { return nullptr; } auto *dict { new dictionary_source }; if( dict == nullptr ) { return nullptr; } dict->insert( "name", DynamicObject->asName ); - dict->insert( "cab", mover->ActiveCab ); + dict->insert( "cab", mvOccupied->ActiveCab ); // basic systems state data dict->insert( "battery", mvControlled->Battery ); dict->insert( "linebreaker", mvControlled->Mains ); + dict->insert( "main_init", ( mvControlled->MainsInitTimeCountdown < mvControlled->MainsInitTime ) && ( mvControlled->MainsInitTimeCountdown > 0.0 ) ); + dict->insert( "main_ready", ( false == mvControlled->Mains ) && ( fHVoltage > 0.0 ) && ( mvControlled->MainsInitTimeCountdown <= 0.0 ) ); dict->insert( "converter", mvControlled->ConverterFlag ); dict->insert( "converter_overload", mvControlled->ConvOvldFlag ); dict->insert( "compress", mvControlled->CompressorFlag ); + dict->insert( "pant_compressor", mvControlled->PantCompFlag ); + dict->insert( "lights_front", mvOccupied->iLights[ end::front ] ); + dict->insert( "lights_rear", mvOccupied->iLights[ end::rear ] ); // reverser - dict->insert( "direction", mover->ActiveDir ); + dict->insert( "direction", mvOccupied->ActiveDir ); // throttle dict->insert( "mainctrl_pos", mvControlled->MainCtrlPos ); dict->insert( "main_ctrl_actual_pos", mvControlled->MainCtrlActualPos ); dict->insert( "scndctrl_pos", mvControlled->ScndCtrlPos ); dict->insert( "scnd_ctrl_actual_pos", mvControlled->ScndCtrlActualPos ); - dict->insert( "new_speed", mover->NewSpeed); - dict->insert( "speedctrl", mover->SpeedCtrlValue); - dict->insert( "speedctrlpower", mover->SpeedCtrlUnit.DesiredPower); - // brakes + dict->insert( "new_speed", mvOccupied->NewSpeed); + dict->insert( "speedctrl", mvOccupied->SpeedCtrlValue); + dict->insert( "speedctrlpower", mvOccupied->SpeedCtrlUnit.DesiredPower); + // brakes dict->insert( "manual_brake", ( mvOccupied->ManualBrakePos > 0 ) ); bool const bEP = ( mvControlled->LocHandle->GetCP() > 0.2 ) || ( fEIMParams[ 0 ][ 2 ] > 0.01 ); dict->insert( "dir_brake", bEP ); @@ -510,15 +521,16 @@ dictionary_source *TTrain::GetTrainState() { // other controls dict->insert( "ca", TestFlag( mvOccupied->SecuritySystem.Status, s_aware ) ); dict->insert( "shp", TestFlag( mvOccupied->SecuritySystem.Status, s_active ) ); + dict->insert( "distance_counter", m_distancecounter ); dict->insert( "pantpress", std::abs( mvControlled->PantPress ) ); dict->insert( "universal3", InstrumentLightActive ); dict->insert( "radio_channel", iRadioChannel ); dict->insert( "door_lock", mvOccupied->Doors.lock_enabled ); // movement data - dict->insert( "velocity", std::abs( mover->Vel ) ); - dict->insert( "tractionforce", std::abs( mover->Ft ) ); - dict->insert( "slipping_wheels", mover->SlippingWheels ); - dict->insert( "sanding", mover->SandDose ); + dict->insert( "velocity", std::abs( mvOccupied->Vel ) ); + dict->insert( "tractionforce", std::abs( mvOccupied->Ft ) ); + dict->insert( "slipping_wheels", mvOccupied->SlippingWheels ); + dict->insert( "sanding", mvOccupied->SandDose ); // electric current data dict->insert( "traction_voltage", std::abs( mvControlled->RunningTraction.TractionVoltage ) ); dict->insert( "voltage", std::abs( mvControlled->Voltage ) ); @@ -528,7 +540,7 @@ dictionary_source *TTrain::GetTrainState() { // induction motor state data char const *TXTT[ 10 ] = { "fd", "fdt", "fdb", "pd", "pdt", "pdb", "itothv", "1", "2", "3" }; char const *TXTC[ 10 ] = { "fr", "frt", "frb", "pr", "prt", "prb", "im", "vm", "ihv", "uhv" }; - char const *TXTD[ 10 ] = { "enrot", "nrot", "fill_des", "fill_real", "clutch_des", "clutch_real", "water_temp", "oil_press", "retarder_fill", "res2" }; + char const *TXTD[ 10 ] = { "enrot", "nrot", "fill_des", "fill_real", "clutch_des", "clutch_real", "water_temp", "oil_press", "engine_temp", "retarder_fill" }; char const *TXTP[ 3 ] = { "bc", "bp", "sp" }; char const *TXTB[ 2 ] = { "spring_active", "spring_shutoff" }; for( int j = 0; j < 10; ++j ) @@ -578,7 +590,10 @@ dictionary_source *TTrain::GetTrainState() { dict->insert( ( "slip_" + caridx ), bSlip[ i ] ); } // ai state data - auto const *driver = DynamicObject->Mechanik; + auto const *driver { ( + DynamicObject->ctOwner != nullptr ? + DynamicObject->ctOwner : + DynamicObject->Mechanik ) }; dict->insert( "velocity_desired", driver->VelDesired ); dict->insert( "velroad", driver->VelRoad ); @@ -591,6 +606,7 @@ dictionary_source *TTrain::GetTrainState() { driver->TrainTimetable()->serialize( dict ); dict->insert( "train_stationstart", driver->iStationStart ); dict->insert( "train_atpassengerstop", driver->IsAtPassengerStop ); + dict->insert( "train_length", driver->fLength ); // world state data dict->insert( "scenario", Global.SceneryFile ); dict->insert( "hours", static_cast( simulation::Time.data().wHour ) ); @@ -620,6 +636,7 @@ TTrain::get_state() const { btLampkaNadmWent.GetValue(), btLampkaWysRozr.GetValue(), btLampkaOgrzewanieSkladu.GetValue(), + static_cast( iCabn ), btHaslerBrakes.GetValue(), btHaslerCurrent.GetValue(), ( TestFlag( mvOccupied->SecuritySystem.Status, s_CAalarm ) || TestFlag( mvOccupied->SecuritySystem.Status, s_SHPalarm ) ), @@ -629,7 +646,8 @@ TTrain::get_state() const { static_cast( mvOccupied->PipePress ), static_cast( mvOccupied->BrakePress ), fHVoltage, - { fHCurrent[ ( mvControlled->TrainType & dt_EZT ) ? 0 : 1 ], fHCurrent[ 2 ], fHCurrent[ 3 ] } + { fHCurrent[ ( mvControlled->TrainType & dt_EZT ) ? 0 : 1 ], fHCurrent[ 2 ], fHCurrent[ 3 ] }, + ggLVoltage.GetValue() }; } @@ -996,6 +1014,20 @@ void TTrain::OnCommand_tempomattoggle( TTrain *Train, command_data const &Comman } } +void TTrain::OnCommand_distancecounteractivate( TTrain *Train, command_data const &Command ) { + // NOTE: distance meter activation button is presumed to be of impulse type + if( Command.action == GLFW_PRESS ) { + // visual feedback + Train->ggDistanceCounterButton.UpdateValue( 1.0, Train->dsbSwitch ); + // activate or start anew + Train->m_distancecounter = 0.f; + } + else if( Command.action == GLFW_RELEASE ) { + // visual feedback + Train->ggDistanceCounterButton.UpdateValue( 0.0, Train->dsbSwitch ); + } +} + void TTrain::OnCommand_mucurrentindicatorothersourceactivate( TTrain *Train, command_data const &Command ) { if( Train->ggNextCurrentButton.SubModel == nullptr ) { @@ -1536,7 +1568,7 @@ void TTrain::OnCommand_autosandboxactivate(TTrain *Train, command_data const &Co if (Command.action == GLFW_PRESS) { // only reacting to press, so the switch doesn't flip back and forth if key is held down Train->mvOccupied->SandboxAutoAllow(true); - Train->ggAutoSandAllow.UpdateValue(1.0, Train->dsbSwitch); + Train->ggAutoSandButton.UpdateValue(1.0, Train->dsbSwitch); } }; @@ -1544,7 +1576,7 @@ void TTrain::OnCommand_autosandboxdeactivate(TTrain *Train, command_data const & if (Command.action == GLFW_PRESS) { // only reacting to press, so the switch doesn't flip back and forth if key is held down Train->mvOccupied->SandboxAutoAllow(false); - Train->ggAutoSandAllow.UpdateValue(0.0, Train->dsbSwitch); + Train->ggAutoSandButton.UpdateValue(0.0, Train->dsbSwitch); } }; @@ -2184,7 +2216,7 @@ void TTrain::OnCommand_pantographcompressorvalvetoggle( TTrain *Train, command_d if( ( Train->mvControlled->TrainType == dt_EZT ? ( Train->mvControlled != Train->mvOccupied ) : - ( Train->mvOccupied->ActiveCab != 0 ) ) ) { + ( Train->iCabn != 0 ) ) ) { // tylko w maszynowym return; } @@ -2210,7 +2242,7 @@ void TTrain::OnCommand_pantographcompressoractivate( TTrain *Train, command_data if( ( Train->mvControlled->TrainType == dt_EZT ? ( Train->mvControlled != Train->mvOccupied ) : - ( Train->mvOccupied->ActiveCab != 0 ) ) ) { + ( Train->iCabn != 0 ) ) ) { // tylko w maszynowym return; } @@ -3362,7 +3394,7 @@ void TTrain::OnCommand_motordisconnect( TTrain *Train, command_data const &Comma if( ( Train->mvControlled->TrainType == dt_EZT ? ( Train->mvControlled != Train->mvOccupied ) : - ( Train->mvOccupied->ActiveCab != 0 ) ) ) { + ( Train->iCabn != 0 ) ) ) { // tylko w maszynowym return; } @@ -3435,7 +3467,7 @@ void TTrain::OnCommand_motoroverloadrelayreset( TTrain *Train, command_data cons void TTrain::OnCommand_lightspresetactivatenext( TTrain *Train, command_data const &Command ) { if( Train->mvOccupied->LightsPosNo == 0 ) { - // lights are controlled by preset selector + // no preset selector return; } if( Command.action != GLFW_PRESS ) { @@ -3446,15 +3478,22 @@ void TTrain::OnCommand_lightspresetactivatenext( TTrain *Train, command_data con if( ( Train->mvOccupied->LightsPos < Train->mvOccupied->LightsPosNo ) || ( true == Train->mvOccupied->LightsWrap ) ) { // active light preset is stored as value in range 1-LigthPosNo + auto const restartcycle { Train->mvOccupied->LightsPos == Train->mvOccupied->LightsPosNo }; Train->mvOccupied->LightsPos = ( - Train->mvOccupied->LightsPos < Train->mvOccupied->LightsPosNo ? + false == restartcycle ? Train->mvOccupied->LightsPos + 1 : 1 ); // wrap mode Train->SetLights(); // visual feedback if( Train->ggLightsButton.SubModel != nullptr ) { - Train->ggLightsButton.UpdateValue( Train->mvOccupied->LightsPos - 1, Train->dsbSwitch ); + // HACK: skip submodel animation when restarting cycle, since it plays in the 'wrong' direction + if( false == restartcycle ) { + Train->ggLightsButton.UpdateValue( Train->mvOccupied->LightsPos - 1, Train->dsbSwitch ); + } + else { + Train->ggLightsButton.PutValue( Train->mvOccupied->LightsPos - 1 ); + } } } } @@ -3462,7 +3501,7 @@ void TTrain::OnCommand_lightspresetactivatenext( TTrain *Train, command_data con void TTrain::OnCommand_lightspresetactivateprevious( TTrain *Train, command_data const &Command ) { if( Train->mvOccupied->LightsPosNo == 0 ) { - // lights are controlled by preset selector + // no preset selector return; } if( Command.action != GLFW_PRESS ) { @@ -3473,29 +3512,33 @@ void TTrain::OnCommand_lightspresetactivateprevious( TTrain *Train, command_data if( ( Train->mvOccupied->LightsPos > 1 ) || ( true == Train->mvOccupied->LightsWrap ) ) { // active light preset is stored as value in range 1-LigthPosNo + auto const restartcycle { Train->mvOccupied->LightsPos == 1 }; Train->mvOccupied->LightsPos = ( - Train->mvOccupied->LightsPos > 1 ? + false == restartcycle ? Train->mvOccupied->LightsPos - 1 : Train->mvOccupied->LightsPosNo ); // wrap mode Train->SetLights(); // visual feedback if( Train->ggLightsButton.SubModel != nullptr ) { - Train->ggLightsButton.UpdateValue( Train->mvOccupied->LightsPos - 1, Train->dsbSwitch ); + // HACK: skip submodel animation when restarting cycle, since it plays in the 'wrong' direction + if( false == restartcycle ) { + Train->ggLightsButton.UpdateValue( Train->mvOccupied->LightsPos - 1, Train->dsbSwitch ); + } + else { + Train->ggLightsButton.PutValue( Train->mvOccupied->LightsPos - 1 ); + } } } } void TTrain::OnCommand_headlighttoggleleft( TTrain *Train, command_data const &Command ) { - int const vehicleside = - ( Train->mvOccupied->ActiveCab == 1 ? - end::front : - end::rear ); + auto const vehicleend { Train->cab_to_end() }; if( Command.action == GLFW_PRESS ) { // only reacting to press, so the switch doesn't flip back and forth if key is held down - if( ( Train->DynamicObject->iLights[ vehicleside ] & light::headlight_left ) == 0 ) { + if( ( Train->DynamicObject->iLights[ vehicleend ] & light::headlight_left ) == 0 ) { // turn on OnCommand_headlightenableleft( Train, Command ); } @@ -3514,20 +3557,17 @@ void TTrain::OnCommand_headlightenableleft( TTrain *Train, command_data const &C } if( Command.action == GLFW_PRESS ) { - // only reacting to press, so the switch doesn't flip back and forth if key is held down - int const vehicleside = - ( Train->mvOccupied->ActiveCab == 1 ? - end::front : - end::rear ); - - if( ( Train->DynamicObject->iLights[ vehicleside ] & light::headlight_left ) != 0 ) { return; } // already enabled - - Train->DynamicObject->iLights[ vehicleside ] ^= light::headlight_left; // visual feedback Train->ggLeftLightButton.UpdateValue( 1.0, Train->dsbSwitch ); + // implementation + auto const vehicleend { Train->cab_to_end() }; + + if( ( Train->DynamicObject->iLights[ vehicleend ] & light::headlight_left ) == 0 ) { + Train->DynamicObject->iLights[ vehicleend ] ^= light::headlight_left; + } // if the light is controlled by 3-way switch, disable marker light if( Train->ggLeftEndLightButton.SubModel == nullptr ) { - Train->DynamicObject->iLights[ vehicleside ] &= ~light::redmarker_left; + Train->DynamicObject->iLights[ vehicleend ] &= ~light::redmarker_left; } } } @@ -3541,14 +3581,11 @@ void TTrain::OnCommand_headlightdisableleft( TTrain *Train, command_data const & if( Command.action == GLFW_PRESS ) { // only reacting to press, so the switch doesn't flip back and forth if key is held down - int const vehicleside = - ( Train->mvOccupied->ActiveCab == 1 ? - end::front : - end::rear ); + int const vehicleend { Train->cab_to_end() }; - if( ( Train->DynamicObject->iLights[ vehicleside ] & light::headlight_left ) == 0 ) { return; } // already disabled + if( ( Train->DynamicObject->iLights[ vehicleend ] & light::headlight_left ) == 0 ) { return; } // already disabled - Train->DynamicObject->iLights[ vehicleside ] ^= light::headlight_left; + Train->DynamicObject->iLights[ vehicleend ] ^= light::headlight_left; // visual feedback Train->ggLeftLightButton.UpdateValue( 0.0, Train->dsbSwitch ); } @@ -3556,14 +3593,11 @@ void TTrain::OnCommand_headlightdisableleft( TTrain *Train, command_data const & void TTrain::OnCommand_headlighttoggleright( TTrain *Train, command_data const &Command ) { - int const vehicleside = - ( Train->mvOccupied->ActiveCab == 1 ? - end::front : - end::rear ); + auto const vehicleend { Train->cab_to_end() }; if( Command.action == GLFW_PRESS ) { // only reacting to press, so the switch doesn't flip back and forth if key is held down - if( ( Train->DynamicObject->iLights[ vehicleside ] & light::headlight_right ) == 0 ) { + if( ( Train->DynamicObject->iLights[ vehicleend ] & light::headlight_right ) == 0 ) { // turn on OnCommand_headlightenableright( Train, Command ); } @@ -3582,20 +3616,17 @@ void TTrain::OnCommand_headlightenableright( TTrain *Train, command_data const & } if( Command.action == GLFW_PRESS ) { - // only reacting to press, so the switch doesn't flip back and forth if key is held down - int const vehicleside = - ( Train->mvOccupied->ActiveCab == 1 ? - end::front : - end::rear ); - - if( ( Train->DynamicObject->iLights[ vehicleside ] & light::headlight_right ) != 0 ) { return; } // already enabled - - Train->DynamicObject->iLights[ vehicleside ] ^= light::headlight_right; // visual feedback Train->ggRightLightButton.UpdateValue( 1.0, Train->dsbSwitch ); + // implementation + auto const vehicleend { Train->cab_to_end() }; + + if( ( Train->DynamicObject->iLights[ vehicleend ] & light::headlight_right ) == 0 ) { + Train->DynamicObject->iLights[ vehicleend ] ^= light::headlight_right; + } // if the light is controlled by 3-way switch, disable marker light if( Train->ggRightEndLightButton.SubModel == nullptr ) { - Train->DynamicObject->iLights[ vehicleside ] &= ~light::redmarker_right; + Train->DynamicObject->iLights[ vehicleend ] &= ~light::redmarker_right; } } } @@ -3609,14 +3640,11 @@ void TTrain::OnCommand_headlightdisableright( TTrain *Train, command_data const if( Command.action == GLFW_PRESS ) { // only reacting to press, so the switch doesn't flip back and forth if key is held down - int const vehicleside = - ( Train->mvOccupied->ActiveCab == 1 ? - end::front : - end::rear ); + auto const vehicleend { Train->cab_to_end() }; - if( ( Train->DynamicObject->iLights[ vehicleside ] & light::headlight_right ) == 0 ) { return; } // already disabled + if( ( Train->DynamicObject->iLights[ vehicleend ] & light::headlight_right ) == 0 ) { return; } // already disabled - Train->DynamicObject->iLights[ vehicleside ] ^= light::headlight_right; + Train->DynamicObject->iLights[ vehicleend ] ^= light::headlight_right; // visual feedback Train->ggRightLightButton.UpdateValue( 0.0, Train->dsbSwitch ); } @@ -3624,14 +3652,11 @@ void TTrain::OnCommand_headlightdisableright( TTrain *Train, command_data const void TTrain::OnCommand_headlighttoggleupper( TTrain *Train, command_data const &Command ) { - int const vehicleside = - ( Train->mvOccupied->ActiveCab == 1 ? - end::front : - end::rear ); + auto const vehicleend { Train->cab_to_end() }; if( Command.action == GLFW_PRESS ) { // only reacting to press, so the switch doesn't flip back and forth if key is held down - if( ( Train->DynamicObject->iLights[ vehicleside ] & light::headlight_upper ) == 0 ) { + if( ( Train->DynamicObject->iLights[ vehicleend ] & light::headlight_upper ) == 0 ) { // turn on OnCommand_headlightenableupper( Train, Command ); } @@ -3651,14 +3676,11 @@ void TTrain::OnCommand_headlightenableupper( TTrain *Train, command_data const & if( Command.action == GLFW_PRESS ) { // only reacting to press, so the switch doesn't flip back and forth if key is held down - int const vehicleside = - ( Train->mvOccupied->ActiveCab == 1 ? - end::front : - end::rear ); + auto const vehicleend { Train->cab_to_end() }; - if( ( Train->DynamicObject->iLights[ vehicleside ] & light::headlight_upper ) != 0 ) { return; } // already enabled + if( ( Train->DynamicObject->iLights[ vehicleend ] & light::headlight_upper ) != 0 ) { return; } // already enabled - Train->DynamicObject->iLights[ vehicleside ] ^= light::headlight_upper; + Train->DynamicObject->iLights[ vehicleend ] ^= light::headlight_upper; // visual feedback Train->ggUpperLightButton.UpdateValue( 1.0, Train->dsbSwitch ); } @@ -3673,14 +3695,11 @@ void TTrain::OnCommand_headlightdisableupper( TTrain *Train, command_data const if( Command.action == GLFW_PRESS ) { // only reacting to press, so the switch doesn't flip back and forth if key is held down - int const vehicleside = - ( Train->mvOccupied->ActiveCab == 1 ? - end::front : - end::rear ); + auto const vehicleend { Train->cab_to_end() }; - if( ( Train->DynamicObject->iLights[ vehicleside ] & light::headlight_upper ) == 0 ) { return; } // already disabled + if( ( Train->DynamicObject->iLights[ vehicleend ] & light::headlight_upper ) == 0 ) { return; } // already disabled - Train->DynamicObject->iLights[ vehicleside ] ^= light::headlight_upper; + Train->DynamicObject->iLights[ vehicleend ] ^= light::headlight_upper; // visual feedback Train->ggUpperLightButton.UpdateValue( 0.0, Train->dsbSwitch ); } @@ -3690,12 +3709,9 @@ void TTrain::OnCommand_redmarkertoggleleft( TTrain *Train, command_data const &C if( Command.action == GLFW_PRESS ) { // only reacting to press, so the switch doesn't flip back and forth if key is held down - int const vehicleside = - ( Train->mvOccupied->ActiveCab == 1 ? - end::front : - end::rear ); + auto const vehicleend { Train->cab_to_end() }; - if( ( Train->DynamicObject->iLights[ vehicleside ] & light::redmarker_left ) == 0 ) { + if( ( Train->DynamicObject->iLights[ vehicleend ] & light::redmarker_left ) == 0 ) { // turn on OnCommand_redmarkerenableleft( Train, Command ); } @@ -3715,14 +3731,11 @@ void TTrain::OnCommand_redmarkerenableleft( TTrain *Train, command_data const &C if( Command.action == GLFW_PRESS ) { // only reacting to press, so the switch doesn't flip back and forth if key is held down - int const vehicleside = - ( Train->mvOccupied->ActiveCab == 1 ? - end::front : - end::rear ); + auto const vehicleend { Train->cab_to_end() }; - if( ( Train->DynamicObject->iLights[ vehicleside ] & light::redmarker_left ) != 0 ) { return; } // already enabled + if( ( Train->DynamicObject->iLights[ vehicleend ] & light::redmarker_left ) != 0 ) { return; } // already enabled - Train->DynamicObject->iLights[ vehicleside ] ^= light::redmarker_left; + Train->DynamicObject->iLights[ vehicleend ] ^= light::redmarker_left; // visual feedback if( Train->ggLeftEndLightButton.SubModel != nullptr ) { Train->ggLeftEndLightButton.UpdateValue( 1.0, Train->dsbSwitch ); @@ -3732,7 +3745,7 @@ void TTrain::OnCommand_redmarkerenableleft( TTrain *Train, command_data const &C // this is crude, but for now will do Train->ggLeftLightButton.UpdateValue( -1.0, Train->dsbSwitch ); // if the light is controlled by 3-way switch, disable the headlight - Train->DynamicObject->iLights[ vehicleside ] &= ~light::headlight_left; + Train->DynamicObject->iLights[ vehicleend ] &= ~light::headlight_left; } } } @@ -3746,14 +3759,11 @@ void TTrain::OnCommand_redmarkerdisableleft( TTrain *Train, command_data const & if( Command.action == GLFW_PRESS ) { // only reacting to press, so the switch doesn't flip back and forth if key is held down - int const vehicleside = - ( Train->mvOccupied->ActiveCab == 1 ? - end::front : - end::rear ); + auto const vehicleend { Train->cab_to_end() }; - if( ( Train->DynamicObject->iLights[ vehicleside ] & light::redmarker_left ) == 0 ) { return; } // already disabled + if( ( Train->DynamicObject->iLights[ vehicleend ] & light::redmarker_left ) == 0 ) { return; } // already disabled - Train->DynamicObject->iLights[ vehicleside ] ^= light::redmarker_left; + Train->DynamicObject->iLights[ vehicleend ] ^= light::redmarker_left; // visual feedback if( Train->ggLeftEndLightButton.SubModel != nullptr ) { Train->ggLeftEndLightButton.UpdateValue( 0.0, Train->dsbSwitch ); @@ -3770,12 +3780,9 @@ void TTrain::OnCommand_redmarkertoggleright( TTrain *Train, command_data const & if( Command.action == GLFW_PRESS ) { // only reacting to press, so the switch doesn't flip back and forth if key is held down - int const vehicleside = - ( Train->mvOccupied->ActiveCab == 1 ? - end::front : - end::rear ); + auto const vehicleend { Train->cab_to_end() }; - if( ( Train->DynamicObject->iLights[ vehicleside ] & light::redmarker_right ) == 0 ) { + if( ( Train->DynamicObject->iLights[ vehicleend ] & light::redmarker_right ) == 0 ) { // turn on OnCommand_redmarkerenableright( Train, Command ); } @@ -3795,14 +3802,11 @@ void TTrain::OnCommand_redmarkerenableright( TTrain *Train, command_data const & if( Command.action == GLFW_PRESS ) { // only reacting to press, so the switch doesn't flip back and forth if key is held down - int const vehicleside = - ( Train->mvOccupied->ActiveCab == 1 ? - end::front : - end::rear ); + auto const vehicleend { Train->cab_to_end() }; - if( ( Train->DynamicObject->iLights[ vehicleside ] & light::redmarker_right ) != 0 ) { return; } // already enabled + if( ( Train->DynamicObject->iLights[ vehicleend ] & light::redmarker_right ) != 0 ) { return; } // already enabled - Train->DynamicObject->iLights[ vehicleside ] ^= light::redmarker_right; + Train->DynamicObject->iLights[ vehicleend ] ^= light::redmarker_right; // visual feedback if( Train->ggRightEndLightButton.SubModel != nullptr ) { Train->ggRightEndLightButton.UpdateValue( 1.0, Train->dsbSwitch ); @@ -3812,7 +3816,7 @@ void TTrain::OnCommand_redmarkerenableright( TTrain *Train, command_data const & // this is crude, but for now will do Train->ggRightLightButton.UpdateValue( -1.0, Train->dsbSwitch ); // if the light is controlled by 3-way switch, disable the headlight - Train->DynamicObject->iLights[ vehicleside ] &= ~light::headlight_right; + Train->DynamicObject->iLights[ vehicleend ] &= ~light::headlight_right; } } } @@ -3826,14 +3830,11 @@ void TTrain::OnCommand_redmarkerdisableright( TTrain *Train, command_data const if( Command.action == GLFW_PRESS ) { // only reacting to press, so the switch doesn't flip back and forth if key is held down - int const vehicleside = - ( Train->mvOccupied->ActiveCab == 1 ? - end::front : - end::rear ); + auto const vehicleend { Train->cab_to_end() }; - if( ( Train->DynamicObject->iLights[ vehicleside ] & light::redmarker_right ) == 0 ) { return; } // already disabled + if( ( Train->DynamicObject->iLights[ vehicleend ] & light::redmarker_right ) == 0 ) { return; } // already disabled - Train->DynamicObject->iLights[ vehicleside ] ^= light::redmarker_right; + Train->DynamicObject->iLights[ vehicleend ] ^= light::redmarker_right; // visual feedback if( Train->ggRightEndLightButton.SubModel != nullptr ) { Train->ggRightEndLightButton.UpdateValue( 0.0, Train->dsbSwitch ); @@ -3853,23 +3854,22 @@ void TTrain::OnCommand_headlighttogglerearleft( TTrain *Train, command_data cons return; } - int const vehicleside = - ( Train->mvOccupied->ActiveCab == 1 ? - end::rear : - end::front ); - if( Command.action == GLFW_PRESS ) { // NOTE: we toggle the light on opposite side, as 'rear right' is 'front left' on the rear end etc + auto const vehicleotherend { ( + Train->cab_to_end() == end::front ? + end::rear : + end::front ) }; // only reacting to press, so the switch doesn't flip back and forth if key is held down - if( ( Train->DynamicObject->iLights[ vehicleside ] & light::headlight_right ) == 0 ) { + if( ( Train->DynamicObject->iLights[ vehicleotherend ] & light::headlight_right ) == 0 ) { // turn on - Train->DynamicObject->iLights[ vehicleside ] ^= light::headlight_right; + Train->DynamicObject->iLights[ vehicleotherend ] ^= light::headlight_right; // visual feedback Train->ggRearLeftLightButton.UpdateValue( 1.0, Train->dsbSwitch ); } else { //turn off - Train->DynamicObject->iLights[ vehicleside ] ^= light::headlight_right; + Train->DynamicObject->iLights[ vehicleotherend ] ^= light::headlight_right; // visual feedback Train->ggRearLeftLightButton.UpdateValue( 0.0, Train->dsbSwitch ); } @@ -3883,23 +3883,22 @@ void TTrain::OnCommand_headlighttogglerearright( TTrain *Train, command_data con return; } - int const vehicleside = - ( Train->mvOccupied->ActiveCab == 1 ? - end::rear : - end::front ); - if( Command.action == GLFW_PRESS ) { // NOTE: we toggle the light on opposite side, as 'rear right' is 'front left' on the rear end etc + auto const vehicleotherend { ( + Train->cab_to_end() == end::front ? + end::rear : + end::front ) }; // only reacting to press, so the switch doesn't flip back and forth if key is held down - if( ( Train->DynamicObject->iLights[ vehicleside ] & light::headlight_left ) == 0 ) { + if( ( Train->DynamicObject->iLights[ vehicleotherend ] & light::headlight_left ) == 0 ) { // turn on - Train->DynamicObject->iLights[ vehicleside ] ^= light::headlight_left; + Train->DynamicObject->iLights[ vehicleotherend ] ^= light::headlight_left; // visual feedback Train->ggRearRightLightButton.UpdateValue( 1.0, Train->dsbSwitch ); } else { //turn off - Train->DynamicObject->iLights[ vehicleside ] ^= light::headlight_left; + Train->DynamicObject->iLights[ vehicleotherend ] ^= light::headlight_left; // visual feedback Train->ggRearRightLightButton.UpdateValue( 0.0, Train->dsbSwitch ); } @@ -3913,22 +3912,21 @@ void TTrain::OnCommand_headlighttogglerearupper( TTrain *Train, command_data con return; } - int const vehicleside = - ( Train->mvOccupied->ActiveCab == 1 ? - end::rear : - end::front ); - if( Command.action == GLFW_PRESS ) { // only reacting to press, so the switch doesn't flip back and forth if key is held down - if( ( Train->DynamicObject->iLights[ vehicleside ] & light::headlight_upper ) == 0 ) { + auto const vehicleotherend { ( + Train->cab_to_end() == end::front ? + end::rear : + end::front ) }; + if( ( Train->DynamicObject->iLights[ vehicleotherend ] & light::headlight_upper ) == 0 ) { // turn on - Train->DynamicObject->iLights[ vehicleside ] ^= light::headlight_upper; + Train->DynamicObject->iLights[ vehicleotherend ] ^= light::headlight_upper; // visual feedback Train->ggRearUpperLightButton.UpdateValue( 1.0, Train->dsbSwitch ); } else { //turn off - Train->DynamicObject->iLights[ vehicleside ] ^= light::headlight_upper; + Train->DynamicObject->iLights[ vehicleotherend ] ^= light::headlight_upper; // visual feedback Train->ggRearUpperLightButton.UpdateValue( 0.0, Train->dsbSwitch ); } @@ -3942,23 +3940,22 @@ void TTrain::OnCommand_redmarkertogglerearleft( TTrain *Train, command_data cons return; } - int const vehicleside = - ( Train->mvOccupied->ActiveCab == 1 ? - end::rear : - end::front ); - if( Command.action == GLFW_PRESS ) { // NOTE: we toggle the light on opposite side, as 'rear right' is 'front left' on the rear end etc + auto const vehicleotherend { ( + Train->cab_to_end() == end::front ? + end::rear : + end::front ) }; // only reacting to press, so the switch doesn't flip back and forth if key is held down - if( ( Train->DynamicObject->iLights[ vehicleside ] & light::redmarker_right ) == 0 ) { + if( ( Train->DynamicObject->iLights[ vehicleotherend ] & light::redmarker_right ) == 0 ) { // turn on - Train->DynamicObject->iLights[ vehicleside ] ^= light::redmarker_right; + Train->DynamicObject->iLights[ vehicleotherend ] ^= light::redmarker_right; // visual feedback Train->ggRearLeftEndLightButton.UpdateValue( 1.0, Train->dsbSwitch ); } else { //turn off - Train->DynamicObject->iLights[ vehicleside ] ^= light::redmarker_right; + Train->DynamicObject->iLights[ vehicleotherend ] ^= light::redmarker_right; // visual feedback Train->ggRearLeftEndLightButton.UpdateValue( 0.0, Train->dsbSwitch ); } @@ -3972,23 +3969,22 @@ void TTrain::OnCommand_redmarkertogglerearright( TTrain *Train, command_data con return; } - int const vehicleside = - ( Train->mvOccupied->ActiveCab == 1 ? - end::rear : - end::front ); - if( Command.action == GLFW_PRESS ) { // NOTE: we toggle the light on opposite side, as 'rear right' is 'front left' on the rear end etc + auto const vehicleotherend { ( + Train->cab_to_end() == end::front ? + end::rear : + end::front ) }; // only reacting to press, so the switch doesn't flip back and forth if key is held down - if( ( Train->DynamicObject->iLights[ vehicleside ] & light::redmarker_left ) == 0 ) { + if( ( Train->DynamicObject->iLights[ vehicleotherend ] & light::redmarker_left ) == 0 ) { // turn on - Train->DynamicObject->iLights[ vehicleside ] ^= light::redmarker_left; + Train->DynamicObject->iLights[ vehicleotherend ] ^= light::redmarker_left; // visual feedback Train->ggRearRightEndLightButton.UpdateValue( 1.0, Train->dsbSwitch ); } else { //turn off - Train->DynamicObject->iLights[ vehicleside ] ^= light::redmarker_left; + Train->DynamicObject->iLights[ vehicleotherend ] ^= light::redmarker_left; // visual feedback Train->ggRearRightEndLightButton.UpdateValue( 0.0, Train->dsbSwitch ); } @@ -4608,9 +4604,8 @@ void TTrain::OnCommand_doortoggleleft( TTrain *Train, command_data const &Comman if( Command.action == GLFW_PRESS ) { // NOTE: test how the door state check works with consists where the occupied vehicle doesn't have opening doors if( false == ( - Train->mvOccupied->ActiveCab == 1 ? - Train->mvOccupied->Doors.instances[side::left].is_opening || Train->mvOccupied->Doors.instances[ side::left ].is_open : - Train->mvOccupied->Doors.instances[side::right].is_opening || Train->mvOccupied->Doors.instances[ side::right ].is_open ) ) { + ( Train->ggDoorLeftButton.GetDesiredValue() > 0.5 ) + || ( Train->ggDoorLeftOnButton.GetDesiredValue() > 0.5 ) ) ) { // open OnCommand_dooropenleft( Train, Command ); } @@ -4630,9 +4625,8 @@ void TTrain::OnCommand_doortoggleleft( TTrain *Train, command_data const &Comman else if( Command.action == GLFW_RELEASE ) { if( true == ( - Train->mvOccupied->ActiveCab == 1 ? - Train->mvOccupied->Doors.instances[side::left].is_opening || Train->mvOccupied->Doors.instances[ side::left ].is_open : - Train->mvOccupied->Doors.instances[side::right].is_opening || Train->mvOccupied->Doors.instances[ side::right ].is_open ) ) { + ( Train->ggDoorLeftButton.GetDesiredValue() > 0.5 ) + || ( Train->ggDoorLeftOnButton.GetDesiredValue() > 0.5 ) ) ) { // open if( ( Train->mvOccupied->Doors.has_autowarning ) && ( Train->mvOccupied->DepartureSignal ) ) { @@ -4680,7 +4674,7 @@ void TTrain::OnCommand_doorpermitleft( TTrain *Train, command_data const &Comman if( Command.action == GLFW_PRESS ) { auto const side { ( - Train->mvOccupied->ActiveCab == 1 ? + Train->cab_to_end() == end::front ? side::left : side::right ) }; @@ -4692,7 +4686,7 @@ void TTrain::OnCommand_doorpermitleft( TTrain *Train, command_data const &Comman } else { // two-state switch - auto const newstate { !( Train->mvOccupied->Doors.instances[ side ].open_permit ) }; + auto const newstate { !( Train->ggDoorLeftPermitButton.GetDesiredValue() > 0.5 ) }; Train->mvOccupied->PermitDoors( side, newstate ); // visual feedback @@ -4716,7 +4710,7 @@ void TTrain::OnCommand_doorpermitright( TTrain *Train, command_data const &Comma if( Command.action == GLFW_PRESS ) { auto const side { ( - Train->mvOccupied->ActiveCab == 1 ? + Train->cab_to_end() == end::front ? side::right : side::left ) }; @@ -4728,7 +4722,7 @@ void TTrain::OnCommand_doorpermitright( TTrain *Train, command_data const &Comma } else { // two-state switch - auto const newstate { !( Train->mvOccupied->Doors.instances[ side ].open_permit ) }; + auto const newstate { !( Train->ggDoorRightPermitButton.GetDesiredValue() > 0.5 ) }; Train->mvOccupied->PermitDoors( side, newstate ); // visual feedback @@ -4782,7 +4776,7 @@ void TTrain::OnCommand_dooropenleft( TTrain *Train, command_data const &Command if( Command.action == GLFW_PRESS ) { Train->mvOccupied->OperateDoors( - ( Train->mvOccupied->ActiveCab == 1 ? + ( Train->cab_to_end() == end::front ? side::left : side::right ), true ); @@ -4828,7 +4822,7 @@ void TTrain::OnCommand_doorcloseleft( TTrain *Train, command_data const &Command else { // TODO: move door opening/closing to the update, so the switch animation doesn't hinge on door working Train->mvOccupied->OperateDoors( - ( Train->mvOccupied->ActiveCab == 1 ? + ( Train->cab_to_end() == end::front ? side::left : side::right ), false ); @@ -4850,7 +4844,7 @@ void TTrain::OnCommand_doorcloseleft( TTrain *Train, command_data const &Command Train->mvOccupied->signal_departure( false ); // now we can actually close the door Train->mvOccupied->OperateDoors( - ( Train->mvOccupied->ActiveCab == 1 ? + ( Train->cab_to_end() == end::front ? side::left : side::right ), false ); @@ -4867,9 +4861,8 @@ void TTrain::OnCommand_doortoggleright( TTrain *Train, command_data const &Comma if( Command.action == GLFW_PRESS ) { // NOTE: test how the door state check works with consists where the occupied vehicle doesn't have opening doors if( false == ( - Train->mvOccupied->ActiveCab == 1 ? - Train->mvOccupied->Doors.instances[side::right].is_opening || Train->mvOccupied->Doors.instances[ side::right ].is_open : - Train->mvOccupied->Doors.instances[side::left].is_opening || Train->mvOccupied->Doors.instances[ side::left ].is_open ) ) { + ( Train->ggDoorRightButton.GetDesiredValue() > 0.5 ) + || ( Train->ggDoorRightOnButton.GetDesiredValue() > 0.5 ) ) ) { // open OnCommand_dooropenright( Train, Command ); } @@ -4889,9 +4882,8 @@ void TTrain::OnCommand_doortoggleright( TTrain *Train, command_data const &Comma else if( Command.action == GLFW_RELEASE ) { if( true == ( - Train->mvOccupied->ActiveCab == 1 ? - Train->mvOccupied->Doors.instances[side::right].is_opening || Train->mvOccupied->Doors.instances[ side::right ].is_open : - Train->mvOccupied->Doors.instances[side::left].is_opening || Train->mvOccupied->Doors.instances[ side::left ].is_open ) ) { + ( Train->ggDoorRightButton.GetDesiredValue() > 0.5 ) + || ( Train->ggDoorRightOnButton.GetDesiredValue() > 0.5 ) ) ) { // open if( ( Train->mvOccupied->Doors.has_autowarning ) && ( Train->mvOccupied->DepartureSignal ) ) { @@ -4949,7 +4941,7 @@ void TTrain::OnCommand_dooropenright( TTrain *Train, command_data const &Command if( Command.action == GLFW_PRESS ) { Train->mvOccupied->OperateDoors( - ( Train->mvOccupied->ActiveCab == 1 ? + ( Train->cab_to_end() == end::front ? side::right : side::left ), true ); @@ -4994,7 +4986,7 @@ void TTrain::OnCommand_doorcloseright( TTrain *Train, command_data const &Comman } else { Train->mvOccupied->OperateDoors( - ( Train->mvOccupied->ActiveCab == 1 ? + ( Train->cab_to_end() == end::front ? side::right : side::left ), false ); @@ -5016,7 +5008,7 @@ void TTrain::OnCommand_doorcloseright( TTrain *Train, command_data const &Comman Train->mvOccupied->signal_departure( false ); // now we can actually close the door Train->mvOccupied->OperateDoors( - ( Train->mvOccupied->ActiveCab == 1 ? + ( Train->cab_to_end() == end::front ? side::right : side::left ), false ); @@ -5369,6 +5361,7 @@ void TTrain::OnCommand_radiostoptest( TTrain *Train, command_data const &Command if( Command.action == GLFW_PRESS ) { if( ( Train->RadioChannel() == 10 ) + && ( true == Train->mvOccupied->Radio ) && ( Train->mvControlled->Battery || Train->mvControlled->ConverterFlag ) ) { Train->Dynamic()->RadioStop(); } @@ -5381,15 +5374,44 @@ void TTrain::OnCommand_radiostoptest( TTrain *Train, command_data const &Command } } +void TTrain::OnCommand_radiocall3send( TTrain *Train, command_data const &Command ) { + + if( Command.action == GLFW_PRESS ) { + if( ( Train->RadioChannel() != 10 ) + && ( true == Train->mvOccupied->Radio ) + && ( Train->mvControlled->Battery || Train->mvControlled->ConverterFlag ) ) { + simulation::Events.queue_receivers( radio_message::call3, Train->Dynamic()->GetPosition() ); + } + // visual feedback + Train->ggRadioCall3.UpdateValue( 1.0 ); + } + else if( Command.action == GLFW_RELEASE ) { + // visual feedback + Train->ggRadioCall3.UpdateValue( 0.0 ); + } +} + void TTrain::OnCommand_cabchangeforward( TTrain *Train, command_data const &Command ) { if( Command.action == GLFW_PRESS ) { - if( false == Train->CabChange( 1 ) ) { - if( TestFlag( Train->DynamicObject->MoverParameters->Couplers[ end::front ].CouplingFlag, coupling::gangway ) ) { + auto const *owner { ( + Train->DynamicObject->ctOwner != nullptr ? + Train->DynamicObject->ctOwner : + Train->DynamicObject->Mechanik ) }; + auto const movedirection { 1 }; + if( false == Train->CabChange( movedirection ) ) { + auto const exitdirection { ( + movedirection > 0 ? + end::front : + end::rear ) }; + if( TestFlag( Train->DynamicObject->MoverParameters->Couplers[ exitdirection ].CouplingFlag, coupling::gangway ) ) { // przejscie do nastepnego pojazdu - Global.changeDynObj = Train->DynamicObject->PrevConnected(); + Global.changeDynObj = ( + exitdirection == end::front ? + Train->DynamicObject->PrevConnected() : + Train->DynamicObject->NextConnected() ); Global.changeDynObj->MoverParameters->ActiveCab = ( - Train->DynamicObject->MoverParameters->Neighbours[end::front].vehicle_end ? + Train->DynamicObject->MoverParameters->Neighbours[ exitdirection ].vehicle_end ? -1 : 1 ); } @@ -5404,12 +5426,25 @@ void TTrain::OnCommand_cabchangeforward( TTrain *Train, command_data const &Comm void TTrain::OnCommand_cabchangebackward( TTrain *Train, command_data const &Command ) { if( Command.action == GLFW_PRESS ) { - if( false == Train->CabChange( -1 ) ) { - if( TestFlag( Train->DynamicObject->MoverParameters->Couplers[ end::rear ].CouplingFlag, coupling::gangway ) ) { + auto const *owner { ( + Train->DynamicObject->ctOwner != nullptr ? + Train->DynamicObject->ctOwner : + Train->DynamicObject->Mechanik ) }; + auto const movedirection { -1 }; + if( false == Train->CabChange( movedirection ) ) { + // current vehicle doesn't extend any farther in this direction, check if we there's one connected we can move to + auto const exitdirection { ( + movedirection > 0 ? + end::front : + end::rear ) }; + if( TestFlag( Train->DynamicObject->MoverParameters->Couplers[ exitdirection ].CouplingFlag, coupling::gangway ) ) { // przejscie do nastepnego pojazdu - Global.changeDynObj = Train->DynamicObject->NextConnected(); + Global.changeDynObj = ( + exitdirection == end::front ? + Train->DynamicObject->PrevConnected() : + Train->DynamicObject->NextConnected() ); Global.changeDynObj->MoverParameters->ActiveCab = ( - Train->DynamicObject->MoverParameters->Neighbours[end::rear].vehicle_end ? + Train->DynamicObject->MoverParameters->Neighbours[ exitdirection ].vehicle_end ? -1 : 1 ); } @@ -5464,10 +5499,11 @@ bool TTrain::Update( double const Deltatime ) if( ( ggMainButton.GetDesiredValue() > 0.95 ) || ( ggMainOnButton.GetDesiredValue() > 0.95 ) ) { // keep track of period the line breaker button is held down, to determine when/if circuit closes - if( ( fHVoltage > 0.5 * mvControlled->EnginePowerSource.MaxVoltage ) - || ( ( mvControlled->EngineType != TEngineType::ElectricSeriesMotor ) - && ( mvControlled->EngineType != TEngineType::ElectricInductionMotor ) - && ( true == mvControlled->Battery ) ) ) { + if( ( mvControlled->MainsInitTimeCountdown <= 0.0 ) + && ( ( fHVoltage > 0.5 * mvControlled->EnginePowerSource.MaxVoltage ) + || ( ( mvControlled->EngineType != TEngineType::ElectricSeriesMotor ) + && ( mvControlled->EngineType != TEngineType::ElectricInductionMotor ) + && ( true == mvControlled->Battery ) ) ) ) { // prevent the switch from working if there's no power // TODO: consider whether it makes sense for diesel engines and such fMainRelayTimer += Deltatime; @@ -5693,7 +5729,9 @@ bool TTrain::Update( double const Deltatime ) in++; iPowerNo = in; } - if ((in < 8) && (p->MoverParameters->EngineType==TEngineType::DieselEngine)) + if ((in < 8) + && ((p->MoverParameters->EngineType==TEngineType::DieselEngine) + ||(p->MoverParameters->EngineType==TEngineType::DieselElectric))) { fDieselParams[1 + in][0] = p->MoverParameters->enrot*60; fDieselParams[1 + in][1] = p->MoverParameters->nrot; @@ -5703,8 +5741,8 @@ bool TTrain::Update( double const Deltatime ) fDieselParams[1 + in][5] = p->MoverParameters->dizel_engage; fDieselParams[1 + in][6] = p->MoverParameters->dizel_heat.Twy; fDieselParams[1 + in][7] = p->MoverParameters->OilPump.pressure; - fDieselParams[1 + in][8] = p->MoverParameters->hydro_R_Fill; - //fDieselParams[1 + in][9] = p->MoverParameters-> + fDieselParams[1 + in][8] = p->MoverParameters->dizel_heat.Ts; + fDieselParams[1 + in][9] = p->MoverParameters->hydro_R_Fill; bMains[in] = p->MoverParameters->Mains; fCntVol[in] = p->MoverParameters->BatteryVoltage; bFuse[in] = p->MoverParameters->FuseFlag; @@ -5814,14 +5852,13 @@ bool TTrain::Update( double const Deltatime ) // youBy - prad w drugim czlonie: galaz lub calosc { - TDynamicObject *tmp; - tmp = NULL; + TDynamicObject *tmp { nullptr }; if (DynamicObject->NextConnected()) - if ((TestFlag(mvControlled->Couplers[1].CouplingFlag, ctrain_controll)) && + if ((TestFlag(mvControlled->Couplers[end::rear].CouplingFlag, ctrain_controll)) && (mvOccupied->ActiveCab == 1)) tmp = DynamicObject->NextConnected(); if (DynamicObject->PrevConnected()) - if ((TestFlag(mvControlled->Couplers[0].CouplingFlag, ctrain_controll)) && + if ((TestFlag(mvControlled->Couplers[end::front].CouplingFlag, ctrain_controll)) && (mvOccupied->ActiveCab == -1)) tmp = DynamicObject->PrevConnected(); if( tmp ) { @@ -5984,7 +6021,7 @@ bool TTrain::Update( double const Deltatime ) } } // McZapkie-141102: SHP i czuwak, TODO: sygnalizacja kabinowa - if( mvOccupied->SecuritySystem.Status > 0 ) { + if( mvOccupied->SecuritySystem.Status != s_off ) { if( fBlinkTimer > fCzuwakBlink ) fBlinkTimer = -fCzuwakBlink; else @@ -6010,9 +6047,10 @@ bool TTrain::Update( double const Deltatime ) || (true == mvControlled->Mains) ) ? true : false ) ); - // NOTE: 'off' variant uses the same test, but opposite resulting states btLampkaWylSzybkiOff.Turn( - ( ( ( m_linebreakerstate == 2 ) + ( ( ( mvControlled->MainsInitTimeCountdown > 0.0 ) +// || ( fHVoltage == 0.0 ) + || ( m_linebreakerstate == 2 ) || ( true == mvControlled->Mains ) ) ? false : true ) ); @@ -6030,18 +6068,18 @@ bool TTrain::Update( double const Deltatime ) ( true == mvControlled->ResistorsFlagCheck() ) || ( mvControlled->MainCtrlActualPos == 0 ) ); // do EU04 - if( mvControlled->StLinFlag ) { - btLampkaStyczn.Turn( false ); + btLampkaStyczn.Turn( + mvControlled->StLinFlag ? + false : + mvOccupied->BrakePress < 1.0 ); // mozna prowadzic rozruch + + if( ( ( mvControlled->ActiveCab == 1 ) && ( TestFlag( mvControlled->Couplers[ end::rear ].CouplingFlag, coupling::control ) ) ) + || ( ( mvControlled->ActiveCab == -1 ) && ( TestFlag( mvControlled->Couplers[ end::front ].CouplingFlag, coupling::control ) ) ) ) { + btLampkaUkrotnienie.Turn( true ); } else { - // mozna prowadzic rozruch - btLampkaStyczn.Turn( mvOccupied->BrakePress < 1.0 ); - } - if( ( ( TestFlag( mvControlled->Couplers[ end::rear ].CouplingFlag, coupling::control ) ) && ( mvControlled->CabNo == 1 ) ) - || ( ( TestFlag( mvControlled->Couplers[ end::front ].CouplingFlag, coupling::control ) ) && ( mvControlled->CabNo == -1 ) ) ) - btLampkaUkrotnienie.Turn( true ); - else btLampkaUkrotnienie.Turn( false ); + } // if // ((TestFlag(mvControlled->BrakeStatus,+b_Rused+b_Ractive)))//Lampka drugiego stopnia hamowania @@ -6128,8 +6166,8 @@ bool TTrain::Update( double const Deltatime ) btLampkaRadioStop.Turn( mvOccupied->Radio && mvOccupied->RadioStopFlag ); btLampkaHamulecReczny.Turn(mvOccupied->ManualBrakePos > 0); // NBMX wrzesien 2003 - drzwi oraz sygnał odjazdu - btLampkaDoorLeft.Turn( DynamicObject->Mechanik->IsAnyDoorOpen[ ( mvOccupied->ActiveCab == 1 ? side::left : side::right ) ] ); - btLampkaDoorRight.Turn( DynamicObject->Mechanik->IsAnyDoorOpen[ ( mvOccupied->ActiveCab == 1 ? side::right : side::left ) ] ); + btLampkaDoorLeft.Turn( DynamicObject->Mechanik->IsAnyDoorOpen[ ( cab_to_end() == end::front ? side::left : side::right ) ] ); + btLampkaDoorRight.Turn( DynamicObject->Mechanik->IsAnyDoorOpen[ ( cab_to_end() == end::front ? side::right : side::left ) ] ); btLampkaDoors.Turn( DynamicObject->Mechanik->IsAnyDoorOpen[ side::right ] || DynamicObject->Mechanik->IsAnyDoorOpen[ side::left ] ); btLampkaBlokadaDrzwi.Turn( mvOccupied->Doors.is_locked ); btLampkaDoorLockOff.Turn( false == mvOccupied->Doors.lock_enabled ); @@ -6160,6 +6198,7 @@ bool TTrain::Update( double const Deltatime ) btLampkaMotorBlowers.Turn( ( mvControlled->MotorBlowers[ end::front ].is_active ) && ( mvControlled->MotorBlowers[ end::rear ].is_active ) ); btLampkaCoolingFans.Turn( mvControlled->RventRot > 1.0 ); btLampkaTempomat.Turn( mvControlled->ScndCtrlPos > 0 ); + btLampkaDistanceCounter.Turn( m_distancecounter >= 0.f ); // universal devices state indicators for( auto idx = 0; idx < btUniversals.size(); ++idx ) { btUniversals[ idx ].Turn( ggUniversals[ idx ].GetValue() > 0.5 ); @@ -6224,6 +6263,7 @@ bool TTrain::Update( double const Deltatime ) btLampkaMotorBlowers.Turn( false ); btLampkaCoolingFans.Turn( false ); btLampkaTempomat.Turn( false ); + btLampkaDistanceCounter.Turn( false ); // universal devices state indicators for( auto &universal : btUniversals ) { universal.Turn( false ); @@ -6231,10 +6271,8 @@ bool TTrain::Update( double const Deltatime ) } { // yB - wskazniki drugiego czlonu - TDynamicObject *tmp; //=mvControlled->mvSecond; //Ra 2014-07: trzeba to - // jeszcze wyjąć z kabiny... + TDynamicObject *tmp { nullptr }; //=mvControlled->mvSecond; //Ra 2014-07: trzeba to jeszcze wyjąć z kabiny... // Ra 2014-07: no nie ma potrzeby szukać tego w każdej klatce - tmp = NULL; if ((TestFlag(mvControlled->Couplers[1].CouplingFlag, ctrain_controll)) && (mvOccupied->ActiveCab > 0)) tmp = DynamicObject->NextConnected(); @@ -6248,7 +6286,10 @@ bool TTrain::Update( double const Deltatime ) auto const *mover { tmp->MoverParameters }; btLampkaWylSzybkiB.Turn( mover->Mains ); - btLampkaWylSzybkiBOff.Turn( false == mover->Mains ); + btLampkaWylSzybkiBOff.Turn( + ( false == mover->Mains ) + && ( mover->MainsInitTimeCountdown <= 0.0 ) + /*&& ( fHVoltage != 0.0 )*/ ); btLampkaOporyB.Turn(mover->ResistorsFlagCheck()); btLampkaBezoporowaB.Turn( @@ -6310,10 +6351,13 @@ bool TTrain::Update( double const Deltatime ) if( ggJointCtrl.SubModel != nullptr ) { // joint master controller moves forward to adjust power and backward to adjust brakes auto const brakerangemultiplier { + /* NOTE: scaling disabled as it was conflicting with associating sounds with control positions ( mvControlled->CoupledCtrl ? mvControlled->MainCtrlPosNo + mvControlled->ScndCtrlPosNo : mvControlled->MainCtrlPosNo ) - / static_cast(LocalBrakePosNo) }; + / static_cast(LocalBrakePosNo) + */ + 1 }; ggJointCtrl.UpdateValue( ( mvOccupied->LocalBrakePosA > 0.0 ? mvOccupied->LocalBrakePosA * LocalBrakePosNo * -1 * brakerangemultiplier : mvControlled->CoupledCtrl ? double( mvControlled->MainCtrlPos + mvControlled->ScndCtrlPos ) : @@ -6363,6 +6407,7 @@ bool TTrain::Update( double const Deltatime ) ggScndCtrl.Update(); } ggScndCtrlButton.Update(); + ggDistanceCounterButton.Update(); if (ggDirKey.SubModel) { if (mvControlled->TrainType != dt_EZT) ggDirKey.UpdateValue( @@ -6501,6 +6546,7 @@ bool TTrain::Update( double const Deltatime ) ggUniveralBrakeButton3.Update(); ggAntiSlipButton.Update(); ggSandButton.Update(); + ggAutoSandButton.Update(); ggFuseButton.Update(); ggConverterFuseButton.Update(); ggStLinOffButton.Update(); @@ -6510,6 +6556,7 @@ bool TTrain::Update( double const Deltatime ) ggRadioChannelNext.Update(); ggRadioStop.Update(); ggRadioTest.Update(); + ggRadioCall3.Update(); ggDepartureSignalButton.Update(); ggPantFrontButton.Update(); @@ -6550,8 +6597,8 @@ bool TTrain::Update( double const Deltatime ) ggHelperButton.UpdateValue( DynamicObject->Mechanik->HelperState ); } ggHelperButton.Update(); - - ggSpeedControlIncreaseButton.Update(); + + ggSpeedControlIncreaseButton.Update(); ggSpeedControlDecreaseButton.Update(); ggSpeedControlPowerIncreaseButton.Update(); ggSpeedControlDecreaseButton.Update(); @@ -6666,7 +6713,7 @@ bool TTrain::Update( double const Deltatime ) && ( false == FreeFlyModeFlag ) ) { // don't bother if we're outside fScreenTimer = 0.f; for( auto const &screen : m_screens ) { - Application.request( { screen.first, GetTrainState(), GfxRenderer.Texture( screen.second ).id } ); + Application.request( { screen.first, GetTrainState(), GfxRenderer->Texture( screen.second ).id } ); } } // sounds @@ -6863,7 +6910,7 @@ TTrain::update_sounds( double const Deltatime ) { } // McZapkie-141102: SHP i czuwak, TODO: sygnalizacja kabinowa - if (mvOccupied->SecuritySystem.Status > 0) { + if (mvOccupied->SecuritySystem.Status != s_off ) { // hunter-091012: rozdzielenie alarmow if( TestFlag( mvOccupied->SecuritySystem.Status, s_CAalarm ) || TestFlag( mvOccupied->SecuritySystem.Status, s_SHPalarm ) ) { @@ -6906,6 +6953,28 @@ TTrain::update_sounds( double const Deltatime ) { else if( fTachoCount < 1.f ) { dsbHasler.stop(); } + + // power-reliant sounds + if( mvControlled->Battery || mvControlled->ConverterFlag ) { + // distance meter alert + auto const *owner { ( + DynamicObject->ctOwner != nullptr ? + DynamicObject->ctOwner : + DynamicObject->Mechanik ) }; + if( m_distancecounter > owner->fLength ) { + // play assigned sound if the train travelled its full length since meter activation + // TBD: check all combinations of directions and active cab + m_distancecounter = -1.f; // turn off the meter after its task is done + m_distancecounterclear + .pitch( m_distancecounterclear.m_frequencyoffset + m_distancecounterclear.m_frequencyfactor ) + .gain( m_distancecounterclear.m_amplitudeoffset + m_distancecounterclear.m_amplitudefactor ) + .play( sound_flags::exclusive ); + } + } + else { + // stop power-reliant sounds if power is cut + m_distancecounterclear.stop(); + } } void TTrain::update_sounds_runningnoise( sound_source &Sound ) { @@ -6993,6 +7062,14 @@ void TTrain::update_sounds_radio() { } } +void TTrain::add_distance( double const Distance ) { + + auto const meterenabled { ( true == ( m_distancecounter >= 0 ) ) && ( mvControlled->Battery || mvControlled->ConverterFlag ) }; + + if( true == meterenabled ) { m_distancecounter += Distance * Occupied()->ActiveCab; } + else { m_distancecounter = -1.f; } +} + bool TTrain::CabChange(int iDirection) { // McZapkie-090902: zmiana kabiny 1->0->2 i z powrotem if( ( DynamicObject->Mechanik == nullptr ) @@ -7082,6 +7159,12 @@ bool TTrain::LoadMMediaFile(std::string const &asFileName) dsbSlipAlarm.deserialize( parser, sound_type::single ); dsbSlipAlarm.owner( DynamicObject ); } + else if (token == "distancecounter:") + { + // distance meter 'good to go' sound + m_distancecounterclear.deserialize( parser, sound_type::single ); + m_distancecounterclear.owner( DynamicObject ); + } else if (token == "tachoclock:") { // cykanie rejestratora: @@ -7207,7 +7290,7 @@ bool TTrain::InitializeCab(int NewCabNo, std::string const &asFileName) &dsbSwitch, &dsbPneumaticSwitch, &rsHiss, &rsHissU, &rsHissE, &rsHissX, &rsHissT, &rsSBHiss, &rsSBHissU, &rsFadeSound, &rsRunningNoise, &rsHuntingNoise, - &dsbHasler, &dsbBuzzer, &dsbSlipAlarm, &m_radiosound, &m_radiostop + &dsbHasler, &dsbBuzzer, &dsbSlipAlarm, &m_distancecounterclear, &m_radiosound, &m_radiostop }; for( auto sound : sounds ) { sound->offset( nullvector ); @@ -7437,7 +7520,7 @@ bool TTrain::InitializeCab(int NewCabNo, std::string const &asFileName) ( substr_path(renderername).empty() ? // supply vehicle folder as path if none is provided DynamicObject->asBaseDir + renderername : renderername ), - GfxRenderer.Material( material ).texture1 ); + GfxRenderer->Material( material ).texture1 ); } // btLampkaUnknown.Init("unknown",mdKabina,false); } while (token != ""); @@ -7467,6 +7550,10 @@ bool TTrain::InitializeCab(int NewCabNo, std::string const &asFileName) if( dsbBuzzer.offset() == nullvector ) { dsbBuzzer.offset( btLampkaCzuwaka.model_offset() ); } + // HACK: alerter is likely to be located somewhere near computer displays + if( m_distancecounterclear.offset() == nullvector ) { + m_distancecounterclear.offset( btLampkaCzuwaka.model_offset() ); + } // radio has two potential items which can provide the position if( m_radiosound.offset() == nullvector ) { m_radiosound.offset( btLampkaRadio.model_offset() ); @@ -7687,6 +7774,7 @@ void TTrain::clear_cab_controls() ggMainCtrlAct.Clear(); ggScndCtrl.Clear(); ggScndCtrlButton.Clear(); + ggDistanceCounterButton.Clear(); ggDirKey.Clear(); ggBrakeCtrl.Clear(); ggLocalBrake.Clear(); @@ -7708,6 +7796,7 @@ void TTrain::clear_cab_controls() ggUniveralBrakeButton2.Clear(); ggUniveralBrakeButton3.Clear(); ggSandButton.Clear(); + ggAutoSandButton.Clear(); ggAntiSlipButton.Clear(); ggHornButton.Clear(); ggHornLowButton.Clear(); @@ -7742,6 +7831,7 @@ void TTrain::clear_cab_controls() ggRadioChannelNext.Clear(); ggRadioStop.Clear(); ggRadioTest.Clear(); + ggRadioCall3.Clear(); ggDoorLeftPermitButton.Clear(); ggDoorRightPermitButton.Clear(); ggDoorPermitPresetButton.Clear(); @@ -7876,6 +7966,7 @@ void TTrain::clear_cab_controls() btLampkaMotorBlowers.Clear(); btLampkaCoolingFans.Clear(); btLampkaTempomat.Clear(); + btLampkaDistanceCounter.Clear(); ggLeftLightButton.Clear(); ggRightLightButton.Clear(); @@ -8009,21 +8100,18 @@ void TTrain::set_cab_controls( int const Cab ) { // lights ggLightsButton.PutValue( mvOccupied->LightsPos - 1 ); - int const vehicleside = - ( mvOccupied->ActiveCab == 1 ? - end::front : - end::rear ); + auto const vehicleend { cab_to_end() }; - if( ( DynamicObject->iLights[ vehicleside ] & light::headlight_left ) != 0 ) { + if( ( DynamicObject->iLights[ vehicleend ] & light::headlight_left ) != 0 ) { ggLeftLightButton.PutValue( 1.f ); } - if( ( DynamicObject->iLights[ vehicleside ] & light::headlight_right ) != 0 ) { + if( ( DynamicObject->iLights[ vehicleend ] & light::headlight_right ) != 0 ) { ggRightLightButton.PutValue( 1.f ); } - if( ( DynamicObject->iLights[ vehicleside ] & light::headlight_upper ) != 0 ) { + if( ( DynamicObject->iLights[ vehicleend ] & light::headlight_upper ) != 0 ) { ggUpperLightButton.PutValue( 1.f ); } - if( ( DynamicObject->iLights[ vehicleside ] & light::redmarker_left ) != 0 ) { + if( ( DynamicObject->iLights[ vehicleend ] & light::redmarker_left ) != 0 ) { if( ggLeftEndLightButton.SubModel != nullptr ) { ggLeftEndLightButton.PutValue( 1.f ); } @@ -8031,7 +8119,7 @@ void TTrain::set_cab_controls( int const Cab ) { ggLeftLightButton.PutValue( -1.f ); } } - if( ( DynamicObject->iLights[ vehicleside ] & light::redmarker_right ) != 0 ) { + if( ( DynamicObject->iLights[ vehicleend ] & light::redmarker_right ) != 0 ) { if( ggRightEndLightButton.SubModel != nullptr ) { ggRightEndLightButton.PutValue( 1.f ); } @@ -8064,15 +8152,15 @@ void TTrain::set_cab_controls( int const Cab ) { 0.f ) ); // doors permits if( ggDoorLeftPermitButton.type() != TGaugeType::push ) { - ggDoorLeftPermitButton.PutValue( mvOccupied->Doors.instances[ ( mvOccupied->ActiveCab == 1 ? side::left : side::right ) ].open_permit ? 1.f : 0.f ); + ggDoorLeftPermitButton.PutValue( mvOccupied->Doors.instances[ ( cab_to_end() == end::front ? side::left : side::right ) ].open_permit ? 1.f : 0.f ); } if( ggDoorRightPermitButton.type() != TGaugeType::push ) { - ggDoorRightPermitButton.PutValue( mvOccupied->Doors.instances[ ( mvOccupied->ActiveCab == 1 ? side::right : side::left ) ].open_permit ? 1.f : 0.f ); + ggDoorRightPermitButton.PutValue( mvOccupied->Doors.instances[ ( cab_to_end() == end::front ? side::right : side::left ) ].open_permit ? 1.f : 0.f ); } ggDoorPermitPresetButton.PutValue( mvOccupied->Doors.permit_preset ); // door controls - ggDoorLeftButton.PutValue( mvOccupied->Doors.instances[ ( mvOccupied->ActiveCab == 1 ? side::left : side::right ) ].is_closed ? 0.f : 1.f ); - ggDoorRightButton.PutValue( mvOccupied->Doors.instances[ ( mvOccupied->ActiveCab == 1 ? side::right : side::left ) ].is_closed ? 0.f : 1.f ); + ggDoorLeftButton.PutValue( mvOccupied->Doors.instances[ ( cab_to_end() == end::front ? side::left : side::right ) ].is_closed ? 0.f : 1.f ); + ggDoorRightButton.PutValue( mvOccupied->Doors.instances[ ( cab_to_end() == end::front ? side::right : side::left ) ].is_closed ? 0.f : 1.f ); // door lock ggDoorSignallingButton.PutValue( mvOccupied->Doors.lock_enabled ? @@ -8190,7 +8278,14 @@ void TTrain::set_cab_controls( int const Cab ) { 1.f : 0.f ); } - + // sandbox + if( ggAutoSandButton.type() != TGaugeType::push ) { + ggAutoSandButton.PutValue( + mvControlled->SandDoseAutoAllow ? + 1.f : + 0.f ); + } + // we reset all indicators, as they're set during the update pass // TODO: when cleaning up break setting indicator state into a separate function, so we can reuse it } @@ -8233,6 +8328,7 @@ bool TTrain::initialize_button(cParser &Parser, std::string const &Label, int co { "i-motorblowers:", btLampkaMotorBlowers }, { "i-coolingfans:", btLampkaCoolingFans }, { "i-tempomat:", btLampkaTempomat }, + { "i-distancecounter:", btLampkaDistanceCounter }, { "i-trainheating:", btLampkaOgrzewanieSkladu }, { "i-security_aware:", btLampkaCzuwaka }, { "i-security_cabsignal:", btLampkaSHP }, @@ -8302,9 +8398,9 @@ bool TTrain::initialize_button(cParser &Parser, std::string const &Label, int co } } // TODO: move viable dedicated lights to the automatic light array - std::unordered_map const autolights = { - { "i-doorpermit_left:", &mvOccupied->Doors.instances[ ( mvOccupied->ActiveCab == 1 ? side::left : side::right ) ].open_permit }, - { "i-doorpermit_right:", &mvOccupied->Doors.instances[ ( mvOccupied->ActiveCab == 1 ? side::right : side::left ) ].open_permit }, + std::unordered_map const autolights = { + { "i-doorpermit_left:", &mvOccupied->Doors.instances[ ( cab_to_end() == end::front ? side::left : side::right ) ].open_permit }, + { "i-doorpermit_right:", &mvOccupied->Doors.instances[ ( cab_to_end() == end::front ? side::right : side::left ) ].open_permit }, { "i-doorstep:", &mvOccupied->Doors.step_enabled } }; { @@ -8382,7 +8478,7 @@ bool TTrain::initialize_gauge(cParser &Parser, std::string const &Label, int con { "universalbrake2_bt:", ggUniveralBrakeButton2 }, { "universalbrake3_bt:", ggUniveralBrakeButton3 }, { "sand_bt:", ggSandButton }, - { "autosandallow_sw:", ggAutoSandAllow }, + { "autosandallow_sw:", ggAutoSandButton }, { "antislip_bt:", ggAntiSlipButton }, { "horn_bt:", ggHornButton }, { "hornlow_bt:", ggHornLowButton }, @@ -8441,6 +8537,7 @@ bool TTrain::initialize_gauge(cParser &Parser, std::string const &Label, int con { "radiochannelnext_sw:", ggRadioChannelNext }, { "radiostop_sw:", ggRadioStop }, { "radiotest_sw:", ggRadioTest }, + { "radiocall3_sw:", ggRadioCall3 }, { "pantfront_sw:", ggPantFrontButton }, { "pantrear_sw:", ggPantRearButton }, { "pantfrontoff_sw:", ggPantFrontButtonOff }, @@ -8461,6 +8558,7 @@ bool TTrain::initialize_gauge(cParser &Parser, std::string const &Label, int con { "cablightdim_sw:", ggCabLightDimButton }, { "battery_sw:", ggBatteryButton }, { "tempomat_sw:", ggScndCtrlButton }, + { "distancecounter_sw:", ggDistanceCounterButton }, { "universal0:", ggUniversals[ 0 ] }, { "universal1:", ggUniversals[ 1 ] }, { "universal2:", ggUniversals[ 2 ] }, @@ -8471,7 +8569,7 @@ bool TTrain::initialize_gauge(cParser &Parser, std::string const &Label, int con { "universal7:", ggUniversals[ 7 ] }, { "universal8:", ggUniversals[ 8 ] }, { "universal9:", ggUniversals[ 9 ] }, - { "speedinc_bt:", ggSpeedControlIncreaseButton }, + { "speedinc_bt:", ggSpeedControlIncreaseButton }, { "speeddec_bt:", ggSpeedControlDecreaseButton }, { "speedctrlpowerinc_bt:", ggSpeedControlPowerIncreaseButton }, { "speedctrlpowerdec_bt:", ggSpeedControlPowerDecreaseButton }, @@ -8485,7 +8583,7 @@ bool TTrain::initialize_gauge(cParser &Parser, std::string const &Label, int con { "speedbutton7:", ggSpeedCtrlButtons[ 7 ] }, { "speedbutton8:", ggSpeedCtrlButtons[ 8 ] }, { "speedbutton9:", ggSpeedCtrlButtons[ 9 ] } - }; + }; { auto lookup = gauges.find( Label ); if( lookup != gauges.end() ) { @@ -8779,6 +8877,18 @@ bool TTrain::initialize_gauge(cParser &Parser, std::string const &Label, int con gauge.AssignDouble(&mvControlled->AnPos); m_controlmapper.insert( gauge, "shuntmodepower:" ); } + else if( Label == "heatingvoltage:" ) { + if( mvControlled->HeatingPowerSource.SourceType == TPowerSource::Generator ) { + auto &gauge = Cabine[ Cabindex ].Gauge( -1 ); // pierwsza wolna gałka + gauge.Load( Parser, DynamicObject ); + gauge.AssignDouble( &(mvControlled->HeatingPowerSource.EngineGenerator.voltage) ); + } + } + else if( Label == "heatingcurrent:" ) { + auto &gauge = Cabine[ Cabindex ].Gauge( -1 ); // pierwsza wolna gałka + gauge.Load( Parser, DynamicObject ); + gauge.AssignDouble( &( mvControlled->TotalCurrent ) ); + } else { // failed to match the label diff --git a/Train.h b/Train.h index c84afd9e..cc5b949d 100644 --- a/Train.h +++ b/Train.h @@ -69,8 +69,10 @@ public: find( TSubModel const *Control ) const; }; -class TTrain -{ +class TTrain { + + friend class drivingaid_panel; + public: // types struct state_t { @@ -88,6 +90,7 @@ class TTrain std::uint8_t ventilator_overload; std::uint8_t motor_overload_threshold; std::uint8_t train_heating; + std::uint8_t cab; std::uint8_t recorder_braking; std::uint8_t recorder_power; std::uint8_t alerter_sound; @@ -98,13 +101,15 @@ class TTrain float brake_pressure; float hv_voltage; std::array hv_current; + float lv_voltage; }; +// constructors + TTrain(); // methods bool CabChange(int iDirection); bool ShowNextCurrent; // pokaz przd w podlaczonej lokomotywie (ET41) bool InitializeCab(int NewCabNo, std::string const &asFileName); - TTrain(); // McZapkie-010302 bool Init(TDynamicObject *NewDynamicObject, bool e3d = false); @@ -113,6 +118,7 @@ class TTrain inline std::string GetLabel( TSubModel const *Control ) const { return m_controlmapper.find( Control ); } void UpdateCab(); bool Update( double const Deltatime ); + void add_distance( double const Distance ); void SetLights(); // McZapkie-310302: ladowanie parametrow z pliku bool LoadMMediaFile(std::string const &asFileName); @@ -151,6 +157,12 @@ class TTrain void update_sounds( double const Deltatime ); void update_sounds_runningnoise( sound_source &Sound ); void update_sounds_radio(); + inline + end cab_to_end() const { + return ( + iCabn == 2 ? + end::rear : + end::front ); } // command handlers // NOTE: we're currently using universal handlers and static handler map but it may be beneficial to have these implemented on individual class instance basis @@ -350,6 +362,7 @@ class TTrain static void OnCommand_radiochanneldecrease( TTrain *Train, command_data const &Command ); static void OnCommand_radiostopsend( TTrain *Train, command_data const &Command ); static void OnCommand_radiostoptest( TTrain *Train, command_data const &Command ); + static void OnCommand_radiocall3send( TTrain *Train, command_data const &Command ); static void OnCommand_cabchangeforward( TTrain *Train, command_data const &Command ); static void OnCommand_cabchangebackward( TTrain *Train, command_data const &Command ); static void OnCommand_generictoggle( TTrain *Train, command_data const &Command ); @@ -360,6 +373,7 @@ class TTrain static void OnCommand_springbrakeshutoffenable(TTrain *Train, command_data const &Command); static void OnCommand_springbrakeshutoffdisable(TTrain *Train, command_data const &Command); static void OnCommand_springbrakerelease(TTrain *Train, command_data const &Command); + static void OnCommand_distancecounteractivate( TTrain *Train, command_data const &Command ); static void OnCommand_speedcontrolincrease(TTrain *Train, command_data const &Command); static void OnCommand_speedcontroldecrease(TTrain *Train, command_data const &Command); static void OnCommand_speedcontrolpowerincrease(TTrain *Train, command_data const &Command); @@ -429,7 +443,7 @@ public: // reszta może by?publiczna TGauge ggUniveralBrakeButton2; TGauge ggUniveralBrakeButton3; TGauge ggSandButton; // guzik piasecznicy - TGauge ggAutoSandAllow; // przełącznik piasecznicy + TGauge ggAutoSandButton; // przełącznik piasecznicy TGauge ggAntiSlipButton; TGauge ggFuseButton; TGauge ggConverterFuseButton; // hunter-261211: przycisk odblokowania nadmiarowego przetwornic i ogrzewania @@ -440,6 +454,7 @@ public: // reszta może by?publiczna TGauge ggRadioChannelNext; TGauge ggRadioTest; TGauge ggRadioStop; + TGauge ggRadioCall3; TGauge ggUpperLightButton; TGauge ggLeftLightButton; TGauge ggRightLightButton; @@ -472,14 +487,14 @@ public: // reszta może by?publiczna TGauge ggHelperButton; TGauge ggNextCurrentButton; - // yB 191005 - tempomat + // yB 191005 - tempomat TGauge ggSpeedControlIncreaseButton; TGauge ggSpeedControlDecreaseButton; TGauge ggSpeedControlPowerIncreaseButton; TGauge ggSpeedControlPowerDecreaseButton; std::array ggSpeedCtrlButtons; // NOTE: temporary arrangement until we have dynamically built control table - std::array ggUniversals; // NOTE: temporary arrangement until we have dynamically built control table + std::array ggUniversals; // NOTE: temporary arrangement until we have dynamically built control table TGauge ggInstrumentLightButton; TGauge ggDashboardLightButton; @@ -529,6 +544,8 @@ public: // reszta może by?publiczna TGauge ggMotorBlowersRearButton; // rear traction motor fan switch TGauge ggMotorBlowersAllOffButton; // motor fans shutdown switch + TGauge ggDistanceCounterButton; // distance meter activation button + TButton btLampkaPoslizg; TButton btLampkaStyczn; TButton btLampkaNadmPrzetw; @@ -624,6 +641,7 @@ public: // reszta może by?publiczna TButton btLampkaMotorBlowers; TButton btLampkaCoolingFans; TButton btLampkaTempomat; + TButton btLampkaDistanceCounter; TButton btCabLight; // hunter-171012: lampa oswietlajaca kabine // Ra 2013-12: wirtualne "lampki" do odbijania na haslerze w PoKeys @@ -656,6 +674,7 @@ public: // reszta może by?publiczna sound_source m_radiosound { sound_placement::internal, 2 * EU07_SOUND_CABCONTROLSCUTOFFRANGE }; // cached template for radio messages std::vector>> m_radiomessages; // list of currently played radio messages sound_source m_radiostop { sound_placement::internal, EU07_SOUND_CABCONTROLSCUTOFFRANGE }; + sound_source m_distancecounterclear { sound_placement::internal, EU07_SOUND_CABCONTROLSCUTOFFRANGE }; // distance meter 'good to go' alert /* int iCabLightFlag; // McZapkie:120503: oswietlenie kabiny (0: wyl, 1: przyciemnione, 2: pelne) bool bCabLight; // hunter-091012: czy swiatlo jest zapalone? @@ -663,7 +682,7 @@ public: // reszta może by?publiczna */ // McZapkie: opis kabiny - obszar poruszania sie mechanika oraz zajetosc std::array Cabine; // przedzial maszynowy, kabina 1 (A), kabina 2 (B) - int iCabn { 0 }; + int iCabn { 0 }; // 0: mid, 1: front, 2: rear // McZapkie: do poruszania sie po kabinie Math3D::vector3 pMechSittingPosition; // ABu 180404 Math3D::vector3 MirrorPosition( bool lewe ); @@ -709,6 +728,7 @@ private: float m_mastercontrollerreturndelay { 0.f }; int iRadioChannel { 1 }; // numer aktualnego kana?u radiowego std::vector> m_screens; + float m_distancecounter { -1.f }; // distance traveled since meter was activated or -1 if inactive public: float fPress[20][3]; // cisnienia dla wszystkich czlonow diff --git a/TrkFoll.cpp b/TrkFoll.cpp index 77e4e2e3..d7f2aebe 100644 --- a/TrkFoll.cpp +++ b/TrkFoll.cpp @@ -95,7 +95,7 @@ bool TTrackFollower::Move(double fDistance, bool bPrimary) { // przesuwanie wózka po torach o odległość (fDistance), z wyzwoleniem eventów // bPrimary=true - jest pierwszą osią w pojeździe, czyli generuje eventy i przepisuje pojazd // Ra: zwraca false, jeśli pojazd ma być usunięty - auto const ismoving { ( std::abs( fDistance ) > 0.01 ) && ( Owner->GetVelocity() > 0.01 ) }; + auto const ismoving { /* ( std::abs( fDistance ) > 0.01 ) && */ ( Owner->GetVelocity() > 0.01 ) }; fDistance *= fDirection; // dystans mnożnony przez kierunek double s; // roboczy dystans double dir; // zapamiętany kierunek do sprawdzenia, czy się zmienił @@ -116,7 +116,7 @@ bool TTrackFollower::Move(double fDistance, bool bPrimary) if( false == ismoving ) { //McZapkie-140602: wyzwalanie zdarzenia gdy pojazd stoi if( ( Owner->Mechanik != nullptr ) - && ( Owner->Mechanik->Primary() ) ) { + && ( Owner->Mechanik->primary() ) ) { // tylko dla jednego członu pCurrentTrack->QueueEvents( pCurrentTrack->m_events0, Owner ); } @@ -127,7 +127,7 @@ bool TTrackFollower::Move(double fDistance, bool bPrimary) if( SetFlag( iEventFlag, -1 ) ) { // zawsze zeruje flagę sprawdzenia, jak mechanik dosiądzie, to się nie wykona if( ( Owner->Mechanik != nullptr ) - && ( Owner->Mechanik->Primary() ) ) { + && ( Owner->Mechanik->primary() ) ) { // tylko dla jednego członu // McZapkie-280503: wyzwalanie event tylko dla pojazdow z obsada pCurrentTrack->QueueEvents( pCurrentTrack->m_events1, Owner ); @@ -143,7 +143,7 @@ bool TTrackFollower::Move(double fDistance, bool bPrimary) if( SetFlag( iEventFlag, -2 ) ) { // zawsze ustawia flagę sprawdzenia, jak mechanik dosiądzie, to się nie wykona if( ( Owner->Mechanik != nullptr ) - && ( Owner->Mechanik->Primary() ) ) { + && ( Owner->Mechanik->primary() ) ) { // tylko dla jednego członu pCurrentTrack->QueueEvents( pCurrentTrack->m_events2, Owner ); } diff --git a/application.cpp b/application.cpp index 4bab5455..13bbc0f4 100644 --- a/application.cpp +++ b/application.cpp @@ -16,6 +16,7 @@ http://mozilla.org/MPL/2.0/. #include "Globals.h" #include "simulation.h" #include "Train.h" +#include "dictionary.h" #include "sceneeditor.h" #include "renderer.h" #include "uilayer.h" @@ -42,6 +43,9 @@ http://mozilla.org/MPL/2.0/. #pragma comment (lib, "dbghelp.lib") #pragma comment (lib, "version.lib") +extern "C" { _declspec( dllexport ) DWORD AmdPowerXpressRequestHighPerformance = 0x00000001; } +extern "C" { _declspec( dllexport ) DWORD NvOptimusEnablement = 0x00000001; } + eu07_application Application; ui_layer uilayerstaticinitializer; @@ -128,6 +132,9 @@ eu07_application::init( int Argc, char *Argv[] ) { if( ( result = init_audio() ) != 0 ) { return result; } + if( ( result = init_data() ) != 0 ) { + return result; + } m_taskqueue.init(); if( ( result = init_modes() ) != 0 ) { return result; @@ -143,7 +150,7 @@ eu07_application::run() { while( ( false == glfwWindowShouldClose( m_windows.front() ) ) && ( false == m_modestack.empty() ) && ( true == m_modes[ m_modestack.top() ]->update() ) - && ( true == GfxRenderer.Render() ) ) { + && ( true == GfxRenderer->Render() ) ) { glfwPollEvents(); m_modes[ m_modestack.top() ]->on_event_poll(); } @@ -505,7 +512,9 @@ eu07_application::init_gfx() { return -1; } - if( ( false == GfxRenderer.Init( m_windows.front() ) ) + GfxRenderer = std::make_unique(); + + if( ( false == GfxRenderer->Init( m_windows.front() ) ) || ( false == ui_layer::init( m_windows.front() ) ) ) { return -1; } @@ -523,6 +532,23 @@ eu07_application::init_audio() { return 0; } +int +eu07_application::init_data() { + + // HACK: grab content of the first {} block in load_unit_weights using temporary parser, then parse it normally. on any error our weight list will be empty string + auto loadweights { cParser( cParser( "data/load_weights.txt", cParser::buffer_FILE ).getToken( true, "{}" ), cParser::buffer_TEXT ) }; + while( true == loadweights.getTokens( 2 ) ) { + std::pair weightpair; + loadweights + >> weightpair.first + >> weightpair.second; + weightpair.first.erase( weightpair.first.end() - 1 ); // trim trailing ':' from the key + simulation::Weights.emplace( weightpair.first, weightpair.second ); + } + + return 0; +} + int eu07_application::init_modes() { diff --git a/application.h b/application.h index 789fd594..86b9993f 100644 --- a/application.h +++ b/application.h @@ -84,6 +84,7 @@ private: void init_callbacks(); int init_gfx(); int init_audio(); + int init_data(); int init_modes(); // members modeptr_array m_modes { nullptr }; // collection of available application behaviour modes diff --git a/audiorenderer.cpp b/audiorenderer.cpp index c9689fbf..5f9ed856 100644 --- a/audiorenderer.cpp +++ b/audiorenderer.cpp @@ -169,7 +169,7 @@ openal_source::sync_with( sound_properties const &State ) { || ( false == is_in_range ) ) { // if the emitter is outside of its nominal hearing range or was outside of it during last check // adjust the volume to a suitable fraction of nominal value - auto const fadedistance { sound_range * 0.75 }; + auto const fadedistance { sound_range * 0.75f }; auto const rangefactor { interpolate( 1.f, 0.f, diff --git a/command.cpp b/command.cpp index faffaa23..81169f56 100644 --- a/command.cpp +++ b/command.cpp @@ -132,7 +132,8 @@ commanddescription_sequence Commands_descriptions = { { "radiochanneldecrease", command_target::vehicle }, { "radiostopsend", command_target::vehicle }, { "radiostoptest", command_target::vehicle }, - // TBD, TODO: make cab change controls entity-centric + { "radiocall3send", command_target::vehicle }, +// TBD, TODO: make cab change controls entity-centric { "cabchangeforward", command_target::vehicle }, { "cabchangebackward", command_target::vehicle }, @@ -244,7 +245,8 @@ commanddescription_sequence Commands_descriptions = { { "springbrakeshutoffenable", command_target::vehicle }, { "springbrakeshutoffdisable", command_target::vehicle }, { "springbrakerelease", command_target::vehicle }, - { "speedcontrolincrease", command_target::vehicle }, + { "distancecounteractivate", command_target::vehicle }, + { "speedcontrolincrease", command_target::vehicle }, { "speedcontroldecrease", command_target::vehicle }, { "speedcontrolpowerincrease", command_target::vehicle }, { "speedcontrolpowerdecrease", command_target::vehicle }, diff --git a/command.h b/command.h index 2d26d895..6050e03b 100644 --- a/command.h +++ b/command.h @@ -126,6 +126,7 @@ enum class user_command { radiochanneldecrease, radiostopsend, radiostoptest, + radiocall3send, cabchangeforward, cabchangebackward, @@ -237,6 +238,7 @@ enum class user_command { springbrakeshutoffenable, springbrakeshutoffdisable, springbrakerelease, + distancecounteractivate, speedcontrolincrease, speedcontroldecrease, speedcontrolpowerincrease, diff --git a/driverkeyboardinput.cpp b/driverkeyboardinput.cpp index 3d8d3a08..849882d6 100644 --- a/driverkeyboardinput.cpp +++ b/driverkeyboardinput.cpp @@ -45,6 +45,9 @@ driverkeyboard_input::default_bindings() { { user_command::independentbrakedecreasefast, GLFW_KEY_KP_7 | keymodifier::shift }, // independentbrakeset, { user_command::independentbrakebailoff, GLFW_KEY_KP_4 }, + // universalbrakebutton1, + // universalbrakebutton2, + // universalbrakebutton3, { user_command::trainbrakeincrease, GLFW_KEY_KP_3 }, { user_command::trainbrakedecrease, GLFW_KEY_KP_9 }, // trainbrakeset, @@ -64,6 +67,9 @@ driverkeyboard_input::default_bindings() { { user_command::alarmchaintoggle, GLFW_KEY_B | keymodifier::shift | keymodifier::control }, { user_command::wheelspinbrakeactivate, GLFW_KEY_KP_ENTER }, { user_command::sandboxactivate, GLFW_KEY_S | keymodifier::shift }, + // autosandboxtoggle, + // autosandboxactivate, + // autosandboxdeactivate, { user_command::reverserincrease, GLFW_KEY_D }, { user_command::reverserdecrease, GLFW_KEY_R }, // reverserforwardhigh, @@ -103,6 +109,9 @@ driverkeyboard_input::default_bindings() { // compressorenable, // compressordisable, { user_command::compressortogglelocal, GLFW_KEY_C | keymodifier::shift }, + // compressorpresetactivatenext, + // compressorpresetactivateprevious, + // compressorpresetactivatedefault, { user_command::motoroverloadrelaythresholdtoggle, GLFW_KEY_F | keymodifier::control }, // motoroverloadrelaythresholdsetlow, // motoroverloadrelaythresholdsethigh, @@ -128,6 +137,7 @@ driverkeyboard_input::default_bindings() { { user_command::radiochanneldecrease, GLFW_KEY_R }, { user_command::radiostopsend, GLFW_KEY_PAUSE | keymodifier::shift | keymodifier::control }, { user_command::radiostoptest, GLFW_KEY_R | keymodifier::shift | keymodifier::control }, + { user_command::radiocall3send, GLFW_KEY_BACKSPACE }, { user_command::cabchangeforward, GLFW_KEY_HOME }, { user_command::cabchangebackward, GLFW_KEY_END }, // viewturn, @@ -228,8 +238,16 @@ driverkeyboard_input::default_bindings() { { user_command::motorblowerstogglefront, GLFW_KEY_N | keymodifier::shift }, { user_command::motorblowerstogglerear, GLFW_KEY_M | keymodifier::shift }, { user_command::motorblowersdisableall, GLFW_KEY_M | keymodifier::control } - // coolingfanstoggle - // tempomattoggle + // coolingfanstoggle, + // tempomattoggle, + // springbraketoggle, + // springbrakeenable, + // springbrakedisable, + // springbrakeshutofftoggle, + // springbrakeshutoffenable, + // springbrakeshutoffdisable, + // springbrakerelease, + // distancecounteractivate }; } diff --git a/drivermode.cpp b/drivermode.cpp index ccbd053b..fa29e622 100644 --- a/drivermode.cpp +++ b/drivermode.cpp @@ -17,6 +17,7 @@ http://mozilla.org/MPL/2.0/. #include "simulationtime.h" #include "simulationenvironment.h" #include "lightarray.h" +#include "particles.h" #include "Train.h" #include "Driver.h" #include "DynObj.h" @@ -235,7 +236,9 @@ driver_mode::update() { simulation::Region->update_sounds(); audio::renderer.update( deltarealtime ); - GfxRenderer.Update( deltarealtime ); + // NOTE: particle system runs on simulation time, but needs actual camera position to determine how to update each particle source + simulation::Particles.update(); + GfxRenderer->Update( deltarealtime ); simulation::is_ready = true; @@ -720,20 +723,36 @@ driver_mode::OnKeyDown(int cKey) { if( tmp != nullptr ) { - if( simulation::Train ) {// jeśli mielismy pojazd - if( simulation::Train->Dynamic()->Mechanik ) { // na skutek jakiegoś błędu może czasem zniknąć - simulation::Train->Dynamic()->Mechanik->TakeControl( true ); // oddajemy dotychczasowy AI - } - } - if( ( true == DebugModeFlag ) || ( tmp->MoverParameters->Vel <= 5.0 ) ) { // works always in debug mode, or for stopped/slow moving vehicles otherwise + if( simulation::Train ) { // jeśli mielismy pojazd + if( simulation::Train->Dynamic()->Mechanik ) { // na skutek jakiegoś błędu może czasem zniknąć + if( ( tmp->ctOwner == simulation::Train->Dynamic()->Mechanik ) + && ( true == Global.ctrlState ) ) { + // if the vehicle we left to the ai controlled the vehicle we're about to take over + // put the ai we left in charge of our old vehicle to sleep + // TODO: remove ctrl key mode once manual cab (de)activation is in place + simulation::Train->Dynamic()->Mechanik->primary( false ); + simulation::Train->Dynamic()->Mechanik->action() = TAction::actSleep; + simulation::Train->Dynamic()->MoverParameters->CabDeactivisation(); + } + simulation::Train->Dynamic()->Mechanik->TakeControl( true ); // oddajemy dotychczasowy AI + } + } + if( simulation::Train == nullptr ) { simulation::Train = new TTrain(); // jeśli niczym jeszcze nie jeździlismy } - if( simulation::Train->Init( tmp ) ) { // przejmujemy sterowanie - simulation::Train->Dynamic()->Mechanik->TakeControl( false ); + if( simulation::Train->Init( tmp ) ) { + // przejmujemy sterowanie + if( true == Global.ctrlState ) { + // make sure we can take over the consist + // TODO: remove ctrl key mode once manual cab (de)activation is in place + simulation::Train->Dynamic()->Mechanik->primary( true ); + simulation::Train->Dynamic()->MoverParameters->CabActivisation(); + } + simulation::Train->Dynamic()->Mechanik->TakeControl( false, true ); } else { SafeDelete( simulation::Train ); // i nie ma czym sterować diff --git a/drivermouseinput.cpp b/drivermouseinput.cpp index b257bc1d..d3e42c76 100644 --- a/drivermouseinput.cpp +++ b/drivermouseinput.cpp @@ -323,7 +323,7 @@ drivermouse_input::button( int const Button, int const Action ) { // left mouse button launches on_click event associated with to the node if( Button == GLFW_MOUSE_BUTTON_LEFT ) { if( Action == GLFW_PRESS ) { - auto const *node { GfxRenderer.Update_Pick_Node() }; + auto const *node { GfxRenderer->Update_Pick_Node() }; if( ( node == nullptr ) || ( typeid( *node ) != typeid( TAnimModel ) ) ) { return; @@ -369,7 +369,7 @@ drivermouse_input::button( int const Button, int const Action ) { } else { // if not release then it's press - auto const lookup = m_buttonbindings.find( simulation::Train->GetLabel( GfxRenderer.Update_Pick_Control() ) ); + auto const lookup = m_buttonbindings.find( simulation::Train->GetLabel( GfxRenderer->Update_Pick_Control() ) ); if( lookup != m_buttonbindings.end() ) { // if the recognized element under the cursor has a command associated with the pressed button, notify the recipient mousecommand = ( @@ -732,6 +732,9 @@ drivermouse_input::default_bindings() { { "radiotest_sw:", { user_command::radiostoptest, user_command::none } }, + { "radiocall3_sw:", { + user_command::radiocall3send, + user_command::none } }, { "pantfront_sw:", { user_command::pantographtogglefront, user_command::none } }, @@ -771,6 +774,9 @@ drivermouse_input::default_bindings() { { "nextcurrent_sw:", { user_command::mucurrentindicatorothersourceactivate, user_command::none } }, + { "distancecounter_sw:", { + user_command::distancecounteractivate, + user_command::none } }, { "instrumentlight_sw:", { user_command::instrumentlighttoggle, user_command::none } }, diff --git a/driveruilayer.cpp b/driveruilayer.cpp index 1a3ecad7..a160aed1 100644 --- a/driveruilayer.cpp +++ b/driveruilayer.cpp @@ -171,16 +171,16 @@ driver_ui::update() { if( ( train != nullptr ) && ( false == FreeFlyModeFlag ) ) { if( false == DebugModeFlag ) { // in regular mode show control functions, for defined controls - set_tooltip( locale::label_cab_control( train->GetLabel( GfxRenderer.Pick_Control() ) ) ); + set_tooltip( locale::label_cab_control( train->GetLabel( GfxRenderer->Pick_Control() ) ) ); } else { // in debug mode show names of submodels, to help with cab setup and/or debugging - auto const cabcontrol = GfxRenderer.Pick_Control(); + auto const cabcontrol = GfxRenderer->Pick_Control(); set_tooltip( ( cabcontrol ? cabcontrol->pName : "" ) ); } } if( ( true == Global.ControlPicking ) && ( true == FreeFlyModeFlag ) && ( true == DebugModeFlag ) ) { - auto const scenerynode = GfxRenderer.Pick_Node(); + auto const scenerynode = GfxRenderer->Pick_Node(); set_tooltip( ( scenerynode ? scenerynode->name() : diff --git a/driveruipanels.cpp b/driveruipanels.cpp index 9047f561..9cfbbe41 100644 --- a/driveruipanels.cpp +++ b/driveruipanels.cpp @@ -20,6 +20,7 @@ http://mozilla.org/MPL/2.0/. #include "Camera.h" #include "mtable.h" #include "Train.h" +#include "Button.h" #include "Driver.h" #include "AnimModel.h" #include "DynObj.h" @@ -43,6 +44,7 @@ drivingaid_panel::update() { auto const *mover = controlled->MoverParameters; auto const *driver = controlled->Mechanik; + auto const *owner = ( controlled->ctOwner != nullptr ? controlled->ctOwner : controlled->Mechanik ); { // throttle, velocity, speed limits and grade std::string expandedtext; @@ -59,8 +61,8 @@ drivingaid_panel::update() { gradetext = m_buffer.data(); } // next speed limit - auto const speedlimit { static_cast( std::floor( driver->VelDesired ) ) }; - auto const nextspeedlimit { static_cast( std::floor( driver->VelNext ) ) }; + auto const speedlimit { static_cast( std::floor( owner->VelDesired ) ) }; + auto const nextspeedlimit { static_cast( std::floor( owner->VelNext ) ) }; std::string nextspeedlimittext; if( nextspeedlimit != speedlimit ) { std::snprintf( @@ -116,7 +118,7 @@ drivingaid_panel::update() { { // alerter, hints std::string expandedtext; if( is_expanded ) { - auto const stoptime { static_cast( std::ceil( -1.0 * controlled->Mechanik->fStopTime ) ) }; + auto const stoptime { static_cast( std::ceil( -1.0 * owner->fStopTime ) ) }; if( stoptime > 0 ) { std::snprintf( m_buffer.data(), m_buffer.size(), @@ -125,7 +127,7 @@ drivingaid_panel::update() { expandedtext = m_buffer.data(); } else { - auto const trackblockdistance{ std::abs( controlled->Mechanik->TrackBlock() ) }; + auto const trackblockdistance{ std::abs( owner->TrackBlock() ) }; if( trackblockdistance <= 75.0 ) { std::snprintf( m_buffer.data(), m_buffer.size(), @@ -135,12 +137,14 @@ drivingaid_panel::update() { } } } - std::string textline = - ( true == TestFlag( mover->SecuritySystem.Status, s_aware ) ? + std::string textline = ( + ( ( true == TestFlag( mover->SecuritySystem.Status, s_aware ) ) + && ( train != nullptr ) + && ( train->fBlinkTimer > 0 ) ) ? locale::strings[ locale::string::driver_aid_alerter ] : " " ); - textline += - ( true == TestFlag( mover->SecuritySystem.Status, s_active ) ? + textline += ( + ( true == TestFlag( mover->SecuritySystem.Status, s_active ) ) ? locale::strings[ locale::string::driver_aid_shp ] : " " ); @@ -167,7 +171,7 @@ scenario_panel::update() { std::get( simulation::Region->find_vehicle( camera.Pos, 20, false, false ) ) ); // w trybie latania lokalizujemy wg mapy if( m_nearest == nullptr ) { return; } auto const *owner { ( - ( ( m_nearest->Mechanik != nullptr ) && ( m_nearest->Mechanik->Primary() ) ) ? + ( ( m_nearest->Mechanik != nullptr ) && ( m_nearest->Mechanik->primary() ) ) ? m_nearest->Mechanik : m_nearest->ctOwner ) }; if( owner == nullptr ) { return; } @@ -205,7 +209,7 @@ scenario_panel::render() { if( true == ImGui::Begin( panelname.c_str(), &is_open, flags ) ) { // potential assignment section auto const *owner { ( - ( ( m_nearest->Mechanik != nullptr ) && ( m_nearest->Mechanik->Primary() ) ) ? + ( ( m_nearest->Mechanik != nullptr ) && ( m_nearest->Mechanik->primary() ) ) ? m_nearest->Mechanik : m_nearest->ctOwner ) }; if( owner != nullptr ) { @@ -258,7 +262,7 @@ timetable_panel::update() { if( vehicle == nullptr ) { return; } // if the nearest located vehicle doesn't have a direct driver, try to query its owner auto const *owner = ( - ( ( vehicle->Mechanik != nullptr ) && ( vehicle->Mechanik->Primary() ) ) ? + ( ( vehicle->Mechanik != nullptr ) && ( vehicle->Mechanik->primary() ) ) ? vehicle->Mechanik : vehicle->ctOwner ); if( owner == nullptr ) { return; } @@ -550,7 +554,7 @@ debug_panel::update_section_vehicle( std::vector &Output ) { auto const &vehicle { *m_input.vehicle }; auto const &mover { *m_input.mover }; - auto const isowned { ( vehicle.Mechanik == nullptr ) && ( vehicle.ctOwner != nullptr ) }; + auto const isowned { /* ( vehicle.Mechanik == nullptr ) && */ ( vehicle.ctOwner != nullptr ) && ( vehicle.ctOwner->Vehicle() != m_input.vehicle ) }; auto const isplayervehicle { ( m_input.train != nullptr ) && ( m_input.train->Dynamic() == m_input.vehicle ) }; auto const isdieselenginepowered { ( mover.EngineType == TEngineType::DieselElectric ) || ( mover.EngineType == TEngineType::DieselEngine ) }; auto const isdieselinshuntmode { mover.ShuntMode && mover.EngineType == TEngineType::DieselElectric }; @@ -750,17 +754,14 @@ debug_panel::update_vehicle_brake() const { void debug_panel::update_section_engine( std::vector &Output ) { - - if( m_input.train == nullptr ) { return; } + // engine data if( m_input.vehicle == nullptr ) { return; } if( m_input.mover == nullptr ) { return; } - auto const &train { *m_input.train }; auto const &vehicle{ *m_input.vehicle }; auto const &mover{ *m_input.mover }; - // engine data - // induction motor data + // induction motor data if( mover.EngineType == TEngineType::ElectricInductionMotor ) { Output.emplace_back( " eimc: eimv: press:", Global.UITextColor ); @@ -772,7 +773,11 @@ debug_panel::update_section_engine( std::vector &Output ) { + mover.eimv_labels[ i ] + to_string( mover.eimv[ i ], 2, 9 ); if( i < 10 ) { - parameters += " | " + train.fPress_labels[ i ] + to_string( train.fPress[ i ][ 0 ], 2, 9 ); + // NOTE: we pull consist data from the train structure, so show this data only if we're viewing controlled vehicle + parameters += + ( ( m_input.train != nullptr ) && ( m_input.train->Dynamic() == m_input.vehicle ) ? + " | " + TTrain::fPress_labels[ i ] + to_string( m_input.train->fPress[ i ][ 0 ], 2, 9 ) : + "" ); } else if( i == 12 ) { parameters += " med:"; @@ -784,6 +789,7 @@ debug_panel::update_section_engine( std::vector &Output ) { Output.emplace_back( parameters, Global.UITextColor ); } } + // diesel engine data if( mover.EngineType == TEngineType::DieselEngine ) { std::string parameterstext = "param value"; @@ -959,6 +965,13 @@ debug_panel::update_section_scenario( std::vector &Output ) { textline = "Cloud cover: " + to_string( Global.Overcast, 3 ); textline += "\nLight level: " + to_string( Global.fLuminance, 3 ); if( Global.FakeLight ) { textline += "(*)"; } + textline += + "\nWind: azimuth " + + to_string( simulation::Environment.wind_azimuth(), 0 ) // ma być azymut, czyli 0 na północy i rośnie na wschód + + " " + + std::string( "N NEE SES SWW NW" ) + .substr( 0 + 2 * std::floor( std::fmod( 8 + ( glm::radians( simulation::Environment.wind_azimuth() ) + 0.5 * M_PI_4 ) / M_PI_4, 8 ) ), 2 ) + + ", " + to_string( glm::length( simulation::Environment.wind() ), 1 ) + " m/s"; textline += "\nAir temperature: " + to_string( Global.AirTemperature, 1 ) + " deg C"; Output.emplace_back( textline, Global.UITextColor ); @@ -1071,9 +1084,9 @@ debug_panel::update_section_renderer( std::vector &Output ) { auto textline = "FoV: " + to_string( Global.FieldOfView / Global.ZoomFactor, 1 ) + ", Draw range x " + to_string( Global.fDistanceFactor, 1 ) -// + "; sectors: " + std::to_string( GfxRenderer.m_drawcount ) +// + "; sectors: " + std::to_string( GfxRenderer->m_drawcount ) // + ", FPS: " + to_string( Timer::GetFPS(), 2 ); - + ", FPS: " + std::to_string( static_cast(std::round(GfxRenderer.Framerate())) ); + + ", FPS: " + std::to_string( static_cast(std::round(GfxRenderer->Framerate())) ); if( Global.iSlowMotion ) { textline += " (slowmotion " + to_string( Global.iSlowMotion ) + ")"; } @@ -1095,8 +1108,8 @@ debug_panel::update_section_renderer( std::vector &Output ) { Output.emplace_back( textline, Global.UITextColor ); // renderer stats - Output.emplace_back( GfxRenderer.info_times(), Global.UITextColor ); - Output.emplace_back( GfxRenderer.info_stats(), Global.UITextColor ); + Output.emplace_back( GfxRenderer->info_times(), Global.UITextColor ); + Output.emplace_back( GfxRenderer->info_stats(), Global.UITextColor ); } bool diff --git a/editormode.cpp b/editormode.cpp index eb34f510..42a52236 100644 --- a/editormode.cpp +++ b/editormode.cpp @@ -80,7 +80,7 @@ editor_mode::update() { simulation::Region->update_sounds(); audio::renderer.update( deltarealtime ); - GfxRenderer.Update( deltarealtime ); + GfxRenderer->Update( deltarealtime ); simulation::is_ready = true; @@ -203,7 +203,7 @@ editor_mode::on_cursor_pos( double const Horizontal, double const Vertical ) { m_editor.translate( m_node, translation ); } else { - auto const mouseworldposition { Camera.Pos + GfxRenderer.Mouse_Position() }; + auto const mouseworldposition { Camera.Pos + GfxRenderer->Mouse_Position() }; m_editor.translate( m_node, mouseworldposition, mode_snap() ); } } @@ -229,7 +229,7 @@ editor_mode::on_mouse_button( int const Button, int const Action, int const Mods if( Action == GLFW_PRESS ) { // left button press - m_node = GfxRenderer.Update_Pick_Node(); + m_node = GfxRenderer->Update_Pick_Node(); if( m_node ) { Application.set_cursor( GLFW_CURSOR_DISABLED ); } diff --git a/editoruilayer.cpp b/editoruilayer.cpp index b0e75e87..2481ce91 100644 --- a/editoruilayer.cpp +++ b/editoruilayer.cpp @@ -29,7 +29,7 @@ editor_ui::update() { if( ( true == Global.ControlPicking ) && ( true == DebugModeFlag ) ) { - auto const scenerynode = GfxRenderer.Pick_Node(); + auto const scenerynode = GfxRenderer->Pick_Node(); set_tooltip( ( scenerynode ? scenerynode->name() : diff --git a/editoruipanels.cpp b/editoruipanels.cpp index 7ddf59e7..d58fed0a 100644 --- a/editoruipanels.cpp +++ b/editoruipanels.cpp @@ -36,12 +36,26 @@ itemproperties_panel::update( scene::basic_node const *Node ) { auto const &camera { Global.pCamera }; if( node == nullptr ) { - auto const mouseposition { camera.Pos + GfxRenderer.Mouse_Position() }; + auto const mouseposition { camera.Pos + GfxRenderer->Mouse_Position() }; textline = "mouse location: [" + to_string( mouseposition.x, 2 ) + ", " + to_string( mouseposition.y, 2 ) + ", " + to_string( mouseposition.z, 2 ) + "]"; text_lines.emplace_back( textline, Global.UITextColor ); return; } +/* + // TODO: bind receiver in the constructor + if( ( m_itemproperties != nullptr ) + && ( m_itemproperties->node != nullptr ) ) { + // fetch node data; skip properties which were changed until they're retrieved by the observer + auto const *node { m_itemproperties->node }; + if( m_itemproperties->name.second == false ) { + m_itemproperties->name.first = ( node->name().empty() ? "(none)" : node->name() ); + } + if( m_itemproperties->location.second == false ) { + m_itemproperties->location.first = node->location(); + } + } +*/ textline = "name: " + ( node->name().empty() ? "(none)" : node->name() ) + "\nlocation: [" + to_string( node->location().x, 2 ) + ", " + to_string( node->location().y, 2 ) + ", " + to_string( node->location().z, 2 ) + "]" @@ -83,7 +97,7 @@ itemproperties_panel::update( scene::basic_node const *Node ) { // texture auto texturefile { ( ( subnode->Material()->replacable_skins[ 1 ] != null_handle ) ? - GfxRenderer.Material( subnode->Material()->replacable_skins[ 1 ] ).name : + GfxRenderer->Material( subnode->Material()->replacable_skins[ 1 ] ).name : "(none)" ) }; if( texturefile.find( szTexturePath ) == 0 ) { // don't include 'textures/' in the path @@ -106,14 +120,14 @@ itemproperties_panel::update( scene::basic_node const *Node ) { // textures auto texturefile { ( ( subnode->m_material1 != null_handle ) ? - GfxRenderer.Material( subnode->m_material1 ).name : + GfxRenderer->Material( subnode->m_material1 ).name : "(none)" ) }; if( texturefile.find( szTexturePath ) == 0 ) { texturefile.erase( 0, std::string{ szTexturePath }.size() ); } auto texturefile2{ ( ( subnode->m_material2 != null_handle ) ? - GfxRenderer.Material( subnode->m_material2 ).name : + GfxRenderer->Material( subnode->m_material2 ).name : "(none)" ) }; if( texturefile2.find( szTexturePath ) == 0 ) { texturefile2.erase( 0, std::string{ szTexturePath }.size() ); diff --git a/material.cpp b/material.cpp index 91db805b..13791635 100644 --- a/material.cpp +++ b/material.cpp @@ -25,7 +25,7 @@ opengl_material::deserialize( cParser &Input, bool const Loadnow ) { has_alpha = ( texture1 != null_handle ? - GfxRenderer.Texture( texture1 ).has_alpha : + GfxRenderer->Texture( texture1 ).has_alpha : false ); return result; @@ -63,7 +63,7 @@ opengl_material::deserialize_mapping( cParser &Input, int const Priority, bool c auto const value { deserialize_random_set( Input ) }; if( ( texture1 == null_handle ) || ( Priority > priority1 ) ) { - texture1 = GfxRenderer.Fetch_Texture( value, Loadnow ); + texture1 = GfxRenderer->Fetch_Texture( value, Loadnow ); priority1 = Priority; } } @@ -72,7 +72,7 @@ opengl_material::deserialize_mapping( cParser &Input, int const Priority, bool c auto const value { deserialize_random_set( Input ) }; if( ( texture2 == null_handle ) || ( Priority > priority2 ) ) { - texture2 = GfxRenderer.Fetch_Texture( value, Loadnow ); + texture2 = GfxRenderer->Fetch_Texture( value, Loadnow ); priority2 = Priority; } } @@ -168,11 +168,11 @@ material_manager::create( std::string const &Filename, bool const Loadnow ) { // if there's no .mat file, this can be either autogenerated texture, // or legacy method of referring just to diffuse texture directly. // wrap basic material around it in either case - material.texture1 = GfxRenderer.Fetch_Texture( Filename, Loadnow ); + material.texture1 = GfxRenderer->Fetch_Texture( Filename, Loadnow ); if( material.texture1 != null_handle ) { // use texture path and name to tell the newly created materials apart - material.name = GfxRenderer.Texture( material.texture1 ).name; - material.has_alpha = GfxRenderer.Texture( material.texture1 ).has_alpha; + material.name = GfxRenderer->Texture( material.texture1 ).name; + material.has_alpha = GfxRenderer->Texture( material.texture1 ).has_alpha; } } diff --git a/messaging.cpp b/messaging.cpp index cae047ff..95712c0c 100644 --- a/messaging.cpp +++ b/messaging.cpp @@ -370,7 +370,7 @@ WyslijObsadzone() r.fPar[ 16 * i + 4 ] = vehicle->GetPosition().x; r.fPar[ 16 * i + 5 ] = vehicle->GetPosition().y; r.fPar[ 16 * i + 6 ] = vehicle->GetPosition().z; - r.iPar[ 16 * i + 7 ] = static_cast( vehicle->Mechanik->GetAction() ); + r.iPar[ 16 * i + 7 ] = static_cast( vehicle->Mechanik->action() ); strcpy( r.cString + 64 * i + 32, vehicle->GetTrack()->IsolatedName().c_str() ); strcpy( r.cString + 64 * i + 48, vehicle->Mechanik->TrainName().c_str() ); i++; diff --git a/parser.cpp b/parser.cpp index 25bd9c3a..1ba87a48 100644 --- a/parser.cpp +++ b/parser.cpp @@ -79,6 +79,19 @@ cParser::~cParser() { } } +template <> +glm::vec3 +cParser::getToken( bool const ToLower, char const *Break ) { + // NOTE: this specialization ignores default arguments + getTokens( 3, false, "\n\r\t ,;[]" ); + glm::vec3 output; + *this + >> output.x + >> output.y + >> output.z; + return output; +}; + template<> cParser& cParser::operator>>( std::string &Right ) { diff --git a/parser.h b/parser.h index 9dd96657..fb44f55d 100644 --- a/parser.h +++ b/parser.h @@ -37,7 +37,7 @@ class cParser //: public std::stringstream operator>>( Type_ &Right ); template Output_ - getToken( bool const ToLower = true, const char *Break = "\n\r\t ;" ) { + getToken( bool const ToLower = true, char const *Break = "\n\r\t ;" ) { getTokens( 1, ToLower, Break ); Output_ output; *this >> output; @@ -50,20 +50,24 @@ class cParser //: public std::stringstream bool expectToken( std::string const &Value ) { return readToken() == Value; }; + inline bool eof() { return mStream->eof(); }; + inline bool ok() { - return !mStream->fail(); }; + return ( !mStream->fail() ); }; cParser & autoclear( bool const Autoclear ); + inline bool autoclear() const { return m_autoclear; } bool getTokens( unsigned int Count = 1, bool ToLower = true, char const *Break = "\n\r\t ;" ); // returns next incoming token, if any, without removing it from the set + inline std::string peek() const { return ( @@ -108,6 +112,12 @@ class cParser //: public std::stringstream std::deque tokens; }; + +template <> +glm::vec3 +cParser::getToken( bool const ToLower, const char *Break ); + + template cParser& cParser::operator>>( Type_ &Right ) { diff --git a/particles.cpp b/particles.cpp new file mode 100644 index 00000000..0889fe8a --- /dev/null +++ b/particles.cpp @@ -0,0 +1,434 @@ +/* +This Source Code Form is subject to the +terms of the Mozilla Public License, v. +2.0. If a copy of the MPL was not +distributed with this file, You can +obtain one at +http://mozilla.org/MPL/2.0/. +*/ + +#include "stdafx.h" +#include "particles.h" + +#include "Timer.h" +#include "Globals.h" +#include "AnimModel.h" +#include "simulationenvironment.h" + + +void +smoke_source::particle_emitter::deserialize( cParser &Input ) { + + if( Input.getToken() != "{" ) { return; } + + std::unordered_map const variablemap { + { "min_inclination:", inclination[ value_limit::min ] }, + { "max_inclination:", inclination[ value_limit::max ] }, + { "min_velocity:", velocity[ value_limit::min ] }, + { "max_velocity:", velocity[ value_limit::max ] }, + { "min_size:", size[ value_limit::min ] }, + { "max_size:", size[ value_limit::max ] }, + { "min_opacity:", opacity[ value_limit::min ] }, + { "max_opacity:", opacity[ value_limit::max ] } }; + std::string key; + + while( ( false == ( ( key = Input.getToken( true, "\n\r\t ,;[]" ) ).empty() ) ) + && ( key != "}" ) ) { + + if( key == "color:" ) { + // special case, vec3 attribute type + // TODO: variable table, if amount of vector attributes increases + color = Input.getToken( true, "\n\r\t ,;[]" ); + color = + glm::clamp( + color / 255.f, + glm::vec3{ 0.f }, glm::vec3{ 1.f } ); + } + else { + // float type attributes + auto const lookup { variablemap.find( key ) }; + if( lookup != variablemap.end() ) { + lookup->second = Input.getToken( true, "\n\r\t ,;[]" ); + } + } + } +} + +void +smoke_source::particle_emitter::initialize( smoke_particle &Particle ) { + + auto const polarangle { glm::radians( Random( inclination[ value_limit::min ], inclination[ value_limit::max ] ) ) }; // theta + auto const azimuthalangle { glm::radians( Random( -180, 180 ) ) }; // phi + // convert spherical coordinates to opengl coordinates + auto const launchvector { glm::vec3( + std::sin( polarangle ) * std::sin( azimuthalangle ) * -1, + std::cos( polarangle ), + std::sin( polarangle ) * std::cos( azimuthalangle ) ) }; + auto const launchvelocity { static_cast( Random( velocity[ value_limit::min ], velocity[ value_limit::max ] ) ) }; + + Particle.velocity = launchvector * launchvelocity; + + Particle.rotation = glm::radians( Random( 0, 360 ) ); + Particle.size = Random( size[ value_limit::min ], size[ value_limit::max ] ); + Particle.opacity = Random( opacity[ value_limit::min ], opacity[ value_limit::max ] ) / Global.SmokeFidelity; + Particle.age = 0; +} + +bool +smoke_source::deserialize( cParser &Input ) { + + if( false == Input.ok() ) { return false; } + + while( true == deserialize_mapping( Input ) ) { + ; // all work done by while() + } + + return true; +} + +// imports member data pair from the config file +bool +smoke_source::deserialize_mapping( cParser &Input ) { + + // token can be a key or block end + std::string const key { Input.getToken( true, "\n\r\t ,;[]" ) }; + + if( ( true == key.empty() ) || ( key == "}" ) ) { return false; } + + // if not block end then the key is followed by assigned value or sub-block + if( key == "spawn_rate:" ) { + Input.getTokens(); + Input >> m_spawnrate; + } + else if( key == "initializer:" ) { + m_emitter.deserialize( Input ); + } +/* + else if( key == "velocity_change:" ) { + m_velocitymodifier.deserialize( Input ); + } +*/ + else if( key == "size_change:" ) { + m_sizemodifier.deserialize( Input ); + } + else if( key == "opacity_change:" ) { + m_opacitymodifier.deserialize( Input ); + } + + return true; // return value marks a [ key: value ] pair was extracted, nothing about whether it's recognized +} + +void +smoke_source::initialize() { + + m_max_particles = + // put a cap on number of particles in a single source. TBD, TODO: make it part of he source configuration? + std::min( + static_cast( 500 * Global.SmokeFidelity ), + // NOTE: given nature of the smoke we're presuming opacity decreases over time and the particle is killed when it reaches 0 + // this gives us estimate of longest potential lifespan of single particle, and how many particles total can there be at any given time + // TBD, TODO: explicit lifespan variable as part of the source configuration? + static_cast( m_spawnrate / std::abs( m_opacitymodifier.value_change() ) ) ); +} + +void +smoke_source::bind( TDynamicObject const *Vehicle ) { + + m_owner.vehicle = Vehicle; + m_ownertype = ( + m_owner.vehicle != nullptr ? + owner_type::vehicle : + owner_type::none ); +} + +void +smoke_source::bind( TAnimModel const *Node ) { + + m_owner.node = Node; + m_ownertype = ( + m_owner.node != nullptr ? + owner_type::node : + owner_type::none ); +} + +// updates state of owned particles +void +smoke_source::update( double const Timedelta, bool const Onlydespawn ) { + + // prepare bounding box for new pass + // TODO: include bounding box in the bounding_area class + bounding_box boundingbox { + glm::dvec3{ std::numeric_limits::max() }, + glm::dvec3{ std::numeric_limits::lowest() } }; + + m_spawncount = ( + ( ( false == Global.Smoke ) || ( true == Onlydespawn ) ) ? + 0.f : + std::min( + m_spawncount + ( m_spawnrate * Timedelta * Global.SmokeFidelity ), + m_max_particles ) ); + // consider special spawn rate cases + if( m_ownertype == owner_type::vehicle ) { + // HACK: don't spawn particles in tunnels, to prevent smoke clipping through 'terrain' outside + if( m_owner.vehicle->RaTrackGet()->eEnvironment == e_tunnel ) { + m_spawncount = 0.f; + } + if( false == m_owner.vehicle->bEnabled ) { + // don't spawn particles for vehicles which left the scenario + m_spawncount = 0.f; + } + } + // update spawned particles + for( auto particleiterator { std::begin( m_particles ) }; particleiterator != std::end( m_particles ); ++particleiterator ) { + + auto &particle { *particleiterator }; + bool particleisalive; + + while( ( false == ( particleisalive = update( particle, boundingbox, Timedelta ) ) ) + && ( m_spawncount >= 1.f ) ) { + // replace dead particle with a new one + m_spawncount -= 1.f; + initialize( particle ); + } + if( false == particleisalive ) { + // we have a dead particle and no pending spawn requests, (try to) move the last particle here + do { + if( std::next( particleiterator ) == std::end( m_particles ) ) { break; } // already at last particle + particle = m_particles.back(); + m_particles.pop_back(); + } while( false == ( particleisalive = update( particle, boundingbox, Timedelta ) ) ); + } + if( false == particleisalive ) { + // NOTE: if we're here it means the iterator is at last container slot which holds a dead particle about to be eliminated... + m_particles.pop_back(); + // ...since this effectively makes the iterator now point at end() and the advancement at the end of the loop will move it past end() + // we have to break the loop manually (could use < comparison but with both ways being ugly, this is + break; + } + } + // spawn pending particles in remaining container slots + while( ( m_spawncount >= 1.f ) + && ( m_particles.size() < m_max_particles ) ) { + + m_spawncount -= 1.f; + // work with a temporary copy in case initial update renders the particle dead + smoke_particle newparticle; + initialize( newparticle ); + if( true == update( newparticle, boundingbox, Timedelta ) ) { + // if the new particle didn't die immediately place it in the container... + m_particles.emplace_back( newparticle ); + } + } + // if we still have pending requests after filling entire container replace older particles + if( m_spawncount >= 1.f ) { + // sort all particles from most to least transparent, oldest to youngest if it's a tie + std::sort( + std::begin( m_particles ), + std::end( m_particles ), + []( smoke_particle const &Left, smoke_particle const &Right ) { + return ( Left.opacity != Right.opacity ? + Left.opacity < Right.opacity : + Left.age > Right.age ); } ); + // replace old particles with new ones until we run out of either requests or room + for( auto &particle : m_particles ) { + + while( m_spawncount >= 1.f ) { + m_spawncount -= 1.f; + // work with a temporary copy so we don't wind up with replacing a good particle with a dead on arrival one + smoke_particle newparticle; + initialize( newparticle ); + if( true == update( newparticle, boundingbox, Timedelta ) ) { + // if the new particle didn't die immediately place it in the container... + particle = newparticle; + // ...and move on to the next slot + break; + } + } + } + // discard pending spawn requests our container couldn't fit + m_spawncount -= std::floor( m_spawncount ); + } + // determine bounding area from calculated bounding box + if( false == m_particles.empty() ) { + m_area.center = interpolate( boundingbox[ value_limit::min ], boundingbox[ value_limit::max ], 0.5 ); + m_area.radius = 0.5 * ( glm::length( boundingbox[ value_limit::max ] - boundingbox[ value_limit::min ] ) ); + } + else { + m_area.center = location(); + m_area.radius = 0; + } +} + +glm::dvec3 +smoke_source::location() const { + + glm::dvec3 location; + + switch( m_ownertype ) { + case owner_type::vehicle: { + location = glm::dvec3 { + m_offset.x * m_owner.vehicle->VectorLeft() + + m_offset.y * m_owner.vehicle->VectorUp() + + m_offset.z * m_owner.vehicle->VectorFront() }; + location += glm::dvec3{ m_owner.vehicle->GetPosition() }; + break; + } + case owner_type::node: { + // TODO: take into account node rotation + auto const rotation { glm::angleAxis( glm::radians( m_owner.node->Angles().y ), glm::vec3{ 0.f, 1.f, 0.f } ) }; + location = rotation * glm::vec3{ m_offset }; + location += m_owner.node->location(); + break; + } + default: { + location = m_offset; + break; + } + } + + return location; +} + +// sets particle state to fresh values +void +smoke_source::initialize( smoke_particle &Particle ) { + + m_emitter.initialize( Particle ); + + Particle.position = location(); + + if( m_ownertype == owner_type::vehicle ) { + Particle.opacity *= m_owner.vehicle->MoverParameters->dizel_fill; + auto const enginerevolutionsfactor { 1.5f }; // high engine revolutions increase initial particle velocity + switch( m_owner.vehicle->MoverParameters->EngineType ) { + case TEngineType::DieselElectric: { + Particle.velocity *= 1.0 + enginerevolutionsfactor * m_owner.vehicle->MoverParameters->enrot / ( m_owner.vehicle->MoverParameters->DElist[ m_owner.vehicle->MoverParameters->MainCtrlPosNo ].RPM / 60.0 ); + break; + } + case TEngineType::DieselEngine: { + Particle.velocity *= 1.0 + enginerevolutionsfactor * m_owner.vehicle->MoverParameters->enrot / m_owner.vehicle->MoverParameters->nmax; + break; + } + default: { + break; + } + } + } +} + +// updates state of provided particle and bounding box. returns: true if particle is still alive afterwards, false otherwise +bool +smoke_source::update( smoke_particle &Particle, bounding_box &Boundingbox, double const Timedelta ) { + + m_opacitymodifier.update( Particle.opacity, Timedelta ); + // if the particle is dead we can bail out early... + if( Particle.opacity <= 0.f ) { return false; } + // ... otherwise proceed with full update + m_sizemodifier.update( Particle.size, Timedelta ); + + // crude smoke dispersion simulation + // http://www.auburn.edu/academic/forestry_wildlife/fire/smoke_guide/smoke_dispersion.htm + Particle.velocity.y += ( 0.005 * Particle.velocity.y ) * std::min( 0.f, Global.AirTemperature - 10 ) * Timedelta; // decelerate faster in cold weather + Particle.velocity.y -= ( 0.010 * Particle.velocity.y ) * Global.Overcast * Timedelta; // decelerate faster with high air humidity and/or precipitation + Particle.velocity.y = std::max( 0.25 * ( 2.f - Global.Overcast ), Particle.velocity.y ); // put a cap on deceleration + + Particle.position += Particle.velocity * static_cast( Timedelta ); + Particle.position += 0.1f * Particle.age * simulation::Environment.wind() * static_cast( Timedelta ); +// m_velocitymodifier.update( Particle.velocity, Timedelta ); + + Particle.age += Timedelta; + + // update bounding box + Boundingbox[ value_limit::min ] = glm::min( Boundingbox[ value_limit::min ], Particle.position - glm::dvec3{ Particle.size } ); + Boundingbox[ value_limit::max ] = glm::max( Boundingbox[ value_limit::max ], Particle.position + glm::dvec3{ Particle.size } ); + + return true; +} + + + +// adds a new particle source of specified type, placing it in specified world location +// returns: true on success, false if the specified type definition couldn't be located +bool +particle_manager::insert( std::string const &Sourcetemplate, glm::dvec3 const Location ) { + + auto const *sourcetemplate { find( Sourcetemplate ) }; + + if( sourcetemplate == nullptr ) { return false; } + + // ...if template lookup didn't fail put template clone on the source list and initialize it + m_sources.emplace_back( *sourcetemplate ); + auto &source { m_sources.back() }; + source.initialize(); + source.m_offset = Location; + + return true; +} + +bool +particle_manager::insert( std::string const &Sourcetemplate, TDynamicObject const *Vehicle, glm::dvec3 const Location ) { + + if( false == insert( Sourcetemplate, Location ) ) { return false; } + + // attach the source to specified vehicle + auto &source { m_sources.back() }; + source.bind( Vehicle ); + + return true; +} + +bool +particle_manager::insert( std::string const &Sourcetemplate, TAnimModel const *Node, glm::dvec3 const Location ) { + + if( false == insert( Sourcetemplate, Location ) ) { return false; } + + // attach the source to specified node + auto &source { m_sources.back() }; + source.bind( Node ); + + return true; +} + +// updates state of all owned emitters +void +particle_manager::update() { + + auto const timedelta { Timer::GetDeltaTime() }; + + if( timedelta == 0.0 ) { return; } + + auto const distancethreshold { 2 * Global.BaseDrawRange * Global.fDistanceFactor }; // to reduce workload distant enough sources won't spawn new particles + + for( auto &source : m_sources ) { + + auto const viewerdistance { glm::length( source.area().center - glm::dvec3{ Global.pCamera.Pos } ) - source.area().radius }; + + source.update( timedelta, viewerdistance > distancethreshold ); + } +} + +smoke_source * +particle_manager::find( std::string const &Template ) { + + auto const templatepath { "data/" }; + auto const templatename { ToLower( Template ) }; + + // try to locate specified rail profile... + auto const lookup { m_sourcetemplates.find( templatename ) }; + if( lookup != m_sourcetemplates.end() ) { + // ...if it works, we're done... + return &(lookup->second); + } + // ... and if it fails try to add the template to the database from a data file + smoke_source source; + if( source.deserialize( cParser( templatepath + templatename + ".txt", cParser::buffer_FILE ) ) ) { + // if deserialization didn't fail finish source setup... + source.m_opacitymodifier.bind( &Global.SmokeFidelity ); + // ...then cache the source as template for future instances + m_sourcetemplates.emplace( templatename, source ); + // should be 'safe enough' to return lookup result directly afterwards + return &( m_sourcetemplates.find( templatename )->second ); + } + // if fetching data from the file fails too, give up + return nullptr; +} diff --git a/particles.h b/particles.h new file mode 100644 index 00000000..cb1d6785 --- /dev/null +++ b/particles.h @@ -0,0 +1,243 @@ +/* +This Source Code Form is subject to the +terms of the Mozilla Public License, v. +2.0. If a copy of the MPL was not +distributed with this file, You can +obtain one at +http://mozilla.org/MPL/2.0/. +*/ + +#pragma once + +#include "Classes.h" +#include "scene.h" + +// particle specialized for drawing smoke +// given smoke features we can take certain shortcuts +// -- there's no need to sort the particles, can be drawn in any order with depth write turned off +// -- the colour remains consistent throughout, only opacity changes +// -- randomized particle rotation +// -- initial velocity reduced over time to slow drift upwards (drift speed depends on particle and air temperature difference) +// -- size increased over time +struct smoke_particle { + + glm::dvec3 position; // meters, 3d space; + float rotation; // radians; local z axis angle + glm::vec3 velocity; // meters per second, 3d space; current velocity + float size; // multiplier, billboard size +// glm::vec4 color; // 0-1 range, rgba; geometry color and opacity + float opacity; // 0-1 range +// glm::vec2 uv_offset; // 0-1 range, uv space; for texture animation + float age; // seconds; time elapsed since creation +// double distance; // meters; distance between particle and camera +}; + +enum value_limit { + min = 0, + max = 1 +}; + +// helper, adjusts provided variable by fixed amount, keeping resulting value between limits +template +class fixedstep_modifier { + +public: +// methods + void + deserialize( cParser &Input ); + // updates state of provided variable + void + update( Type_ &Variable, double const Timedelta ) const; + void + bind( Type_ const *Modifier ) { + m_valuechangemodifier = Modifier; } + Type_ + value_change() const { + return ( + m_valuechangemodifier == nullptr ? + m_valuechange : + m_valuechange / *( m_valuechangemodifier ) ); } + +private: +//types +// methods +// members +// Type_ m_intialvalue { Type_( 0 ) }; // meters per second; velocity applied to freshly spawned particles + Type_ m_valuechange { Type_( 0 ) }; // meters per second; change applied to initial velocity + Type_ m_valuelimits[ 2 ] { Type_( std::numeric_limits::lowest() ), Type_( std::numeric_limits::max() ) }; + Type_ const *m_valuechangemodifier{ nullptr }; // optional modifier applied to value change +}; + + +// particle emitter +class smoke_source { +// located in scenery +// new particles emitted if distance of source < double view range +// existing particles are updated until dead no matter the range (presumed to have certain lifespan) +// during update pass dead particle slots are filled with new instances, if there's no particles queued the slot is swapped with the last particle in the list +// bounding box/sphere calculated based on position of all owned particles, used by the renderer to include/discard data in a draw pass + friend class particle_manager; + +public: +// types + using particle_sequence = std::vector; +// methods + bool + deserialize( cParser &Input ); + void + initialize(); + void + bind( TDynamicObject const *Vehicle ); + void + bind( TAnimModel const *Node ); + // updates state of owned particles + void + update( double const Timedelta, bool const Onlydespawn ); + glm::vec3 const & + color() const { + return m_emitter.color; } + glm::dvec3 + location() const; + // provides access to bounding area data + scene::bounding_area const & + area() const { + return m_area; } + particle_sequence const & + sequence() const { + return m_particles; } + +private: +// types + enum class owner_type { + none = 0, + vehicle, + node + }; + + struct particle_emitter { + float inclination[ 2 ] { 0.f, 0.f }; + float velocity[ 2 ] { 1.f, 1.f }; + float size[ 2 ] { 1.f, 1.f }; + float opacity[ 2 ] { 1.f, 1.f }; + glm::vec3 color { 16.f / 255.f }; + + void deserialize( cParser &Input ); + void initialize( smoke_particle &Particle ); + }; + + using bounding_box = glm::dvec3[ 2 ]; // bounding box of owned particles + +// methods + // imports member data pair from the config file + bool + deserialize_mapping( cParser &Input ); + void + initialize( smoke_particle &Particle ); + // updates state of provided particle and bounding box. returns: true if particle is still alive afterwards, false otherwise + bool + update( smoke_particle &Particle, bounding_box &Boundingbox, double const Timedelta ); +// members + // config/inputs + // TBD: union and indicator, or just plain owner variables? + owner_type m_ownertype { owner_type::none }; + union { + TDynamicObject const * vehicle; + TAnimModel const * node; + } m_owner { nullptr }; // optional, scene item carrying this source + glm::dvec3 m_offset; // meters, 3d space; relative position of the source, either from the owner or the region centre + float m_spawnrate { 0.f }; // number of particles to spawn per second + particle_emitter m_emitter; +// bool m_inheritvelocity { false }; // whether spawned particle should receive velocity of its owner + // TODO: replace modifiers with configurable interpolator item allowing keyframe-based changes over time + fixedstep_modifier m_sizemodifier; // particle billboard size +// fixedstep_modifier m_colormodifier; // particle billboard color and opacity + fixedstep_modifier m_opacitymodifier; +// texture_handle m_texture { -1 }; // texture assigned to particle billboards + // current state + float m_spawncount { 0.f }; // number of particles to spawn during next update + particle_sequence m_particles; // collection of spawned particles + std::size_t m_max_particles; // maximum number of particles existing + scene::bounding_area m_area; // bounding sphere of owned particles +}; + + +// holds all particle emitters defined in the scene and updates their state +class particle_manager { + + friend opengl_renderer; + +public: +// types + using source_sequence = std::vector; +// constructors + particle_manager() = default; +// destructor +// ~particle_manager(); +// methods + // adds a new particle source of specified type, placing it in specified world location. returns: true on success, false if the specified type definition couldn't be located + bool + insert( std::string const &Sourcetemplate, glm::dvec3 const Location ); + bool + insert( std::string const &Sourcetemplate, TDynamicObject const *Vehicle, glm::dvec3 const Location ); + bool + insert( std::string const &Sourcetemplate, TAnimModel const *Node, glm::dvec3 const Location ); + // updates state of all owned emitters + void + update(); + // data access + source_sequence & + sequence() { + return m_sources; } + +// members + +private: +// types + using source_map = std::unordered_map; +// methods + smoke_source * + find( std::string const &Template ); +// members + source_map m_sourcetemplates; // cached particle emitter configurations + source_sequence m_sources; // all owned particle emitters +}; + + + +template +void +fixedstep_modifier::update( Type_ &Variable, double const Timedelta ) const { + // HACK: float cast to avoid vec3 and double mismatch + // TBD, TODO: replace with vector types specialization + auto const valuechange { ( + m_valuechangemodifier == nullptr ? + m_valuechange : + m_valuechange / *( m_valuechangemodifier ) ) }; + Variable += ( valuechange * static_cast( Timedelta ) ); + // clamp down to allowed value range + Variable = glm::max( Variable, m_valuelimits[ value_limit::min ] ); + Variable = glm::min( Variable, m_valuelimits[ value_limit::max ] ); +} + +template +void +fixedstep_modifier::deserialize( cParser &Input ) { + + if( Input.getToken() != "{" ) { return; } + + std::unordered_map const variablemap { + { "step:", m_valuechange }, + { "min:", m_valuelimits[ value_limit::min ] }, + { "max:", m_valuelimits[ value_limit::max ] } }; + + std::string key; + + while( ( false == ( ( key = Input.getToken( true, "\n\r\t ,;[]" ) ).empty() ) ) + && ( key != "}" ) ) { + + auto const lookup { variablemap.find( key ) }; + if( lookup == variablemap.end() ) { continue; } + + lookup->second = Input.getToken( true, "\n\r\t ,;[]" ); + } +} diff --git a/precipitation.cpp b/precipitation.cpp index 43feb56d..9f67cbee 100644 --- a/precipitation.cpp +++ b/precipitation.cpp @@ -98,11 +98,11 @@ basic_precipitation::init() { "_medium" ) }; if( Global.Weather == "rain:" ) { m_moverateweathertypefactor = 2.f; - m_texture = GfxRenderer.Fetch_Texture( "fx/rain" + densitysuffix ); + m_texture = GfxRenderer->Fetch_Texture( "fx/rain" + densitysuffix ); } else if( Global.Weather == "snow:" ) { m_moverateweathertypefactor = 1.25f; - m_texture = GfxRenderer.Fetch_Texture( "fx/snow" + densitysuffix ); + m_texture = GfxRenderer->Fetch_Texture( "fx/snow" + densitysuffix ); } return true; @@ -123,7 +123,8 @@ basic_precipitation::update() { m_camerapos = Global.pCamera.Pos; - // intercept sudden user-induced camera jumps + // intercept sudden user-induced camera jumps... + // ...from free fly mode change if( m_freeflymode != FreeFlyModeFlag ) { m_freeflymode = FreeFlyModeFlag; if( true == m_freeflymode ) { @@ -138,14 +139,17 @@ basic_precipitation::update() { } cameramove = glm::dvec3{ 0.0 }; } + // ...from jump between cab and window/mirror view if( m_windowopen != Global.CabWindowOpen ) { m_windowopen = Global.CabWindowOpen; cameramove = glm::dvec3{ 0.0 }; } + // ... from cab change if( ( simulation::Train != nullptr ) && ( simulation::Train->iCabn != m_activecab ) ) { m_activecab = simulation::Train->iCabn; cameramove = glm::dvec3{ 0.0 }; } + // ... from camera jump to another location if( glm::length( cameramove ) > 100.0 ) { cameramove = glm::dvec3{ 0.0 }; } @@ -159,7 +163,7 @@ basic_precipitation::update() { void basic_precipitation::render() { - GfxRenderer.Bind_Texture( m_texture ); + GfxRenderer->Bind_Texture( m_texture ); // cache entry state ::glPushClientAttrib( GL_CLIENT_VERTEX_ARRAY_BIT ); diff --git a/ref/glew/doc/advanced.html b/ref/glew/doc/advanced.html index b4c98bb6..8e617b6e 100644 --- a/ref/glew/doc/advanced.html +++ b/ref/glew/doc/advanced.html @@ -46,7 +46,7 @@ THE POSSIBILITY OF SUCH DAMAGE. - + @@ -75,7 +75,7 @@ THE POSSIBILITY OF SUCH DAMAGE.
Latest Release: 2.2.0
Latest Release: 2.1.0

GLEW Logo

- +
Last Update: 07-24-16
Last Update: 07-31-17
OpenGL Logo
GitHub Logo
diff --git a/ref/glew/doc/basic.html b/ref/glew/doc/basic.html index 4acb9b60..bc3497bc 100644 --- a/ref/glew/doc/basic.html +++ b/ref/glew/doc/basic.html @@ -46,7 +46,7 @@ THE POSSIBILITY OF SUCH DAMAGE.
- + @@ -75,7 +75,7 @@ THE POSSIBILITY OF SUCH DAMAGE.
Latest Release: 2.2.0
Latest Release: 2.1.0

GLEW Logo

- +
Last Update: 07-24-16
Last Update: 07-31-17
OpenGL Logo
GitHub Logo
diff --git a/ref/glew/doc/build.html b/ref/glew/doc/build.html index 1bf90a2e..8dd55808 100644 --- a/ref/glew/doc/build.html +++ b/ref/glew/doc/build.html @@ -46,7 +46,7 @@ THE POSSIBILITY OF SUCH DAMAGE.
- + @@ -75,7 +75,7 @@ THE POSSIBILITY OF SUCH DAMAGE.
Latest Release: 2.2.0
Latest Release: 2.1.0

GLEW Logo

- +
Last Update: 07-24-16
Last Update: 07-31-17
OpenGL Logo
GitHub Logo
diff --git a/ref/glew/doc/credits.html b/ref/glew/doc/credits.html index dd7e25d3..ecf88b13 100644 --- a/ref/glew/doc/credits.html +++ b/ref/glew/doc/credits.html @@ -46,7 +46,7 @@ THE POSSIBILITY OF SUCH DAMAGE.
- + @@ -75,7 +75,7 @@ THE POSSIBILITY OF SUCH DAMAGE.
Latest Release: 2.2.0
Latest Release: 2.1.0

GLEW Logo

- +
Last Update: 07-24-16
Last Update: 07-31-17
OpenGL Logo
GitHub Logo
diff --git a/ref/glew/doc/glew.html b/ref/glew/doc/glew.html index 0e755519..7216aac6 100644 --- a/ref/glew/doc/glew.html +++ b/ref/glew/doc/glew.html @@ -46,7 +46,7 @@ THE POSSIBILITY OF SUCH DAMAGE.
- + @@ -75,7 +75,7 @@ THE POSSIBILITY OF SUCH DAMAGE.
Latest Release: 2.2.0
Latest Release: 2.1.0

GLEW Logo

- +
Last Update: 07-24-16
Last Update: 07-31-17
OpenGL Logo
GitHub Logo
@@ -99,624 +99,824 @@ THE POSSIBILITY OF SUCH DAMAGE.

Supported OpenGL Extensions

- + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + - - + + + + - - - - - - - + + + + + + - - - - - - - - - - + + - + + + + + + + - + + + + + + + + + + + - - - - - + - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + - - + + + - - - - - - - + + + - + + - + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + - + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + +
1 3DFX_multisample
1 3DFX_multisample
2 3DFX_tbuffer
3 3DFX_texture_compression_FXT1

4 AMD_blend_minmax_factor
5 AMD_conservative_depth
6 AMD_debug_output
7 AMD_depth_clamp_separate
8 AMD_draw_buffers_blend
9 AMD_gcn_shader
10 AMD_gpu_shader_int64
11 AMD_interleaved_elements
12 AMD_multi_draw_indirect
13 AMD_name_gen_delete
14 AMD_occlusion_query_event
15 AMD_performance_monitor
16 AMD_pinned_memory
17 AMD_query_buffer_object
18 AMD_sample_positions
19 AMD_seamless_cubemap_per_texture
20 AMD_shader_atomic_counter_ops
21 AMD_shader_explicit_vertex_parameter
22 AMD_shader_stencil_export
23 AMD_shader_stencil_value_export
24 AMD_shader_trinary_minmax
25 AMD_sparse_texture
26 AMD_stencil_operation_extended
27 AMD_texture_texture4
28 AMD_transform_feedback3_lines_triangles
29 AMD_transform_feedback4
30 AMD_vertex_shader_layer
31 AMD_vertex_shader_tessellator
32 AMD_vertex_shader_viewport_index
5 AMD_compressed_3DC_texture
6 AMD_compressed_ATC_texture
7 AMD_conservative_depth
8 AMD_debug_output
9 AMD_depth_clamp_separate
10 AMD_draw_buffers_blend
11 AMD_framebuffer_sample_positions
12 AMD_gcn_shader
13 AMD_gpu_shader_half_float
14 AMD_gpu_shader_int16
15 AMD_gpu_shader_int64
16 AMD_interleaved_elements
17 AMD_multi_draw_indirect
18 AMD_name_gen_delete
19 AMD_occlusion_query_event
20 AMD_performance_monitor
21 AMD_pinned_memory
22 AMD_program_binary_Z400
23 AMD_query_buffer_object
24 AMD_sample_positions
25 AMD_seamless_cubemap_per_texture
26 AMD_shader_atomic_counter_ops
27 AMD_shader_ballot
28 AMD_shader_explicit_vertex_parameter
29 AMD_shader_stencil_export
30 AMD_shader_stencil_value_export
31 AMD_shader_trinary_minmax
32 AMD_sparse_texture
33 AMD_stencil_operation_extended
34 AMD_texture_gather_bias_lod
35 AMD_texture_texture4
36 AMD_transform_feedback3_lines_triangles
37 AMD_transform_feedback4
38 AMD_vertex_shader_layer
39 AMD_vertex_shader_tessellator
40 AMD_vertex_shader_viewport_index

33 ANGLE_depth_texture
34 ANGLE_framebuffer_blit
35 ANGLE_framebuffer_multisample
36 ANGLE_instanced_arrays
37 ANGLE_pack_reverse_row_order
38 ANGLE_program_binary
39 ANGLE_texture_compression_dxt1
40 ANGLE_texture_compression_dxt3
41 ANGLE_texture_compression_dxt5
42 ANGLE_texture_usage
43 ANGLE_timer_query
44 ANGLE_translated_shader_source
41 ANDROID_extension_pack_es31a

45 APPLE_aux_depth_stencil
46 APPLE_client_storage
47 APPLE_element_array
48 APPLE_fence
49 APPLE_float_pixels
50 APPLE_flush_buffer_range
51 APPLE_object_purgeable
52 APPLE_pixel_buffer
53 APPLE_rgb_422
54 APPLE_row_bytes
55 APPLE_specular_vector
56 APPLE_texture_range
57 APPLE_transform_hint
58 APPLE_vertex_array_object
59 APPLE_vertex_array_range
60 APPLE_vertex_program_evaluators
61 APPLE_ycbcr_422
42 ANGLE_depth_texture
43 ANGLE_framebuffer_blit
44 ANGLE_framebuffer_multisample
45 ANGLE_instanced_arrays
46 ANGLE_pack_reverse_row_order
47 ANGLE_program_binary
48 ANGLE_texture_compression_dxt1
49 ANGLE_texture_compression_dxt3
50 ANGLE_texture_compression_dxt5
51 ANGLE_texture_usage
52 ANGLE_timer_query
53 ANGLE_translated_shader_source

62 ARB_ES2_compatibility
63 ARB_ES3_1_compatibility
64 ARB_ES3_2_compatibility
65 ARB_ES3_compatibility
66 ARB_arrays_of_arrays
67 ARB_base_instance
68 ARB_bindless_texture
69 ARB_blend_func_extended
70 ARB_buffer_storage
71 ARB_cl_event
72 ARB_clear_buffer_object
73 ARB_clear_texture
74 ARB_clip_control
75 ARB_color_buffer_float
76 ARB_compatibility
77 ARB_compressed_texture_pixel_storage
78 ARB_compute_shader
79 ARB_compute_variable_group_size
80 ARB_conditional_render_inverted
81 ARB_conservative_depth
82 ARB_copy_buffer
83 ARB_copy_image
84 ARB_cull_distance
85 ARB_debug_output
86 ARB_depth_buffer_float
87 ARB_depth_clamp
88 ARB_depth_texture
89 ARB_derivative_control
90 ARB_direct_state_access
91 ARB_draw_buffers
92 ARB_draw_buffers_blend
93 ARB_draw_elements_base_vertex
94 ARB_draw_indirect
95 ARB_draw_instanced
96 ARB_enhanced_layouts
97 ARB_explicit_attrib_location
98 ARB_explicit_uniform_location
99 ARB_fragment_coord_conventions
100 ARB_fragment_layer_viewport
101 ARB_fragment_program
102 ARB_fragment_program_shadow
103 ARB_fragment_shader
104 ARB_fragment_shader_interlock
105 ARB_framebuffer_no_attachments
106 ARB_framebuffer_object
107 ARB_framebuffer_sRGB
108 ARB_geometry_shader4
109 ARB_get_program_binary
110 ARB_get_texture_sub_image
111 ARB_gl_spirv
112 ARB_gpu_shader5
113 ARB_gpu_shader_fp64
114 ARB_gpu_shader_int64
115 ARB_half_float_pixel
116 ARB_half_float_vertex
117 ARB_imaging
118 ARB_indirect_parameters
119 ARB_instanced_arrays
120 ARB_internalformat_query
121 ARB_internalformat_query2
122 ARB_invalidate_subdata
123 ARB_map_buffer_alignment
124 ARB_map_buffer_range
125 ARB_matrix_palette
126 ARB_multi_bind
127 ARB_multi_draw_indirect
128 ARB_multisample
129 ARB_multitexture
130 ARB_occlusion_query
131 ARB_occlusion_query2
132 ARB_parallel_shader_compile
133 ARB_pipeline_statistics_query
134 ARB_pixel_buffer_object
135 ARB_point_parameters
136 ARB_point_sprite
137 ARB_post_depth_coverage
138 ARB_program_interface_query
139 ARB_provoking_vertex
140 ARB_query_buffer_object
141 ARB_robust_buffer_access_behavior
142 ARB_robustness
143 ARB_robustness_application_isolation
144 ARB_robustness_share_group_isolation
145 ARB_sample_locations
146 ARB_sample_shading
147 ARB_sampler_objects
148 ARB_seamless_cube_map
149 ARB_seamless_cubemap_per_texture
150 ARB_separate_shader_objects
151 ARB_shader_atomic_counter_ops
152 ARB_shader_atomic_counters
153 ARB_shader_ballot
154 ARB_shader_bit_encoding
155 ARB_shader_clock
156 ARB_shader_draw_parameters
157 ARB_shader_group_vote
158 ARB_shader_image_load_store
159 ARB_shader_image_size
160 ARB_shader_objects
161 ARB_shader_precision
162 ARB_shader_stencil_export
163 ARB_shader_storage_buffer_object
164 ARB_shader_subroutine
165 ARB_shader_texture_image_samples
166 ARB_shader_texture_lod
167 ARB_shader_viewport_layer_array
168 ARB_shading_language_100
169 ARB_shading_language_420pack
170 ARB_shading_language_include
171 ARB_shading_language_packing
172 ARB_shadow
173 ARB_shadow_ambient
174 ARB_sparse_buffer
175 ARB_sparse_texture
176 ARB_sparse_texture2
177 ARB_sparse_texture_clamp
178 ARB_stencil_texturing
179 ARB_sync
180 ARB_tessellation_shader
181 ARB_texture_barrier
182 ARB_texture_border_clamp
183 ARB_texture_buffer_object
184 ARB_texture_buffer_object_rgb32
185 ARB_texture_buffer_range
186 ARB_texture_compression
187 ARB_texture_compression_bptc
188 ARB_texture_compression_rgtc
189 ARB_texture_cube_map
190 ARB_texture_cube_map_array
191 ARB_texture_env_add
192 ARB_texture_env_combine
193 ARB_texture_env_crossbar
194 ARB_texture_env_dot3
195 ARB_texture_filter_minmax
196 ARB_texture_float
197 ARB_texture_gather
198 ARB_texture_mirror_clamp_to_edge
199 ARB_texture_mirrored_repeat
200 ARB_texture_multisample
201 ARB_texture_non_power_of_two
202 ARB_texture_query_levels
203 ARB_texture_query_lod
204 ARB_texture_rectangle
205 ARB_texture_rg
206 ARB_texture_rgb10_a2ui
207 ARB_texture_stencil8
208 ARB_texture_storage
209 ARB_texture_storage_multisample
210 ARB_texture_swizzle
211 ARB_texture_view
212 ARB_timer_query
213 ARB_transform_feedback2
214 ARB_transform_feedback3
215 ARB_transform_feedback_instanced
216 ARB_transform_feedback_overflow_query
217 ARB_transpose_matrix
218 ARB_uniform_buffer_object
219 ARB_vertex_array_bgra
220 ARB_vertex_array_object
221 ARB_vertex_attrib_64bit
222 ARB_vertex_attrib_binding
223 ARB_vertex_blend
224 ARB_vertex_buffer_object
225 ARB_vertex_program
226 ARB_vertex_shader
227 ARB_vertex_type_10f_11f_11f_rev
228 ARB_vertex_type_2_10_10_10_rev
229 ARB_viewport_array
230 ARB_window_pos
54 APPLE_aux_depth_stencil
55 APPLE_client_storage
56 APPLE_clip_distance
57 APPLE_color_buffer_packed_float
58 APPLE_copy_texture_levels
59 APPLE_element_array
60 APPLE_fence
61 APPLE_float_pixels
62 APPLE_flush_buffer_range
63 APPLE_framebuffer_multisample
64 APPLE_object_purgeable
65 APPLE_pixel_buffer
66 APPLE_rgb_422
67 APPLE_row_bytes
68 APPLE_specular_vector
69 APPLE_sync
70 APPLE_texture_2D_limited_npot
71 APPLE_texture_format_BGRA8888
72 APPLE_texture_max_level
73 APPLE_texture_packed_float
74 APPLE_texture_range
75 APPLE_transform_hint
76 APPLE_vertex_array_object
77 APPLE_vertex_array_range
78 APPLE_vertex_program_evaluators
79 APPLE_ycbcr_422

231 ATIX_point_sprites
232 ATIX_texture_env_combine3
233 ATIX_texture_env_route
234 ATIX_vertex_shader_output_point_size
80 ARB_ES2_compatibility
81 ARB_ES3_1_compatibility
82 ARB_ES3_2_compatibility
83 ARB_ES3_compatibility
84 ARB_arrays_of_arrays
85 ARB_base_instance
86 ARB_bindless_texture
87 ARB_blend_func_extended
88 ARB_buffer_storage
89 ARB_cl_event
90 ARB_clear_buffer_object
91 ARB_clear_texture
92 ARB_clip_control
93 ARB_color_buffer_float
94 ARB_compatibility
95 ARB_compressed_texture_pixel_storage
96 ARB_compute_shader
97 ARB_compute_variable_group_size
98 ARB_conditional_render_inverted
99 ARB_conservative_depth
100 ARB_copy_buffer
101 ARB_copy_image
102 ARB_cull_distance
103 ARB_debug_output
104 ARB_depth_buffer_float
105 ARB_depth_clamp
106 ARB_depth_texture
107 ARB_derivative_control
108 ARB_direct_state_access
109 ARB_draw_buffers
110 ARB_draw_buffers_blend
111 ARB_draw_elements_base_vertex
112 ARB_draw_indirect
113 ARB_draw_instanced
114 ARB_enhanced_layouts
115 ARB_explicit_attrib_location
116 ARB_explicit_uniform_location
117 ARB_fragment_coord_conventions
118 ARB_fragment_layer_viewport
119 ARB_fragment_program
120 ARB_fragment_program_shadow
121 ARB_fragment_shader
122 ARB_fragment_shader_interlock
123 ARB_framebuffer_no_attachments
124 ARB_framebuffer_object
125 ARB_framebuffer_sRGB
126 ARB_geometry_shader4
127 ARB_get_program_binary
128 ARB_get_texture_sub_image
129 ARB_gl_spirv
130 ARB_gpu_shader5
131 ARB_gpu_shader_fp64
132 ARB_gpu_shader_int64
133 ARB_half_float_pixel
134 ARB_half_float_vertex
135 ARB_imaging
136 ARB_indirect_parameters
137 ARB_instanced_arrays
138 ARB_internalformat_query
139 ARB_internalformat_query2
140 ARB_invalidate_subdata
141 ARB_map_buffer_alignment
142 ARB_map_buffer_range
143 ARB_matrix_palette
144 ARB_multi_bind
145 ARB_multi_draw_indirect
146 ARB_multisample
147 ARB_multitexture
148 ARB_occlusion_query
149 ARB_occlusion_query2
150 ARB_parallel_shader_compile
151 ARB_pipeline_statistics_query
152 ARB_pixel_buffer_object
153 ARB_point_parameters
154 ARB_point_sprite
155 ARB_polygon_offset_clamp
156 ARB_post_depth_coverage
157 ARB_program_interface_query
158 ARB_provoking_vertex
159 ARB_query_buffer_object
160 ARB_robust_buffer_access_behavior
161 ARB_robustness
162 ARB_robustness_application_isolation
163 ARB_robustness_share_group_isolation
164 ARB_sample_locations
165 ARB_sample_shading
166 ARB_sampler_objects
167 ARB_seamless_cube_map
168 ARB_seamless_cubemap_per_texture
169 ARB_separate_shader_objects
170 ARB_shader_atomic_counter_ops
171 ARB_shader_atomic_counters
172 ARB_shader_ballot
173 ARB_shader_bit_encoding
174 ARB_shader_clock
175 ARB_shader_draw_parameters
176 ARB_shader_group_vote
177 ARB_shader_image_load_store
178 ARB_shader_image_size
179 ARB_shader_objects
180 ARB_shader_precision
181 ARB_shader_stencil_export
182 ARB_shader_storage_buffer_object
183 ARB_shader_subroutine
184 ARB_shader_texture_image_samples
185 ARB_shader_texture_lod
186 ARB_shader_viewport_layer_array
187 ARB_shading_language_100
188 ARB_shading_language_420pack
189 ARB_shading_language_include
190 ARB_shading_language_packing
191 ARB_shadow
192 ARB_shadow_ambient
193 ARB_sparse_buffer
194 ARB_sparse_texture
195 ARB_sparse_texture2
196 ARB_sparse_texture_clamp
197 ARB_spirv_extensions
198 ARB_stencil_texturing
199 ARB_sync
200 ARB_tessellation_shader
201 ARB_texture_barrier
202 ARB_texture_border_clamp
203 ARB_texture_buffer_object
204 ARB_texture_buffer_object_rgb32
205 ARB_texture_buffer_range
206 ARB_texture_compression
207 ARB_texture_compression_bptc
208 ARB_texture_compression_rgtc
209 ARB_texture_cube_map
210 ARB_texture_cube_map_array
211 ARB_texture_env_add
212 ARB_texture_env_combine
213 ARB_texture_env_crossbar
214 ARB_texture_env_dot3
215 ARB_texture_filter_anisotropic
216 ARB_texture_filter_minmax
217 ARB_texture_float
218 ARB_texture_gather
219 ARB_texture_mirror_clamp_to_edge
220 ARB_texture_mirrored_repeat
221 ARB_texture_multisample
222 ARB_texture_non_power_of_two
223 ARB_texture_query_levels
224 ARB_texture_query_lod
225 ARB_texture_rectangle
226 ARB_texture_rg
227 ARB_texture_rgb10_a2ui
228 ARB_texture_stencil8
229 ARB_texture_storage
230 ARB_texture_storage_multisample
231 ARB_texture_swizzle
232 ARB_texture_view
233 ARB_timer_query
234 ARB_transform_feedback2
235 ARB_transform_feedback3
236 ARB_transform_feedback_instanced
237 ARB_transform_feedback_overflow_query
238 ARB_transpose_matrix
239 ARB_uniform_buffer_object
240 ARB_vertex_array_bgra
241 ARB_vertex_array_object
242 ARB_vertex_attrib_64bit
243 ARB_vertex_attrib_binding
244 ARB_vertex_blend
245 ARB_vertex_buffer_object
246 ARB_vertex_program
247 ARB_vertex_shader
248 ARB_vertex_type_10f_11f_11f_rev
249 ARB_vertex_type_2_10_10_10_rev
250 ARB_viewport_array
251 ARB_window_pos

235 ATI_draw_buffers
236 ATI_element_array
237 ATI_envmap_bumpmap
238 ATI_fragment_shader
239 ATI_map_object_buffer
240 ATI_meminfo
241 ATI_pn_triangles
242 ATI_separate_stencil
243 ATI_shader_texture_lod
244 ATI_text_fragment_shader
245 ATI_texture_compression_3dc
246 ATI_texture_env_combine3
247 ATI_texture_float
248 ATI_texture_mirror_once
249 ATI_vertex_array_object
250 ATI_vertex_attrib_array_object
251 ATI_vertex_streams
252 ARM_mali_program_binary
253 ARM_mali_shader_binary
254 ARM_rgba8
255 ARM_shader_framebuffer_fetch
256 ARM_shader_framebuffer_fetch_depth_stencil

252 EGL_NV_robustness_video_memory_purge
257 ATIX_point_sprites
258 ATIX_texture_env_combine3
259 ATIX_texture_env_route
260 ATIX_vertex_shader_output_point_size

253 EXT_422_pixels
254 EXT_Cg_shader
255 EXT_abgr
256 EXT_bgra
257 EXT_bindable_uniform
258 EXT_blend_color
259 EXT_blend_equation_separate
260 EXT_blend_func_separate
261 EXT_blend_logic_op
262 EXT_blend_minmax
263 EXT_blend_subtract
264 EXT_clip_volume_hint
265 EXT_cmyka
266 EXT_color_subtable
267 EXT_compiled_vertex_array
268 EXT_convolution
269 EXT_coordinate_frame
270 EXT_copy_texture
271 EXT_cull_vertex
272 EXT_debug_label
273 EXT_debug_marker
274 EXT_depth_bounds_test
275 EXT_direct_state_access
276 EXT_draw_buffers2
277 EXT_draw_instanced
278 EXT_draw_range_elements
279 EXT_fog_coord
280 EXT_fragment_lighting
281 EXT_framebuffer_blit
282 EXT_framebuffer_multisample
283 EXT_framebuffer_multisample_blit_scaled
284 EXT_framebuffer_object
285 EXT_framebuffer_sRGB
286 EXT_geometry_shader4
287 EXT_gpu_program_parameters
288 EXT_gpu_shader4
289 EXT_histogram
290 EXT_index_array_formats
291 EXT_index_func
292 EXT_index_material
293 EXT_index_texture
294 EXT_light_texture
295 EXT_misc_attribute
296 EXT_multi_draw_arrays
297 EXT_multisample
298 EXT_packed_depth_stencil
299 EXT_packed_float
300 EXT_packed_pixels
301 EXT_paletted_texture
302 EXT_pixel_buffer_object
303 EXT_pixel_transform
304 EXT_pixel_transform_color_table
305 EXT_point_parameters
306 EXT_polygon_offset
307 EXT_polygon_offset_clamp
308 EXT_post_depth_coverage
309 EXT_provoking_vertex
310 EXT_raster_multisample
311 EXT_rescale_normal
312 EXT_scene_marker
313 EXT_secondary_color
314 EXT_separate_shader_objects
315 EXT_separate_specular_color
316 EXT_shader_image_load_formatted
317 EXT_shader_image_load_store
318 EXT_shader_integer_mix
319 EXT_shadow_funcs
320 EXT_shared_texture_palette
321 EXT_sparse_texture2
322 EXT_stencil_clear_tag
323 EXT_stencil_two_side
324 EXT_stencil_wrap
325 EXT_subtexture
326 EXT_texture
327 EXT_texture3D
328 EXT_texture_array
329 EXT_texture_buffer_object
330 EXT_texture_compression_dxt1
331 EXT_texture_compression_latc
332 EXT_texture_compression_rgtc
333 EXT_texture_compression_s3tc
334 EXT_texture_cube_map
335 EXT_texture_edge_clamp
336 EXT_texture_env
337 EXT_texture_env_add
338 EXT_texture_env_combine
339 EXT_texture_env_dot3
340 EXT_texture_filter_anisotropic
341 EXT_texture_filter_minmax
342 EXT_texture_integer
343 EXT_texture_lod_bias
344 EXT_texture_mirror_clamp
345 EXT_texture_object
346 EXT_texture_perturb_normal
347 EXT_texture_rectangle
348 EXT_texture_sRGB
349 EXT_texture_sRGB_decode
350 EXT_texture_shared_exponent
351 EXT_texture_snorm
352 EXT_texture_swizzle
353 EXT_timer_query
354 EXT_transform_feedback
355 EXT_vertex_array
356 EXT_vertex_array_bgra
357 EXT_vertex_attrib_64bit
358 EXT_vertex_shader
359 EXT_vertex_weighting
360 EXT_window_rectangles
361 EXT_x11_sync_object
261 ATI_draw_buffers
262 ATI_element_array
263 ATI_envmap_bumpmap
264 ATI_fragment_shader
265 ATI_map_object_buffer
266 ATI_meminfo
267 ATI_pn_triangles
268 ATI_separate_stencil
269 ATI_shader_texture_lod
270 ATI_text_fragment_shader
271 ATI_texture_compression_3dc
272 ATI_texture_env_combine3
273 ATI_texture_float
274 ATI_texture_mirror_once
275 ATI_vertex_array_object
276 ATI_vertex_attrib_array_object
277 ATI_vertex_streams

362 GREMEDY_frame_terminator
363 GREMEDY_string_marker
278 EGL_KHR_context_flush_control
279 EGL_NV_robustness_video_memory_purge

364 HP_convolution_border_modes
365 HP_image_transform
366 HP_occlusion_test
367 HP_texture_lighting
280 EXT_422_pixels
281 EXT_Cg_shader
282 EXT_EGL_image_array
283 EXT_YUV_target
284 EXT_abgr
285 EXT_base_instance
286 EXT_bgra
287 EXT_bindable_uniform
288 EXT_blend_color
289 EXT_blend_equation_separate
290 EXT_blend_func_extended
291 EXT_blend_func_separate
292 EXT_blend_logic_op
293 EXT_blend_minmax
294 EXT_blend_subtract
295 EXT_buffer_storage
296 EXT_clear_texture
297 EXT_clip_cull_distance
298 EXT_clip_volume_hint
299 EXT_cmyka
300 EXT_color_buffer_float
301 EXT_color_buffer_half_float
302 EXT_color_subtable
303 EXT_compiled_vertex_array
304 EXT_compressed_ETC1_RGB8_sub_texture
305 EXT_conservative_depth
306 EXT_convolution
307 EXT_coordinate_frame
308 EXT_copy_image
309 EXT_copy_texture
310 EXT_cull_vertex
311 EXT_debug_label
312 EXT_debug_marker
313 EXT_depth_bounds_test
314 EXT_direct_state_access
315 EXT_discard_framebuffer
316 EXT_draw_buffers
317 EXT_draw_buffers2
318 EXT_draw_buffers_indexed
319 EXT_draw_elements_base_vertex
320 EXT_draw_instanced
321 EXT_draw_range_elements
322 EXT_external_buffer
323 EXT_float_blend
324 EXT_fog_coord
325 EXT_frag_depth
326 EXT_fragment_lighting
327 EXT_framebuffer_blit
328 EXT_framebuffer_multisample
329 EXT_framebuffer_multisample_blit_scaled
330 EXT_framebuffer_object
331 EXT_framebuffer_sRGB
332 EXT_geometry_point_size
333 EXT_geometry_shader
334 EXT_geometry_shader4
335 EXT_gpu_program_parameters
336 EXT_gpu_shader4
337 EXT_gpu_shader5
338 EXT_histogram
339 EXT_index_array_formats
340 EXT_index_func
341 EXT_index_material
342 EXT_index_texture
343 EXT_instanced_arrays
344 EXT_light_texture
345 EXT_map_buffer_range
346 EXT_memory_object
347 EXT_memory_object_fd
348 EXT_memory_object_win32
349 EXT_misc_attribute
350 EXT_multi_draw_arrays
351 EXT_multi_draw_indirect
352 EXT_multiple_textures
353 EXT_multisample
354 EXT_multisample_compatibility
355 EXT_multisampled_render_to_texture
356 EXT_multisampled_render_to_texture2
357 EXT_multiview_draw_buffers
358 EXT_packed_depth_stencil
359 EXT_packed_float
360 EXT_packed_pixels
361 EXT_paletted_texture
362 EXT_pixel_buffer_object
363 EXT_pixel_transform
364 EXT_pixel_transform_color_table
365 EXT_point_parameters
366 EXT_polygon_offset
367 EXT_polygon_offset_clamp
368 EXT_post_depth_coverage
369 EXT_provoking_vertex
370 EXT_pvrtc_sRGB
371 EXT_raster_multisample
372 EXT_read_format_bgra
373 EXT_render_snorm
374 EXT_rescale_normal
375 EXT_sRGB
376 EXT_sRGB_write_control
377 EXT_scene_marker
378 EXT_secondary_color
379 EXT_semaphore
380 EXT_semaphore_fd
381 EXT_semaphore_win32
382 EXT_separate_shader_objects
383 EXT_separate_specular_color
384 EXT_shader_framebuffer_fetch
385 EXT_shader_group_vote
386 EXT_shader_image_load_formatted
387 EXT_shader_image_load_store
388 EXT_shader_implicit_conversions
389 EXT_shader_integer_mix
390 EXT_shader_io_blocks
391 EXT_shader_non_constant_global_initializers
392 EXT_shader_pixel_local_storage
393 EXT_shader_pixel_local_storage2
394 EXT_shader_texture_lod
395 EXT_shadow_funcs
396 EXT_shadow_samplers
397 EXT_shared_texture_palette
398 EXT_sparse_texture
399 EXT_sparse_texture2
400 EXT_stencil_clear_tag
401 EXT_stencil_two_side
402 EXT_stencil_wrap
403 EXT_subtexture
404 EXT_texture
405 EXT_texture3D
406 EXT_texture_array
407 EXT_texture_buffer_object
408 EXT_texture_compression_astc_decode_mode
409 EXT_texture_compression_astc_decode_mode_rgb9e5
410 EXT_texture_compression_bptc
411 EXT_texture_compression_dxt1
412 EXT_texture_compression_latc
413 EXT_texture_compression_rgtc
414 EXT_texture_compression_s3tc
415 EXT_texture_cube_map
416 EXT_texture_cube_map_array
417 EXT_texture_edge_clamp
418 EXT_texture_env
419 EXT_texture_env_add
420 EXT_texture_env_combine
421 EXT_texture_env_dot3
422 EXT_texture_filter_anisotropic
423 EXT_texture_filter_minmax
424 EXT_texture_format_BGRA8888
425 EXT_texture_integer
426 EXT_texture_lod_bias
427 EXT_texture_mirror_clamp
428 EXT_texture_norm16
429 EXT_texture_object
430 EXT_texture_perturb_normal
431 EXT_texture_rectangle
432 EXT_texture_rg
433 EXT_texture_sRGB
434 EXT_texture_sRGB_R8
435 EXT_texture_sRGB_RG8
436 EXT_texture_sRGB_decode
437 EXT_texture_shared_exponent
438 EXT_texture_snorm
439 EXT_texture_storage
440 EXT_texture_swizzle
441 EXT_texture_type_2_10_10_10_REV
442 EXT_texture_view
443 EXT_timer_query
444 EXT_transform_feedback
445 EXT_unpack_subimage
446 EXT_vertex_array
447 EXT_vertex_array_bgra
448 EXT_vertex_array_setXXX
449 EXT_vertex_attrib_64bit
450 EXT_vertex_shader
451 EXT_vertex_weighting
452 EXT_win32_keyed_mutex
453 EXT_window_rectangles
454 EXT_x11_sync_object

368 IBM_cull_vertex
369 IBM_multimode_draw_arrays
370 IBM_rasterpos_clip
371 IBM_static_data
372 IBM_texture_mirrored_repeat
373 IBM_vertex_array_lists
455 GREMEDY_frame_terminator
456 GREMEDY_string_marker

374 INGR_color_clamp
375 INGR_interlace_read
457 HP_convolution_border_modes
458 HP_image_transform
459 HP_occlusion_test
460 HP_texture_lighting

376 INTEL_conservative_rasterization
377 INTEL_fragment_shader_ordering
378 INTEL_framebuffer_CMAA
379 INTEL_map_texture
380 INTEL_parallel_arrays
381 INTEL_performance_query
382 INTEL_texture_scissor
461 IBM_cull_vertex
462 IBM_multimode_draw_arrays
463 IBM_rasterpos_clip
464 IBM_static_data
465 IBM_texture_mirrored_repeat
466 IBM_vertex_array_lists

383 KHR_blend_equation_advanced
384 KHR_blend_equation_advanced_coherent
385 KHR_context_flush_control
386 KHR_debug
387 KHR_no_error
388 KHR_robust_buffer_access_behavior
389 KHR_robustness
390 KHR_texture_compression_astc_hdr
391 KHR_texture_compression_astc_ldr
392 KHR_texture_compression_astc_sliced_3d
467 INGR_color_clamp
468 INGR_interlace_read

393 KTX_buffer_region
469 INTEL_conservative_rasterization
470 INTEL_fragment_shader_ordering
471 INTEL_framebuffer_CMAA
472 INTEL_map_texture
473 INTEL_parallel_arrays
474 INTEL_performance_query
475 INTEL_texture_scissor

394 MESAX_texture_stack
476 KHR_blend_equation_advanced
477 KHR_blend_equation_advanced_coherent
478 KHR_context_flush_control
479 KHR_debug
480 KHR_no_error
481 KHR_parallel_shader_compile
482 KHR_robust_buffer_access_behavior
483 KHR_robustness
484 KHR_texture_compression_astc_hdr
485 KHR_texture_compression_astc_ldr
486 KHR_texture_compression_astc_sliced_3d

395 MESA_pack_invert
396 MESA_resize_buffers
397 MESA_shader_integer_functions
398 MESA_window_pos
399 MESA_ycbcr_texture
487 KTX_buffer_region

400 NVX_blend_equation_advanced_multi_draw_buffers
401 NVX_conditional_render
402 NVX_gpu_memory_info
403 NVX_linked_gpu_multicast
488 MESAX_texture_stack

404 NV_bindless_multi_draw_indirect
405 NV_bindless_multi_draw_indirect_count
406 NV_bindless_texture
407 NV_blend_equation_advanced
408 NV_blend_equation_advanced_coherent
409 NV_blend_square
410 NV_clip_space_w_scaling
411 NV_command_list
412 NV_compute_program5
413 NV_conditional_render
414 NV_conservative_raster
415 NV_conservative_raster_dilate
416 NV_conservative_raster_pre_snap_triangles
417 NV_copy_depth_to_color
418 NV_copy_image
419 NV_deep_texture3D
420 NV_depth_buffer_float
421 NV_depth_clamp
422 NV_depth_range_unclamped
423 NV_draw_texture
424 NV_draw_vulkan_image
425 NV_evaluators
426 NV_explicit_multisample
427 NV_fence
428 NV_fill_rectangle
429 NV_float_buffer
430 NV_fog_distance
431 NV_fragment_coverage_to_color
432 NV_fragment_program
433 NV_fragment_program2
434 NV_fragment_program4
435 NV_fragment_program_option
436 NV_fragment_shader_interlock
437 NV_framebuffer_mixed_samples
438 NV_framebuffer_multisample_coverage
439 NV_geometry_program4
440 NV_geometry_shader4
441 NV_geometry_shader_passthrough
442 NV_gpu_multicast
443 NV_gpu_program4
444 NV_gpu_program5
445 NV_gpu_program5_mem_extended
446 NV_gpu_program_fp64
447 NV_gpu_shader5
448 NV_half_float
449 NV_internalformat_sample_query
450 NV_light_max_exponent
451 NV_multisample_coverage
452 NV_multisample_filter_hint
453 NV_occlusion_query
454 NV_packed_depth_stencil
455 NV_parameter_buffer_object
456 NV_parameter_buffer_object2
457 NV_path_rendering
458 NV_path_rendering_shared_edge
459 NV_pixel_data_range
460 NV_point_sprite
461 NV_present_video
462 NV_primitive_restart
463 NV_register_combiners
464 NV_register_combiners2
465 NV_robustness_video_memory_purge
466 NV_sample_locations
467 NV_sample_mask_override_coverage
468 NV_shader_atomic_counters
469 NV_shader_atomic_float
470 NV_shader_atomic_float64
471 NV_shader_atomic_fp16_vector
472 NV_shader_atomic_int64
473 NV_shader_buffer_load
474 NV_shader_storage_buffer_object
475 NV_shader_thread_group
476 NV_shader_thread_shuffle
477 NV_stereo_view_rendering
478 NV_tessellation_program5
479 NV_texgen_emboss
480 NV_texgen_reflection
481 NV_texture_barrier
482 NV_texture_compression_vtc
483 NV_texture_env_combine4
484 NV_texture_expand_normal
485 NV_texture_multisample
486 NV_texture_rectangle
487 NV_texture_shader
488 NV_texture_shader2
489 NV_texture_shader3
490 NV_transform_feedback
491 NV_transform_feedback2
492 NV_uniform_buffer_unified_memory
493 NV_vdpau_interop
494 NV_vertex_array_range
495 NV_vertex_array_range2
496 NV_vertex_attrib_integer_64bit
497 NV_vertex_buffer_unified_memory
498 NV_vertex_program
499 NV_vertex_program1_1
500 NV_vertex_program2
501 NV_vertex_program2_option
502 NV_vertex_program3
503 NV_vertex_program4
504 NV_video_capture
505 NV_viewport_array2
506 NV_viewport_swizzle
489 MESA_pack_invert
490 MESA_resize_buffers
491 MESA_shader_integer_functions
492 MESA_window_pos
493 MESA_ycbcr_texture

507 OES_byte_coordinates
508 OES_compressed_paletted_texture
509 OES_read_format
510 OES_single_precision
494 NVX_blend_equation_advanced_multi_draw_buffers
495 NVX_conditional_render
496 NVX_gpu_memory_info
497 NVX_linked_gpu_multicast

511 OML_interlace
512 OML_resample
513 OML_subsample
498 NV_3dvision_settings
499 NV_EGL_stream_consumer_external
500 NV_alpha_to_coverage_dither_control
501 NV_bgr
502 NV_bindless_multi_draw_indirect
503 NV_bindless_multi_draw_indirect_count
504 NV_bindless_texture
505 NV_blend_equation_advanced
506 NV_blend_equation_advanced_coherent
507 NV_blend_minmax_factor
508 NV_blend_square
509 NV_clip_space_w_scaling
510 NV_command_list
511 NV_compute_program5
512 NV_conditional_render
513 NV_conservative_raster
514 NV_conservative_raster_dilate
515 NV_conservative_raster_pre_snap_triangles
516 NV_copy_buffer
517 NV_copy_depth_to_color
518 NV_copy_image
519 NV_deep_texture3D
520 NV_depth_buffer_float
521 NV_depth_clamp
522 NV_depth_range_unclamped
523 NV_draw_buffers
524 NV_draw_instanced
525 NV_draw_texture
526 NV_draw_vulkan_image
527 NV_evaluators
528 NV_explicit_attrib_location
529 NV_explicit_multisample
530 NV_fbo_color_attachments
531 NV_fence
532 NV_fill_rectangle
533 NV_float_buffer
534 NV_fog_distance
535 NV_fragment_coverage_to_color
536 NV_fragment_program
537 NV_fragment_program2
538 NV_fragment_program4
539 NV_fragment_program_option
540 NV_fragment_shader_interlock
541 NV_framebuffer_blit
542 NV_framebuffer_mixed_samples
543 NV_framebuffer_multisample
544 NV_framebuffer_multisample_coverage
545 NV_generate_mipmap_sRGB
546 NV_geometry_program4
547 NV_geometry_shader4
548 NV_geometry_shader_passthrough
549 NV_gpu_multicast
550 NV_gpu_program4
551 NV_gpu_program5
552 NV_gpu_program5_mem_extended
553 NV_gpu_program_fp64
554 NV_gpu_shader5
555 NV_half_float
556 NV_image_formats
557 NV_instanced_arrays
558 NV_internalformat_sample_query
559 NV_light_max_exponent
560 NV_multisample_coverage
561 NV_multisample_filter_hint
562 NV_non_square_matrices
563 NV_occlusion_query
564 NV_pack_subimage
565 NV_packed_depth_stencil
566 NV_packed_float
567 NV_packed_float_linear
568 NV_parameter_buffer_object
569 NV_parameter_buffer_object2
570 NV_path_rendering
571 NV_path_rendering_shared_edge
572 NV_pixel_buffer_object
573 NV_pixel_data_range
574 NV_platform_binary
575 NV_point_sprite
576 NV_polygon_mode
577 NV_present_video
578 NV_primitive_restart
579 NV_read_depth
580 NV_read_depth_stencil
581 NV_read_stencil
582 NV_register_combiners
583 NV_register_combiners2
584 NV_robustness_video_memory_purge
585 NV_sRGB_formats
586 NV_sample_locations
587 NV_sample_mask_override_coverage
588 NV_shader_atomic_counters
589 NV_shader_atomic_float
590 NV_shader_atomic_float64
591 NV_shader_atomic_fp16_vector
592 NV_shader_atomic_int64
593 NV_shader_buffer_load
594 NV_shader_noperspective_interpolation
595 NV_shader_storage_buffer_object
596 NV_shader_thread_group
597 NV_shader_thread_shuffle
598 NV_shadow_samplers_array
599 NV_shadow_samplers_cube
600 NV_stereo_view_rendering
601 NV_tessellation_program5
602 NV_texgen_emboss
603 NV_texgen_reflection
604 NV_texture_array
605 NV_texture_barrier
606 NV_texture_border_clamp
607 NV_texture_compression_latc
608 NV_texture_compression_s3tc
609 NV_texture_compression_s3tc_update
610 NV_texture_compression_vtc
611 NV_texture_env_combine4
612 NV_texture_expand_normal
613 NV_texture_multisample
614 NV_texture_npot_2D_mipmap
615 NV_texture_rectangle
616 NV_texture_rectangle_compressed
617 NV_texture_shader
618 NV_texture_shader2
619 NV_texture_shader3
620 NV_transform_feedback
621 NV_transform_feedback2
622 NV_uniform_buffer_unified_memory
623 NV_vdpau_interop
624 NV_vertex_array_range
625 NV_vertex_array_range2
626 NV_vertex_attrib_integer_64bit
627 NV_vertex_buffer_unified_memory
628 NV_vertex_program
629 NV_vertex_program1_1
630 NV_vertex_program2
631 NV_vertex_program2_option
632 NV_vertex_program3
633 NV_vertex_program4
634 NV_video_capture
635 NV_viewport_array
636 NV_viewport_array2
637 NV_viewport_swizzle

514 OVR_multiview
515 OVR_multiview2
638 OES_byte_coordinates

516 PGI_misc_hints
517 PGI_vertex_hints
639 OML_interlace
640 OML_resample
641 OML_subsample

518 REGAL_ES1_0_compatibility
519 REGAL_ES1_1_compatibility
520 REGAL_enable
521 REGAL_error_string
522 REGAL_extension_query
523 REGAL_log
524 REGAL_proc_address
642 OVR_multiview
643 OVR_multiview2
644 OVR_multiview_multisampled_render_to_texture

525 REND_screen_coordinates
645 PGI_misc_hints
646 PGI_vertex_hints

526 S3_s3tc
647 QCOM_alpha_test
648 QCOM_binning_control
649 QCOM_driver_control
650 QCOM_extended_get
651 QCOM_extended_get2
652 QCOM_framebuffer_foveated
653 QCOM_perfmon_global_mode
654 QCOM_shader_framebuffer_fetch_noncoherent
655 QCOM_tiled_rendering
656 QCOM_writeonly_rendering

527 SGIS_color_range
528 SGIS_detail_texture
529 SGIS_fog_function
530 SGIS_generate_mipmap
531 SGIS_multisample
532 SGIS_pixel_texture
533 SGIS_point_line_texgen
534 SGIS_sharpen_texture
535 SGIS_texture4D
536 SGIS_texture_border_clamp
537 SGIS_texture_edge_clamp
538 SGIS_texture_filter4
539 SGIS_texture_lod
540 SGIS_texture_select
657 REGAL_ES1_0_compatibility
658 REGAL_ES1_1_compatibility
659 REGAL_enable
660 REGAL_error_string
661 REGAL_extension_query
662 REGAL_log
663 REGAL_proc_address

541 SGIX_async
542 SGIX_async_histogram
543 SGIX_async_pixel
544 SGIX_blend_alpha_minmax
545 SGIX_clipmap
546 SGIX_convolution_accuracy
547 SGIX_depth_texture
548 SGIX_flush_raster
549 SGIX_fog_offset
550 SGIX_fog_texture
551 SGIX_fragment_specular_lighting
552 SGIX_framezoom
553 SGIX_interlace
554 SGIX_ir_instrument1
555 SGIX_list_priority
556 SGIX_pixel_texture
557 SGIX_pixel_texture_bits
558 SGIX_reference_plane
559 SGIX_resample
560 SGIX_shadow
561 SGIX_shadow_ambient
562 SGIX_sprite
563 SGIX_tag_sample_buffer
564 SGIX_texture_add_env
565 SGIX_texture_coordinate_clamp
566 SGIX_texture_lod_bias
567 SGIX_texture_multi_buffer
568 SGIX_texture_range
569 SGIX_texture_scale_bias
570 SGIX_vertex_preclip
571 SGIX_vertex_preclip_hint
572 SGIX_ycrcb
664 REND_screen_coordinates

573 SGI_color_matrix
574 SGI_color_table
575 SGI_texture_color_table
665 S3_s3tc

576 SUNX_constant_data
666 SGIS_clip_band_hint
667 SGIS_color_range
668 SGIS_detail_texture
669 SGIS_fog_function
670 SGIS_generate_mipmap
671 SGIS_line_texgen
672 SGIS_multisample
673 SGIS_multitexture
674 SGIS_pixel_texture
675 SGIS_point_line_texgen
676 SGIS_shared_multisample
677 SGIS_sharpen_texture
678 SGIS_texture4D
679 SGIS_texture_border_clamp
680 SGIS_texture_edge_clamp
681 SGIS_texture_filter4
682 SGIS_texture_lod
683 SGIS_texture_select

577 SUN_convolution_border_modes
578 SUN_global_alpha
579 SUN_mesh_array
580 SUN_read_video_pixels
581 SUN_slice_accum
582 SUN_triangle_list
583 SUN_vertex
684 SGIX_async
685 SGIX_async_histogram
686 SGIX_async_pixel
687 SGIX_bali_g_instruments
688 SGIX_bali_r_instruments
689 SGIX_bali_timer_instruments
690 SGIX_blend_alpha_minmax
691 SGIX_blend_cadd
692 SGIX_blend_cmultiply
693 SGIX_calligraphic_fragment
694 SGIX_clipmap
695 SGIX_color_matrix_accuracy
696 SGIX_color_table_index_mode
697 SGIX_complex_polar
698 SGIX_convolution_accuracy
699 SGIX_cube_map
700 SGIX_cylinder_texgen
701 SGIX_datapipe
702 SGIX_decimation
703 SGIX_depth_pass_instrument
704 SGIX_depth_texture
705 SGIX_dvc
706 SGIX_flush_raster
707 SGIX_fog_blend
708 SGIX_fog_factor_to_alpha
709 SGIX_fog_layers
710 SGIX_fog_offset
711 SGIX_fog_patchy
712 SGIX_fog_scale
713 SGIX_fog_texture
714 SGIX_fragment_lighting_space
715 SGIX_fragment_specular_lighting
716 SGIX_fragments_instrument
717 SGIX_framezoom
718 SGIX_icc_texture
719 SGIX_igloo_interface
720 SGIX_image_compression
721 SGIX_impact_pixel_texture
722 SGIX_instrument_error
723 SGIX_interlace
724 SGIX_ir_instrument1
725 SGIX_line_quality_hint
726 SGIX_list_priority
727 SGIX_mpeg1
728 SGIX_mpeg2
729 SGIX_nonlinear_lighting_pervertex
730 SGIX_nurbs_eval
731 SGIX_occlusion_instrument
732 SGIX_packed_6bytes
733 SGIX_pixel_texture
734 SGIX_pixel_texture_bits
735 SGIX_pixel_texture_lod
736 SGIX_pixel_tiles
737 SGIX_polynomial_ffd
738 SGIX_quad_mesh
739 SGIX_reference_plane
740 SGIX_resample
741 SGIX_scalebias_hint
742 SGIX_shadow
743 SGIX_shadow_ambient
744 SGIX_slim
745 SGIX_spotlight_cutoff
746 SGIX_sprite
747 SGIX_subdiv_patch
748 SGIX_subsample
749 SGIX_tag_sample_buffer
750 SGIX_texture_add_env
751 SGIX_texture_coordinate_clamp
752 SGIX_texture_lod_bias
753 SGIX_texture_mipmap_anisotropic
754 SGIX_texture_multi_buffer
755 SGIX_texture_phase
756 SGIX_texture_range
757 SGIX_texture_scale_bias
758 SGIX_texture_supersample
759 SGIX_vector_ops
760 SGIX_vertex_array_object
761 SGIX_vertex_preclip
762 SGIX_vertex_preclip_hint
763 SGIX_ycrcb
764 SGIX_ycrcb_subsample
765 SGIX_ycrcba

584 WIN_phong_shading
585 WIN_specular_fog
586 WIN_swap_hint
766 SGI_color_matrix
767 SGI_color_table
768 SGI_complex
769 SGI_complex_type
770 SGI_fft
771 SGI_texture_color_table

772 SUNX_constant_data

773 SUN_convolution_border_modes
774 SUN_global_alpha
775 SUN_mesh_array
776 SUN_read_video_pixels
777 SUN_slice_accum
778 SUN_triangle_list
779 SUN_vertex

780 WIN_phong_shading
781 WIN_scene_markerXXX
782 WIN_specular_fog
783 WIN_swap_hint
diff --git a/ref/glew/doc/glxew.html b/ref/glew/doc/glxew.html index 4e5d6175..d1ee00c0 100644 --- a/ref/glew/doc/glxew.html +++ b/ref/glew/doc/glxew.html @@ -46,7 +46,7 @@ THE POSSIBILITY OF SUCH DAMAGE.
- + @@ -75,7 +75,7 @@ THE POSSIBILITY OF SUCH DAMAGE.
Latest Release: 2.2.0
Latest Release: 2.1.0

GLEW Logo

- +
Last Update: 07-24-16
Last Update: 07-31-17
OpenGL Logo
GitHub Logo
@@ -99,85 +99,86 @@ THE POSSIBILITY OF SUCH DAMAGE.

Supported GLX Extensions

- + - - - - - - - - - + + + + + + + + + + - - + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - - - - - - - + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - + + - - - - + + + + - - - - - - - + + + + + + + - - - - + + + + - - + +
1 3DFX_multisample
1 3DFX_multisample

2 AMD_gpu_association

3 ARB_context_flush_control
4 ARB_create_context
5 ARB_create_context_profile
6 ARB_create_context_robustness
7 ARB_fbconfig_float
8 ARB_framebuffer_sRGB
9 ARB_get_proc_address
10 ARB_multisample
11 ARB_robustness_application_isolation
12 ARB_robustness_share_group_isolation
13 ARB_vertex_buffer_object
5 ARB_create_context_no_error
6 ARB_create_context_profile
7 ARB_create_context_robustness
8 ARB_fbconfig_float
9 ARB_framebuffer_sRGB
10 ARB_get_proc_address
11 ARB_multisample
12 ARB_robustness_application_isolation
13 ARB_robustness_share_group_isolation
14 ARB_vertex_buffer_object

14 ATI_pixel_format_float
15 ATI_render_texture
15 ATI_pixel_format_float
16 ATI_render_texture

16 EXT_buffer_age
17 EXT_create_context_es2_profile
18 EXT_create_context_es_profile
19 EXT_fbconfig_packed_float
20 EXT_framebuffer_sRGB
21 EXT_import_context
22 EXT_libglvnd
23 EXT_scene_marker
24 EXT_stereo_tree
25 EXT_swap_control
26 EXT_swap_control_tear
27 EXT_texture_from_pixmap
28 EXT_visual_info
29 EXT_visual_rating
17 EXT_buffer_age
18 EXT_create_context_es2_profile
19 EXT_create_context_es_profile
20 EXT_fbconfig_packed_float
21 EXT_framebuffer_sRGB
22 EXT_import_context
23 EXT_libglvnd
24 EXT_scene_marker
25 EXT_stereo_tree
26 EXT_swap_control
27 EXT_swap_control_tear
28 EXT_texture_from_pixmap
29 EXT_visual_info
30 EXT_visual_rating

30 INTEL_swap_event
31 INTEL_swap_event

31 MESA_agp_offset
32 MESA_copy_sub_buffer
33 MESA_pixmap_colormap
34 MESA_query_renderer
35 MESA_release_buffers
36 MESA_set_3dfx_mode
37 MESA_swap_control
32 MESA_agp_offset
33 MESA_copy_sub_buffer
34 MESA_pixmap_colormap
35 MESA_query_renderer
36 MESA_release_buffers
37 MESA_set_3dfx_mode
38 MESA_swap_control

38 NV_copy_buffer
39 NV_copy_image
40 NV_delay_before_swap
41 NV_float_buffer
42 NV_multisample_coverage
43 NV_present_video
44 NV_robustness_video_memory_purge
45 NV_swap_group
46 NV_vertex_array_range
47 NV_video_capture
48 NV_video_out
39 NV_copy_buffer
40 NV_copy_image
41 NV_delay_before_swap
42 NV_float_buffer
43 NV_multisample_coverage
44 NV_present_video
45 NV_robustness_video_memory_purge
46 NV_swap_group
47 NV_vertex_array_range
48 NV_video_capture
49 NV_video_out

49 OML_swap_method
50 OML_sync_control
50 OML_swap_method
51 OML_sync_control

51 SGIS_blended_overlay
52 SGIS_color_range
53 SGIS_multisample
54 SGIS_shared_multisample
52 SGIS_blended_overlay
53 SGIS_color_range
54 SGIS_multisample
55 SGIS_shared_multisample

55 SGIX_fbconfig
56 SGIX_hyperpipe
57 SGIX_pbuffer
58 SGIX_swap_barrier
59 SGIX_swap_group
60 SGIX_video_resize
61 SGIX_visual_select_group
56 SGIX_fbconfig
57 SGIX_hyperpipe
58 SGIX_pbuffer
59 SGIX_swap_barrier
60 SGIX_swap_group
61 SGIX_video_resize
62 SGIX_visual_select_group

62 SGI_cushion
63 SGI_make_current_read
64 SGI_swap_control
65 SGI_video_sync
63 SGI_cushion
64 SGI_make_current_read
65 SGI_swap_control
66 SGI_video_sync

66 SUN_get_transparent_index
67 SUN_video_resize
67 SUN_get_transparent_index
68 SUN_video_resize
diff --git a/ref/glew/doc/index.html b/ref/glew/doc/index.html index 6f61c2f1..84e74072 100644 --- a/ref/glew/doc/index.html +++ b/ref/glew/doc/index.html @@ -46,7 +46,7 @@ THE POSSIBILITY OF SUCH DAMAGE.
- + @@ -75,7 +75,7 @@ THE POSSIBILITY OF SUCH DAMAGE.
Latest Release: 2.2.0
Latest Release: 2.1.0

GLEW Logo

- + +ZIP |  +TGZ @@ -134,7 +134,7 @@ The latest release is @@ -153,7 +153,7 @@ An up-to-date copy is also available using git

Supported Extensions

-The latest release contains support for OpenGL 4.5, compatibility and forward-compatible contexts and the following extensions: +The latest release contains support for OpenGL 4.6, compatibility and forward-compatible contexts and the following extensions:

  • OpenGL extensions @@ -163,6 +163,7 @@ The latest release contains support for OpenGL 4.5, compatibility and forward-co

    News

      +
    • [07-31-17] GLEW 2.1.0 adds support for OpenGL 4.6, new extensions and minor bug fixes
    • [07-24-16] GLEW 2.0.0 adds support for forward-compatible contexts, adds new extensions, OSMesa and EGL support, MX discontinued and minor bug fixes
    • [08-10-15] GLEW 1.13.0 adds support for new extensions, fixes minor bugs
    • [26-01-15] GLEW 1.12.0 fixes minor bugs and adds new extensions
    • diff --git a/ref/glew/doc/install.html b/ref/glew/doc/install.html index 7c9421d2..19129e3a 100644 --- a/ref/glew/doc/install.html +++ b/ref/glew/doc/install.html @@ -46,7 +46,7 @@ THE POSSIBILITY OF SUCH DAMAGE.
Last Update: 07-24-16
Last Update: 07-31-17
OpenGL Logo
GitHub Logo
@@ -111,7 +111,7 @@ Mac OS X, FreeBSD, Irix, and Solaris. GLEW is distributed as source and precompiled binaries.
The latest release is -2.2.0[07-24-16]: +2.1.0[07-31-17]:

@@ -125,8 +125,8 @@ The latest release is
Source -ZIP |  -TGZ
Binaries -Windows 32-bit and 64-bit +Windows 32-bit and 64-bit
- + @@ -75,7 +75,7 @@ THE POSSIBILITY OF SUCH DAMAGE.
Latest Release: 2.2.0
Latest Release: 2.1.0

GLEW Logo

- +",""],legend:[1,"
","
"],thead:[1,"
Last Update: 07-24-16
Last Update: 07-31-17
OpenGL Logo
GitHub Logo
diff --git a/ref/glew/doc/log.html b/ref/glew/doc/log.html index 9b701e88..a343f2bb 100644 --- a/ref/glew/doc/log.html +++ b/ref/glew/doc/log.html @@ -46,7 +46,7 @@ THE POSSIBILITY OF SUCH DAMAGE.
- + @@ -75,7 +75,7 @@ THE POSSIBILITY OF SUCH DAMAGE. diff --git a/ref/glfw/docs/html/group__window.html b/ref/glfw/docs/html/group__window.html index 7c4866a0..fa250041 100644 --- a/ref/glfw/docs/html/group__window.html +++ b/ref/glfw/docs/html/group__window.html @@ -3,7 +3,7 @@ - +GLFW: Window reference @@ -11,9 +11,6 @@ - @@ -21,45 +18,31 @@
- + - + + + +
Window reference
+

Description

+

This is the reference documentation for window related functions and types, including creation, deletion and event polling. For more task-oriented information, see the Window guide.

Latest Release: 2.2.0
Latest Release: 2.1.0

GLEW Logo

- +
Errors
None.
Remarks
This function may be called before glfwInit.
Thread safety
This function must only be called from the main thread.
-
See also
Error handling
-
Since
Added in version 3.0.
- - - - -
-
-
Last Update: 07-24-16
Last Update: 07-31-17
OpenGL Logo
GitHub Logo
@@ -100,7 +100,70 @@ THE POSSIBILITY OF SUCH DAMAGE.
    -
  • 2.2.0 [07-24-16] +
  • 2.1.0 [07-31-17] +
      +
    • Enhancements: +
        +
      • OpenGL 4.6 support added +
      • Improved Mac OSX build support +
      • Improved cmake build support +
      +
    + +
      +
    • Bug fixes: +
        +
      • Resovled crash when glXGetCurrentDisplay() is NULL +
      • CMake: only install PDB files with MSVC +
      • wglGetProcAddress crash with NOGDI defined +
      • Mac: using -Os rather than -O2 +
      +
    + +
      +
    • New extensions: +
        +
      • GL_AMD_gpu_shader_half_float +
      • GL_AMD_shader_ballot +
      • GL_ARB_gl_spirv +
      • GL_EGL_KHR_context_flush_control +
      • GL_INTEL_conservative_rasterization +
      • GL_MESA_shader_integer_functions +
      • GL_NVX_blend_equation_advanced_multi_draw_buffers +
      • GL_NV_gpu_multicast +
      • EGL_ARM_implicit_external_sync +
      • EGL_EXT_gl_colorspace_bt2020_linear +
      • EGL_EXT_gl_colorspace_bt2020_pq +
      • EGL_EXT_gl_colorspace_scrgb_linear +
      • EGL_EXT_image_dma_buf_import_modifiers +
      • EGL_EXT_pixel_format_float +
      • EGL_EXT_surface_SMPTE2086_metadata +
      • EGL_KHR_context_flush_control +
      • EGL_KHR_no_config_context +
      • EGL_KHR_stream_attrib +
      • EGL_MESA_platform_surfaceless +
      • EGL_NV_stream_cross_display +
      • EGL_NV_stream_cross_object +
      • EGL_NV_stream_cross_partition +
      • EGL_NV_stream_cross_process +
      • EGL_NV_stream_cross_system +
      • EGL_NV_stream_fifo_next +
      • EGL_NV_stream_fifo_synchronous +
      • EGL_NV_stream_frame_limits +
      • EGL_NV_stream_remote +
      • EGL_NV_stream_reset +
      • EGL_NV_stream_socket +
      • EGL_NV_stream_socket_inet +
      • EGL_NV_stream_socket_unix +
      • WGL_EXT_colorspace +
      +
    + +
+ +
+
    +
  • 2.0.0 [07-24-16]
    • Enhancements:
        diff --git a/ref/glew/doc/wglew.html b/ref/glew/doc/wglew.html index 12e33c15..bf5c9da4 100644 --- a/ref/glew/doc/wglew.html +++ b/ref/glew/doc/wglew.html @@ -46,7 +46,7 @@ THE POSSIBILITY OF SUCH DAMAGE.
- + @@ -75,7 +75,7 @@ THE POSSIBILITY OF SUCH DAMAGE. - + +

◆ GLFW_VERSION_REVISION

+
Latest Release: 2.2.0
Latest Release: 2.1.0

GLEW Logo

- +
Last Update: 07-24-16
Last Update: 07-31-17
OpenGL Logo
GitHub Logo
@@ -99,7 +99,7 @@ THE POSSIBILITY OF SUCH DAMAGE.

Supported WGL Extensions

- + @@ -108,59 +108,61 @@ THE POSSIBILITY OF SUCH DAMAGE. - - - - - - - - - - - - + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - +
1 3DFX_multisample
1 3DFX_multisample

2 3DL_stereo_control

4 ARB_buffer_region
5 ARB_context_flush_control
6 ARB_create_context
7 ARB_create_context_profile
8 ARB_create_context_robustness
9 ARB_extensions_string
10 ARB_framebuffer_sRGB
11 ARB_make_current_read
12 ARB_multisample
13 ARB_pbuffer
14 ARB_pixel_format
15 ARB_pixel_format_float
16 ARB_render_texture
17 ARB_robustness_application_isolation
18 ARB_robustness_share_group_isolation
7 ARB_create_context_no_error
8 ARB_create_context_profile
9 ARB_create_context_robustness
10 ARB_extensions_string
11 ARB_framebuffer_sRGB
12 ARB_make_current_read
13 ARB_multisample
14 ARB_pbuffer
15 ARB_pixel_format
16 ARB_pixel_format_float
17 ARB_render_texture
18 ARB_robustness_application_isolation
19 ARB_robustness_share_group_isolation

19 ATI_pixel_format_float
20 ATI_render_texture_rectangle
20 ATI_pixel_format_float
21 ATI_render_texture_rectangle

21 EXT_create_context_es2_profile
22 EXT_create_context_es_profile
23 EXT_depth_float
24 EXT_display_color_table
25 EXT_extensions_string
26 EXT_framebuffer_sRGB
27 EXT_make_current_read
28 EXT_multisample
29 EXT_pbuffer
30 EXT_pixel_format
31 EXT_pixel_format_packed_float
32 EXT_swap_control
33 EXT_swap_control_tear
22 EXT_colorspace
23 EXT_create_context_es2_profile
24 EXT_create_context_es_profile
25 EXT_depth_float
26 EXT_display_color_table
27 EXT_extensions_string
28 EXT_framebuffer_sRGB
29 EXT_make_current_read
30 EXT_multisample
31 EXT_pbuffer
32 EXT_pixel_format
33 EXT_pixel_format_packed_float
34 EXT_swap_control
35 EXT_swap_control_tear

34 I3D_digital_video_control
35 I3D_gamma
36 I3D_genlock
37 I3D_image_buffer
38 I3D_swap_frame_lock
39 I3D_swap_frame_usage
36 I3D_digital_video_control
37 I3D_gamma
38 I3D_genlock
39 I3D_image_buffer
40 I3D_swap_frame_lock
41 I3D_swap_frame_usage

40 NV_DX_interop
41 NV_DX_interop2
42 NV_copy_image
43 NV_delay_before_swap
44 NV_float_buffer
45 NV_gpu_affinity
46 NV_multisample_coverage
47 NV_present_video
48 NV_render_depth_texture
49 NV_render_texture_rectangle
50 NV_swap_group
51 NV_vertex_array_range
52 NV_video_capture
53 NV_video_output
42 NV_DX_interop
43 NV_DX_interop2
44 NV_copy_image
45 NV_delay_before_swap
46 NV_float_buffer
47 NV_gpu_affinity
48 NV_multisample_coverage
49 NV_present_video
50 NV_render_depth_texture
51 NV_render_texture_rectangle
52 NV_swap_group
53 NV_vertex_array_range
54 NV_video_capture
55 NV_video_output

54 OML_sync_control
56 OML_sync_control
diff --git a/ref/glew/include/GL/eglew.h b/ref/glew/include/GL/eglew.h index aef65c87..46701479 100644 --- a/ref/glew/include/GL/eglew.h +++ b/ref/glew/include/GL/eglew.h @@ -1,6 +1,6 @@ /* ** The OpenGL Extension Wrangler Library -** Copyright (C) 2008-2015, Nigel Stewart +** Copyright (C) 2008-2017, Nigel Stewart ** Copyright (C) 2002-2008, Milan Ikits ** Copyright (C) 2002-2008, Marcelo E. Magallon ** Copyright (C) 2002, Lev Povalahev @@ -639,6 +639,17 @@ typedef EGLBoolean ( * PFNEGLQUERYSURFACEPOINTERANGLEPROC) (EGLDisplay dpy, EG #endif /* EGL_ANGLE_window_fixed_size */ +/* --------------------- EGL_ARM_implicit_external_sync -------------------- */ + +#ifndef EGL_ARM_implicit_external_sync +#define EGL_ARM_implicit_external_sync 1 + +#define EGL_SYNC_PRIOR_COMMANDS_IMPLICIT_EXTERNAL_ARM 0x328A + +#define EGLEW_ARM_implicit_external_sync EGLEW_GET_VAR(__EGLEW_ARM_implicit_external_sync) + +#endif /* EGL_ARM_implicit_external_sync */ + /* ------------------- EGL_ARM_pixmap_multisample_discard ------------------ */ #ifndef EGL_ARM_pixmap_multisample_discard @@ -751,6 +762,39 @@ typedef EGLBoolean ( * PFNEGLQUERYDISPLAYATTRIBEXTPROC) (EGLDisplay dpy, EGLin #endif /* EGL_EXT_device_query */ +/* ------------------ EGL_EXT_gl_colorspace_bt2020_linear ------------------ */ + +#ifndef EGL_EXT_gl_colorspace_bt2020_linear +#define EGL_EXT_gl_colorspace_bt2020_linear 1 + +#define EGL_GL_COLORSPACE_BT2020_LINEAR_EXT 0x333F + +#define EGLEW_EXT_gl_colorspace_bt2020_linear EGLEW_GET_VAR(__EGLEW_EXT_gl_colorspace_bt2020_linear) + +#endif /* EGL_EXT_gl_colorspace_bt2020_linear */ + +/* -------------------- EGL_EXT_gl_colorspace_bt2020_pq -------------------- */ + +#ifndef EGL_EXT_gl_colorspace_bt2020_pq +#define EGL_EXT_gl_colorspace_bt2020_pq 1 + +#define EGL_GL_COLORSPACE_BT2020_PQ_EXT 0x3340 + +#define EGLEW_EXT_gl_colorspace_bt2020_pq EGLEW_GET_VAR(__EGLEW_EXT_gl_colorspace_bt2020_pq) + +#endif /* EGL_EXT_gl_colorspace_bt2020_pq */ + +/* ------------------- EGL_EXT_gl_colorspace_scrgb_linear ------------------ */ + +#ifndef EGL_EXT_gl_colorspace_scrgb_linear +#define EGL_EXT_gl_colorspace_scrgb_linear 1 + +#define EGL_GL_COLORSPACE_SCRGB_LINEAR_EXT 0x3350 + +#define EGLEW_EXT_gl_colorspace_scrgb_linear EGLEW_GET_VAR(__EGLEW_EXT_gl_colorspace_scrgb_linear) + +#endif /* EGL_EXT_gl_colorspace_scrgb_linear */ + /* ---------------------- EGL_EXT_image_dma_buf_import --------------------- */ #ifndef EGL_EXT_image_dma_buf_import @@ -783,6 +827,33 @@ typedef EGLBoolean ( * PFNEGLQUERYDISPLAYATTRIBEXTPROC) (EGLDisplay dpy, EGLin #endif /* EGL_EXT_image_dma_buf_import */ +/* ----------------- EGL_EXT_image_dma_buf_import_modifiers ---------------- */ + +#ifndef EGL_EXT_image_dma_buf_import_modifiers +#define EGL_EXT_image_dma_buf_import_modifiers 1 + +#define EGL_DMA_BUF_PLANE3_FD_EXT 0x3440 +#define EGL_DMA_BUF_PLANE3_OFFSET_EXT 0x3441 +#define EGL_DMA_BUF_PLANE3_PITCH_EXT 0x3442 +#define EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT 0x3443 +#define EGL_DMA_BUF_PLANE0_MODIFIER_HI_EXT 0x3444 +#define EGL_DMA_BUF_PLANE1_MODIFIER_LO_EXT 0x3445 +#define EGL_DMA_BUF_PLANE1_MODIFIER_HI_EXT 0x3446 +#define EGL_DMA_BUF_PLANE2_MODIFIER_LO_EXT 0x3447 +#define EGL_DMA_BUF_PLANE2_MODIFIER_HI_EXT 0x3448 +#define EGL_DMA_BUF_PLANE3_MODIFIER_LO_EXT 0x3449 +#define EGL_DMA_BUF_PLANE3_MODIFIER_HI_EXT 0x344A + +typedef EGLBoolean ( * PFNEGLQUERYDMABUFFORMATSEXTPROC) (EGLDisplay dpy, EGLint max_formats, EGLint *formats, EGLint *num_formats); +typedef EGLBoolean ( * PFNEGLQUERYDMABUFMODIFIERSEXTPROC) (EGLDisplay dpy, EGLint format, EGLint max_modifiers, EGLuint64KHR *modifiers, EGLBoolean *external_only, EGLint *num_modifiers); + +#define eglQueryDmaBufFormatsEXT EGLEW_GET_FUN(__eglewQueryDmaBufFormatsEXT) +#define eglQueryDmaBufModifiersEXT EGLEW_GET_FUN(__eglewQueryDmaBufModifiersEXT) + +#define EGLEW_EXT_image_dma_buf_import_modifiers EGLEW_GET_VAR(__EGLEW_EXT_image_dma_buf_import_modifiers) + +#endif /* EGL_EXT_image_dma_buf_import_modifiers */ + /* ------------------------ EGL_EXT_multiview_window ----------------------- */ #ifndef EGL_EXT_multiview_window @@ -850,6 +921,19 @@ typedef const char * ( * PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC) (EGLDisplay dpy, E #endif /* EGL_EXT_output_openwf */ +/* ----------------------- EGL_EXT_pixel_format_float ---------------------- */ + +#ifndef EGL_EXT_pixel_format_float +#define EGL_EXT_pixel_format_float 1 + +#define EGL_COLOR_COMPONENT_TYPE_EXT 0x3339 +#define EGL_COLOR_COMPONENT_TYPE_FIXED_EXT 0x333A +#define EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT 0x333B + +#define EGLEW_EXT_pixel_format_float EGLEW_GET_VAR(__EGLEW_EXT_pixel_format_float) + +#endif /* EGL_EXT_pixel_format_float */ + /* ------------------------- EGL_EXT_platform_base ------------------------- */ #ifndef EGL_EXT_platform_base @@ -936,6 +1020,26 @@ typedef EGLBoolean ( * PFNEGLSTREAMCONSUMEROUTPUTEXTPROC) (EGLDisplay dpy, EGL #endif /* EGL_EXT_stream_consumer_egloutput */ +/* ------------------- EGL_EXT_surface_SMPTE2086_metadata ------------------ */ + +#ifndef EGL_EXT_surface_SMPTE2086_metadata +#define EGL_EXT_surface_SMPTE2086_metadata 1 + +#define EGL_SMPTE2086_DISPLAY_PRIMARY_RX_EXT 0x3341 +#define EGL_SMPTE2086_DISPLAY_PRIMARY_RY_EXT 0x3342 +#define EGL_SMPTE2086_DISPLAY_PRIMARY_GX_EXT 0x3343 +#define EGL_SMPTE2086_DISPLAY_PRIMARY_GY_EXT 0x3344 +#define EGL_SMPTE2086_DISPLAY_PRIMARY_BX_EXT 0x3345 +#define EGL_SMPTE2086_DISPLAY_PRIMARY_BY_EXT 0x3346 +#define EGL_SMPTE2086_WHITE_POINT_X_EXT 0x3347 +#define EGL_SMPTE2086_WHITE_POINT_Y_EXT 0x3348 +#define EGL_SMPTE2086_MAX_LUMINANCE_EXT 0x3349 +#define EGL_SMPTE2086_MIN_LUMINANCE_EXT 0x334A + +#define EGLEW_EXT_surface_SMPTE2086_metadata EGLEW_GET_VAR(__EGLEW_EXT_surface_SMPTE2086_metadata) + +#endif /* EGL_EXT_surface_SMPTE2086_metadata */ + /* -------------------- EGL_EXT_swap_buffers_with_damage ------------------- */ #ifndef EGL_EXT_swap_buffers_with_damage @@ -1091,6 +1195,19 @@ typedef EGLSyncKHR ( * PFNEGLCREATESYNC64KHRPROC) (EGLDisplay dpy, EGLenum ty #endif /* EGL_KHR_config_attribs */ +/* --------------------- EGL_KHR_context_flush_control --------------------- */ + +#ifndef EGL_KHR_context_flush_control +#define EGL_KHR_context_flush_control 1 + +#define EGL_CONTEXT_RELEASE_BEHAVIOR_NONE_KHR 0 +#define EGL_CONTEXT_RELEASE_BEHAVIOR_KHR 0x2097 +#define EGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR 0x2098 + +#define EGLEW_KHR_context_flush_control EGLEW_GET_VAR(__EGLEW_KHR_context_flush_control) + +#endif /* EGL_KHR_context_flush_control */ + /* ------------------------- EGL_KHR_create_context ------------------------ */ #ifndef EGL_KHR_create_context @@ -1376,6 +1493,15 @@ typedef EGLBoolean ( * PFNEGLQUERYSURFACE64KHRPROC) (EGLDisplay dpy, EGLSurfac #endif /* EGL_KHR_mutable_render_buffer */ +/* ----------------------- EGL_KHR_no_config_context ----------------------- */ + +#ifndef EGL_KHR_no_config_context +#define EGL_KHR_no_config_context 1 + +#define EGLEW_KHR_no_config_context EGLEW_GET_VAR(__EGLEW_KHR_no_config_context) + +#endif /* EGL_KHR_no_config_context */ + /* ------------------------- EGL_KHR_partial_update ------------------------ */ #ifndef EGL_KHR_partial_update @@ -1501,6 +1627,32 @@ typedef EGLBoolean ( * PFNEGLSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKH #endif /* EGL_KHR_stream */ +/* ------------------------- EGL_KHR_stream_attrib ------------------------- */ + +#ifndef EGL_KHR_stream_attrib +#define EGL_KHR_stream_attrib 1 + +#define EGL_CONSUMER_LATENCY_USEC_KHR 0x3210 +#define EGL_STREAM_STATE_KHR 0x3214 +#define EGL_STREAM_STATE_CREATED_KHR 0x3215 +#define EGL_STREAM_STATE_CONNECTING_KHR 0x3216 + +typedef EGLStreamKHR ( * PFNEGLCREATESTREAMATTRIBKHRPROC) (EGLDisplay dpy, const EGLAttrib * attrib_list); +typedef EGLBoolean ( * PFNEGLQUERYSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLAttrib * value); +typedef EGLBoolean ( * PFNEGLSETSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLAttrib value); +typedef EGLBoolean ( * PFNEGLSTREAMCONSUMERACQUIREATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib * attrib_list); +typedef EGLBoolean ( * PFNEGLSTREAMCONSUMERRELEASEATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib * attrib_list); + +#define eglCreateStreamAttribKHR EGLEW_GET_FUN(__eglewCreateStreamAttribKHR) +#define eglQueryStreamAttribKHR EGLEW_GET_FUN(__eglewQueryStreamAttribKHR) +#define eglSetStreamAttribKHR EGLEW_GET_FUN(__eglewSetStreamAttribKHR) +#define eglStreamConsumerAcquireAttribKHR EGLEW_GET_FUN(__eglewStreamConsumerAcquireAttribKHR) +#define eglStreamConsumerReleaseAttribKHR EGLEW_GET_FUN(__eglewStreamConsumerReleaseAttribKHR) + +#define EGLEW_KHR_stream_attrib EGLEW_GET_VAR(__EGLEW_KHR_stream_attrib) + +#endif /* EGL_KHR_stream_attrib */ + /* ------------------- EGL_KHR_stream_consumer_gltexture ------------------- */ #ifndef EGL_KHR_stream_consumer_gltexture @@ -1672,6 +1824,17 @@ typedef EGLBoolean ( * PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC) (EGLDisplay dpy, #endif /* EGL_MESA_platform_gbm */ +/* --------------------- EGL_MESA_platform_surfaceless --------------------- */ + +#ifndef EGL_MESA_platform_surfaceless +#define EGL_MESA_platform_surfaceless 1 + +#define EGL_PLATFORM_SURFACELESS_MESA 0x31DD + +#define EGLEW_MESA_platform_surfaceless EGLEW_GET_VAR(__EGLEW_MESA_platform_surfaceless) + +#endif /* EGL_MESA_platform_surfaceless */ + /* -------------------------- EGL_NOK_swap_region -------------------------- */ #ifndef EGL_NOK_swap_region @@ -1853,6 +2016,96 @@ typedef EGLBoolean ( * PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALATTRIBSNVPROC) (EGL #endif /* EGL_NV_stream_consumer_gltexture_yuv */ +/* ---------------------- EGL_NV_stream_cross_display ---------------------- */ + +#ifndef EGL_NV_stream_cross_display +#define EGL_NV_stream_cross_display 1 + +#define EGL_STREAM_CROSS_DISPLAY_NV 0x334E + +#define EGLEW_NV_stream_cross_display EGLEW_GET_VAR(__EGLEW_NV_stream_cross_display) + +#endif /* EGL_NV_stream_cross_display */ + +/* ----------------------- EGL_NV_stream_cross_object ---------------------- */ + +#ifndef EGL_NV_stream_cross_object +#define EGL_NV_stream_cross_object 1 + +#define EGL_STREAM_CROSS_OBJECT_NV 0x334D + +#define EGLEW_NV_stream_cross_object EGLEW_GET_VAR(__EGLEW_NV_stream_cross_object) + +#endif /* EGL_NV_stream_cross_object */ + +/* --------------------- EGL_NV_stream_cross_partition --------------------- */ + +#ifndef EGL_NV_stream_cross_partition +#define EGL_NV_stream_cross_partition 1 + +#define EGL_STREAM_CROSS_PARTITION_NV 0x323F + +#define EGLEW_NV_stream_cross_partition EGLEW_GET_VAR(__EGLEW_NV_stream_cross_partition) + +#endif /* EGL_NV_stream_cross_partition */ + +/* ---------------------- EGL_NV_stream_cross_process ---------------------- */ + +#ifndef EGL_NV_stream_cross_process +#define EGL_NV_stream_cross_process 1 + +#define EGL_STREAM_CROSS_PROCESS_NV 0x3245 + +#define EGLEW_NV_stream_cross_process EGLEW_GET_VAR(__EGLEW_NV_stream_cross_process) + +#endif /* EGL_NV_stream_cross_process */ + +/* ----------------------- EGL_NV_stream_cross_system ---------------------- */ + +#ifndef EGL_NV_stream_cross_system +#define EGL_NV_stream_cross_system 1 + +#define EGL_STREAM_CROSS_SYSTEM_NV 0x334F + +#define EGLEW_NV_stream_cross_system EGLEW_GET_VAR(__EGLEW_NV_stream_cross_system) + +#endif /* EGL_NV_stream_cross_system */ + +/* ------------------------ EGL_NV_stream_fifo_next ------------------------ */ + +#ifndef EGL_NV_stream_fifo_next +#define EGL_NV_stream_fifo_next 1 + +#define EGL_PENDING_FRAME_NV 0x3329 +#define EGL_STREAM_TIME_PENDING_NV 0x332A + +#define EGLEW_NV_stream_fifo_next EGLEW_GET_VAR(__EGLEW_NV_stream_fifo_next) + +#endif /* EGL_NV_stream_fifo_next */ + +/* --------------------- EGL_NV_stream_fifo_synchronous -------------------- */ + +#ifndef EGL_NV_stream_fifo_synchronous +#define EGL_NV_stream_fifo_synchronous 1 + +#define EGL_STREAM_FIFO_SYNCHRONOUS_NV 0x3336 + +#define EGLEW_NV_stream_fifo_synchronous EGLEW_GET_VAR(__EGLEW_NV_stream_fifo_synchronous) + +#endif /* EGL_NV_stream_fifo_synchronous */ + +/* ----------------------- EGL_NV_stream_frame_limits ---------------------- */ + +#ifndef EGL_NV_stream_frame_limits +#define EGL_NV_stream_frame_limits 1 + +#define EGL_PRODUCER_MAX_FRAME_HINT_NV 0x3337 +#define EGL_CONSUMER_MAX_FRAME_HINT_NV 0x3338 + +#define EGLEW_NV_stream_frame_limits EGLEW_GET_VAR(__EGLEW_NV_stream_frame_limits) + +#endif /* EGL_NV_stream_frame_limits */ + /* ------------------------- EGL_NV_stream_metadata ------------------------ */ #ifndef EGL_NV_stream_metadata @@ -1885,6 +2138,75 @@ typedef EGLBoolean ( * PFNEGLSETSTREAMMETADATANVPROC) (EGLDisplay dpy, EGLStre #endif /* EGL_NV_stream_metadata */ +/* -------------------------- EGL_NV_stream_remote ------------------------- */ + +#ifndef EGL_NV_stream_remote +#define EGL_NV_stream_remote 1 + +#define EGL_STREAM_STATE_INITIALIZING_NV 0x3240 +#define EGL_STREAM_TYPE_NV 0x3241 +#define EGL_STREAM_PROTOCOL_NV 0x3242 +#define EGL_STREAM_ENDPOINT_NV 0x3243 +#define EGL_STREAM_LOCAL_NV 0x3244 +#define EGL_STREAM_PROTOCOL_FD_NV 0x3246 +#define EGL_STREAM_PRODUCER_NV 0x3247 +#define EGL_STREAM_CONSUMER_NV 0x3248 + +#define EGLEW_NV_stream_remote EGLEW_GET_VAR(__EGLEW_NV_stream_remote) + +#endif /* EGL_NV_stream_remote */ + +/* -------------------------- EGL_NV_stream_reset -------------------------- */ + +#ifndef EGL_NV_stream_reset +#define EGL_NV_stream_reset 1 + +#define EGL_SUPPORT_RESET_NV 0x3334 +#define EGL_SUPPORT_REUSE_NV 0x3335 + +typedef EGLBoolean ( * PFNEGLRESETSTREAMNVPROC) (EGLDisplay dpy, EGLStreamKHR stream); + +#define eglResetStreamNV EGLEW_GET_FUN(__eglewResetStreamNV) + +#define EGLEW_NV_stream_reset EGLEW_GET_VAR(__EGLEW_NV_stream_reset) + +#endif /* EGL_NV_stream_reset */ + +/* -------------------------- EGL_NV_stream_socket ------------------------- */ + +#ifndef EGL_NV_stream_socket +#define EGL_NV_stream_socket 1 + +#define EGL_STREAM_PROTOCOL_SOCKET_NV 0x324B +#define EGL_SOCKET_HANDLE_NV 0x324C +#define EGL_SOCKET_TYPE_NV 0x324D + +#define EGLEW_NV_stream_socket EGLEW_GET_VAR(__EGLEW_NV_stream_socket) + +#endif /* EGL_NV_stream_socket */ + +/* ----------------------- EGL_NV_stream_socket_inet ----------------------- */ + +#ifndef EGL_NV_stream_socket_inet +#define EGL_NV_stream_socket_inet 1 + +#define EGL_SOCKET_TYPE_INET_NV 0x324F + +#define EGLEW_NV_stream_socket_inet EGLEW_GET_VAR(__EGLEW_NV_stream_socket_inet) + +#endif /* EGL_NV_stream_socket_inet */ + +/* ----------------------- EGL_NV_stream_socket_unix ----------------------- */ + +#ifndef EGL_NV_stream_socket_unix +#define EGL_NV_stream_socket_unix 1 + +#define EGL_SOCKET_TYPE_UNIX_NV 0x324E + +#define EGLEW_NV_stream_socket_unix EGLEW_GET_VAR(__EGLEW_NV_stream_socket_unix) + +#endif /* EGL_NV_stream_socket_unix */ + /* --------------------------- EGL_NV_stream_sync -------------------------- */ #ifndef EGL_NV_stream_sync @@ -2043,6 +2365,9 @@ EGLEW_FUN_EXPORT PFNEGLQUERYDEVICEATTRIBEXTPROC __eglewQueryDeviceAttribEXT; EGLEW_FUN_EXPORT PFNEGLQUERYDEVICESTRINGEXTPROC __eglewQueryDeviceStringEXT; EGLEW_FUN_EXPORT PFNEGLQUERYDISPLAYATTRIBEXTPROC __eglewQueryDisplayAttribEXT; +EGLEW_FUN_EXPORT PFNEGLQUERYDMABUFFORMATSEXTPROC __eglewQueryDmaBufFormatsEXT; +EGLEW_FUN_EXPORT PFNEGLQUERYDMABUFMODIFIERSEXTPROC __eglewQueryDmaBufModifiersEXT; + EGLEW_FUN_EXPORT PFNEGLGETOUTPUTLAYERSEXTPROC __eglewGetOutputLayersEXT; EGLEW_FUN_EXPORT PFNEGLGETOUTPUTPORTSEXTPROC __eglewGetOutputPortsEXT; EGLEW_FUN_EXPORT PFNEGLOUTPUTLAYERATTRIBEXTPROC __eglewOutputLayerAttribEXT; @@ -2090,6 +2415,12 @@ EGLEW_FUN_EXPORT PFNEGLQUERYSTREAMKHRPROC __eglewQueryStreamKHR; EGLEW_FUN_EXPORT PFNEGLQUERYSTREAMU64KHRPROC __eglewQueryStreamu64KHR; EGLEW_FUN_EXPORT PFNEGLSTREAMATTRIBKHRPROC __eglewStreamAttribKHR; +EGLEW_FUN_EXPORT PFNEGLCREATESTREAMATTRIBKHRPROC __eglewCreateStreamAttribKHR; +EGLEW_FUN_EXPORT PFNEGLQUERYSTREAMATTRIBKHRPROC __eglewQueryStreamAttribKHR; +EGLEW_FUN_EXPORT PFNEGLSETSTREAMATTRIBKHRPROC __eglewSetStreamAttribKHR; +EGLEW_FUN_EXPORT PFNEGLSTREAMCONSUMERACQUIREATTRIBKHRPROC __eglewStreamConsumerAcquireAttribKHR; +EGLEW_FUN_EXPORT PFNEGLSTREAMCONSUMERRELEASEATTRIBKHRPROC __eglewStreamConsumerReleaseAttribKHR; + EGLEW_FUN_EXPORT PFNEGLSTREAMCONSUMERACQUIREKHRPROC __eglewStreamConsumerAcquireKHR; EGLEW_FUN_EXPORT PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC __eglewStreamConsumerGLTextureExternalKHR; EGLEW_FUN_EXPORT PFNEGLSTREAMCONSUMERRELEASEKHRPROC __eglewStreamConsumerReleaseKHR; @@ -2127,6 +2458,8 @@ EGLEW_FUN_EXPORT PFNEGLQUERYDISPLAYATTRIBNVPROC __eglewQueryDisplayAttribNV; EGLEW_FUN_EXPORT PFNEGLQUERYSTREAMMETADATANVPROC __eglewQueryStreamMetadataNV; EGLEW_FUN_EXPORT PFNEGLSETSTREAMMETADATANVPROC __eglewSetStreamMetadataNV; +EGLEW_FUN_EXPORT PFNEGLRESETSTREAMNVPROC __eglewResetStreamNV; + EGLEW_FUN_EXPORT PFNEGLCREATESTREAMSYNCNVPROC __eglewCreateStreamSyncNV; EGLEW_FUN_EXPORT PFNEGLCLIENTWAITSYNCNVPROC __eglewClientWaitSyncNV; @@ -2157,6 +2490,7 @@ EGLEW_VAR_EXPORT GLboolean __EGLEW_ANGLE_device_d3d; EGLEW_VAR_EXPORT GLboolean __EGLEW_ANGLE_query_surface_pointer; EGLEW_VAR_EXPORT GLboolean __EGLEW_ANGLE_surface_d3d_texture_2d_share_handle; EGLEW_VAR_EXPORT GLboolean __EGLEW_ANGLE_window_fixed_size; +EGLEW_VAR_EXPORT GLboolean __EGLEW_ARM_implicit_external_sync; EGLEW_VAR_EXPORT GLboolean __EGLEW_ARM_pixmap_multisample_discard; EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_buffer_age; EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_client_extensions; @@ -2166,11 +2500,16 @@ EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_device_drm; EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_device_enumeration; EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_device_openwf; EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_device_query; +EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_gl_colorspace_bt2020_linear; +EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_gl_colorspace_bt2020_pq; +EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_gl_colorspace_scrgb_linear; EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_image_dma_buf_import; +EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_image_dma_buf_import_modifiers; EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_multiview_window; EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_output_base; EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_output_drm; EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_output_openwf; +EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_pixel_format_float; EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_platform_base; EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_platform_device; EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_platform_wayland; @@ -2178,6 +2517,7 @@ EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_platform_x11; EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_protected_content; EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_protected_surface; EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_stream_consumer_egloutput; +EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_surface_SMPTE2086_metadata; EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_swap_buffers_with_damage; EGLEW_VAR_EXPORT GLboolean __EGLEW_EXT_yuv_surface; EGLEW_VAR_EXPORT GLboolean __EGLEW_HI_clientpixmap; @@ -2188,6 +2528,7 @@ EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_cl_event; EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_cl_event2; EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_client_get_all_proc_addresses; EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_config_attribs; +EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_context_flush_control; EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_create_context; EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_create_context_no_error; EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_debug; @@ -2205,6 +2546,7 @@ EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_lock_surface; EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_lock_surface2; EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_lock_surface3; EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_mutable_render_buffer; +EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_no_config_context; EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_partial_update; EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_platform_android; EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_platform_gbm; @@ -2212,6 +2554,7 @@ EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_platform_wayland; EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_platform_x11; EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_reusable_sync; EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_stream; +EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_stream_attrib; EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_stream_consumer_gltexture; EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_stream_cross_process_fd; EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_stream_fifo; @@ -2224,6 +2567,7 @@ EGLEW_VAR_EXPORT GLboolean __EGLEW_KHR_wait_sync; EGLEW_VAR_EXPORT GLboolean __EGLEW_MESA_drm_image; EGLEW_VAR_EXPORT GLboolean __EGLEW_MESA_image_dma_buf_export; EGLEW_VAR_EXPORT GLboolean __EGLEW_MESA_platform_gbm; +EGLEW_VAR_EXPORT GLboolean __EGLEW_MESA_platform_surfaceless; EGLEW_VAR_EXPORT GLboolean __EGLEW_NOK_swap_region; EGLEW_VAR_EXPORT GLboolean __EGLEW_NOK_swap_region2; EGLEW_VAR_EXPORT GLboolean __EGLEW_NOK_texture_from_pixmap; @@ -2238,7 +2582,20 @@ EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_post_convert_rounding; EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_post_sub_buffer; EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_robustness_video_memory_purge; EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_stream_consumer_gltexture_yuv; +EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_stream_cross_display; +EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_stream_cross_object; +EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_stream_cross_partition; +EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_stream_cross_process; +EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_stream_cross_system; +EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_stream_fifo_next; +EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_stream_fifo_synchronous; +EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_stream_frame_limits; EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_stream_metadata; +EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_stream_remote; +EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_stream_reset; +EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_stream_socket; +EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_stream_socket_inet; +EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_stream_socket_unix; EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_stream_sync; EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_sync; EGLEW_VAR_EXPORT GLboolean __EGLEW_NV_system_time; diff --git a/ref/glew/include/GL/glew.h b/ref/glew/include/GL/glew.h index fae0c216..b5b6987f 100644 --- a/ref/glew/include/GL/glew.h +++ b/ref/glew/include/GL/glew.h @@ -1,6 +1,6 @@ /* ** The OpenGL Extension Wrangler Library -** Copyright (C) 2008-2015, Nigel Stewart +** Copyright (C) 2008-2017, Nigel Stewart ** Copyright (C) 2002-2008, Milan Ikits ** Copyright (C) 2002-2008, Marcelo E. Magallon ** Copyright (C) 2002, Lev Povalahev @@ -2496,6 +2496,46 @@ typedef void (GLAPIENTRY * PFNGLGETNUNIFORMDVPROC) (GLuint program, GLint locati #endif /* GL_VERSION_4_5 */ +/* ----------------------------- GL_VERSION_4_6 ---------------------------- */ + +#ifndef GL_VERSION_4_6 +#define GL_VERSION_4_6 1 + +#define GL_CONTEXT_FLAG_NO_ERROR_BIT 0x00000008 +#define GL_PARAMETER_BUFFER 0x80EE +#define GL_PARAMETER_BUFFER_BINDING 0x80EF +#define GL_TRANSFORM_FEEDBACK_OVERFLOW 0x82EC +#define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW 0x82ED +#define GL_VERTICES_SUBMITTED 0x82EE +#define GL_PRIMITIVES_SUBMITTED 0x82EF +#define GL_VERTEX_SHADER_INVOCATIONS 0x82F0 +#define GL_TESS_CONTROL_SHADER_PATCHES 0x82F1 +#define GL_TESS_EVALUATION_SHADER_INVOCATIONS 0x82F2 +#define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED 0x82F3 +#define GL_FRAGMENT_SHADER_INVOCATIONS 0x82F4 +#define GL_COMPUTE_SHADER_INVOCATIONS 0x82F5 +#define GL_CLIPPING_INPUT_PRIMITIVES 0x82F6 +#define GL_CLIPPING_OUTPUT_PRIMITIVES 0x82F7 +#define GL_TEXTURE_MAX_ANISOTROPY 0x84FE +#define GL_MAX_TEXTURE_MAX_ANISOTROPY 0x84FF +#define GL_POLYGON_OFFSET_CLAMP 0x8E1B +#define GL_SHADER_BINARY_FORMAT_SPIR_V 0x9551 +#define GL_SPIR_V_BINARY 0x9552 +#define GL_SPIR_V_EXTENSIONS 0x9553 +#define GL_NUM_SPIR_V_EXTENSIONS 0x9554 + +typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC) (GLenum mode, const GLvoid *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC) (GLenum mode, GLenum type, const GLvoid *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +typedef void (GLAPIENTRY * PFNGLSPECIALIZESHADERPROC) (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); + +#define glMultiDrawArraysIndirectCount GLEW_GET_FUN(__glewMultiDrawArraysIndirectCount) +#define glMultiDrawElementsIndirectCount GLEW_GET_FUN(__glewMultiDrawElementsIndirectCount) +#define glSpecializeShader GLEW_GET_FUN(__glewSpecializeShader) + +#define GLEW_VERSION_4_6 GLEW_GET_VAR(__GLEW_VERSION_4_6) + +#endif /* GL_VERSION_4_6 */ + /* -------------------------- GL_3DFX_multisample -------------------------- */ #ifndef GL_3DFX_multisample @@ -2547,6 +2587,31 @@ typedef void (GLAPIENTRY * PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); #endif /* GL_AMD_blend_minmax_factor */ +/* --------------------- GL_AMD_compressed_3DC_texture --------------------- */ + +#ifndef GL_AMD_compressed_3DC_texture +#define GL_AMD_compressed_3DC_texture 1 + +#define GL_3DC_X_AMD 0x87F9 +#define GL_3DC_XY_AMD 0x87FA + +#define GLEW_AMD_compressed_3DC_texture GLEW_GET_VAR(__GLEW_AMD_compressed_3DC_texture) + +#endif /* GL_AMD_compressed_3DC_texture */ + +/* --------------------- GL_AMD_compressed_ATC_texture --------------------- */ + +#ifndef GL_AMD_compressed_ATC_texture +#define GL_AMD_compressed_ATC_texture 1 + +#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE +#define GL_ATC_RGB_AMD 0x8C92 +#define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD 0x8C93 + +#define GLEW_AMD_compressed_ATC_texture GLEW_GET_VAR(__GLEW_AMD_compressed_ATC_texture) + +#endif /* GL_AMD_compressed_ATC_texture */ + /* ----------------------- GL_AMD_conservative_depth ----------------------- */ #ifndef GL_AMD_conservative_depth @@ -2623,6 +2688,30 @@ typedef void (GLAPIENTRY * PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GL #endif /* GL_AMD_draw_buffers_blend */ +/* ------------------ GL_AMD_framebuffer_sample_positions ------------------ */ + +#ifndef GL_AMD_framebuffer_sample_positions +#define GL_AMD_framebuffer_sample_positions 1 + +#define GL_SUBSAMPLE_DISTANCE_AMD 0x883F +#define GL_PIXELS_PER_SAMPLE_PATTERN_X_AMD 0x91AE +#define GL_PIXELS_PER_SAMPLE_PATTERN_Y_AMD 0x91AF +#define GL_ALL_PIXELS_AMD 0xFFFFFFFF + +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC) (GLenum target, GLuint numsamples, GLuint pixelindex, const GLfloat* values); +typedef void (GLAPIENTRY * PFNGLGETFRAMEBUFFERPARAMETERFVAMDPROC) (GLenum target, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat* values); +typedef void (GLAPIENTRY * PFNGLGETNAMEDFRAMEBUFFERPARAMETERFVAMDPROC) (GLuint framebuffer, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat* values); +typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC) (GLuint framebuffer, GLuint numsamples, GLuint pixelindex, const GLfloat* values); + +#define glFramebufferSamplePositionsfvAMD GLEW_GET_FUN(__glewFramebufferSamplePositionsfvAMD) +#define glGetFramebufferParameterfvAMD GLEW_GET_FUN(__glewGetFramebufferParameterfvAMD) +#define glGetNamedFramebufferParameterfvAMD GLEW_GET_FUN(__glewGetNamedFramebufferParameterfvAMD) +#define glNamedFramebufferSamplePositionsfvAMD GLEW_GET_FUN(__glewNamedFramebufferSamplePositionsfvAMD) + +#define GLEW_AMD_framebuffer_sample_positions GLEW_GET_VAR(__GLEW_AMD_framebuffer_sample_positions) + +#endif /* GL_AMD_framebuffer_sample_positions */ + /* --------------------------- GL_AMD_gcn_shader --------------------------- */ #ifndef GL_AMD_gcn_shader @@ -2632,6 +2721,38 @@ typedef void (GLAPIENTRY * PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GL #endif /* GL_AMD_gcn_shader */ +/* ---------------------- GL_AMD_gpu_shader_half_float --------------------- */ + +#ifndef GL_AMD_gpu_shader_half_float +#define GL_AMD_gpu_shader_half_float 1 + +#define GL_FLOAT16_NV 0x8FF8 +#define GL_FLOAT16_VEC2_NV 0x8FF9 +#define GL_FLOAT16_VEC3_NV 0x8FFA +#define GL_FLOAT16_VEC4_NV 0x8FFB +#define GL_FLOAT16_MAT2_AMD 0x91C5 +#define GL_FLOAT16_MAT3_AMD 0x91C6 +#define GL_FLOAT16_MAT4_AMD 0x91C7 +#define GL_FLOAT16_MAT2x3_AMD 0x91C8 +#define GL_FLOAT16_MAT2x4_AMD 0x91C9 +#define GL_FLOAT16_MAT3x2_AMD 0x91CA +#define GL_FLOAT16_MAT3x4_AMD 0x91CB +#define GL_FLOAT16_MAT4x2_AMD 0x91CC +#define GL_FLOAT16_MAT4x3_AMD 0x91CD + +#define GLEW_AMD_gpu_shader_half_float GLEW_GET_VAR(__GLEW_AMD_gpu_shader_half_float) + +#endif /* GL_AMD_gpu_shader_half_float */ + +/* ------------------------ GL_AMD_gpu_shader_int16 ------------------------ */ + +#ifndef GL_AMD_gpu_shader_int16 +#define GL_AMD_gpu_shader_int16 1 + +#define GLEW_AMD_gpu_shader_int16 GLEW_GET_VAR(__GLEW_AMD_gpu_shader_int16) + +#endif /* GL_AMD_gpu_shader_int16 */ + /* ------------------------ GL_AMD_gpu_shader_int64 ------------------------ */ #ifndef GL_AMD_gpu_shader_int64 @@ -2774,6 +2895,17 @@ typedef void (GLAPIENTRY * PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monito #endif /* GL_AMD_pinned_memory */ +/* ----------------------- GL_AMD_program_binary_Z400 ---------------------- */ + +#ifndef GL_AMD_program_binary_Z400 +#define GL_AMD_program_binary_Z400 1 + +#define GL_Z400_BINARY_AMD 0x8740 + +#define GLEW_AMD_program_binary_Z400 GLEW_GET_VAR(__GLEW_AMD_program_binary_Z400) + +#endif /* GL_AMD_program_binary_Z400 */ + /* ----------------------- GL_AMD_query_buffer_object ---------------------- */ #ifndef GL_AMD_query_buffer_object @@ -2807,7 +2939,7 @@ typedef void (GLAPIENTRY * PFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint i #ifndef GL_AMD_seamless_cubemap_per_texture #define GL_AMD_seamless_cubemap_per_texture 1 -#define GL_TEXTURE_CUBE_MAP_SEAMLESS_ARB 0x884F +#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F #define GLEW_AMD_seamless_cubemap_per_texture GLEW_GET_VAR(__GLEW_AMD_seamless_cubemap_per_texture) @@ -2822,6 +2954,15 @@ typedef void (GLAPIENTRY * PFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint i #endif /* GL_AMD_shader_atomic_counter_ops */ +/* -------------------------- GL_AMD_shader_ballot ------------------------- */ + +#ifndef GL_AMD_shader_ballot +#define GL_AMD_shader_ballot 1 + +#define GLEW_AMD_shader_ballot GLEW_GET_VAR(__GLEW_AMD_shader_ballot) + +#endif /* GL_AMD_shader_ballot */ + /* ---------------- GL_AMD_shader_explicit_vertex_parameter ---------------- */ #ifndef GL_AMD_shader_explicit_vertex_parameter @@ -2901,6 +3042,15 @@ typedef void (GLAPIENTRY * PFNGLSTENCILOPVALUEAMDPROC) (GLenum face, GLuint valu #endif /* GL_AMD_stencil_operation_extended */ +/* --------------------- GL_AMD_texture_gather_bias_lod -------------------- */ + +#ifndef GL_AMD_texture_gather_bias_lod +#define GL_AMD_texture_gather_bias_lod 1 + +#define GLEW_AMD_texture_gather_bias_lod GLEW_GET_VAR(__GLEW_AMD_texture_gather_bias_lod) + +#endif /* GL_AMD_texture_gather_bias_lod */ + /* ------------------------ GL_AMD_texture_texture4 ------------------------ */ #ifndef GL_AMD_texture_texture4 @@ -2971,6 +3121,15 @@ typedef void (GLAPIENTRY * PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode); #endif /* GL_AMD_vertex_shader_viewport_index */ +/* -------------------- GL_ANDROID_extension_pack_es31a -------------------- */ + +#ifndef GL_ANDROID_extension_pack_es31a +#define GL_ANDROID_extension_pack_es31a 1 + +#define GLEW_ANDROID_extension_pack_es31a GLEW_GET_VAR(__GLEW_ANDROID_extension_pack_es31a) + +#endif /* GL_ANDROID_extension_pack_es31a */ + /* ------------------------- GL_ANGLE_depth_texture ------------------------ */ #ifndef GL_ANGLE_depth_texture @@ -3187,6 +3346,47 @@ typedef void (GLAPIENTRY * PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC) (GLuint shad #endif /* GL_APPLE_client_storage */ +/* ------------------------- GL_APPLE_clip_distance ------------------------ */ + +#ifndef GL_APPLE_clip_distance +#define GL_APPLE_clip_distance 1 + +#define GL_MAX_CLIP_DISTANCES_APPLE 0x0D32 +#define GL_CLIP_DISTANCE0_APPLE 0x3000 +#define GL_CLIP_DISTANCE1_APPLE 0x3001 +#define GL_CLIP_DISTANCE2_APPLE 0x3002 +#define GL_CLIP_DISTANCE3_APPLE 0x3003 +#define GL_CLIP_DISTANCE4_APPLE 0x3004 +#define GL_CLIP_DISTANCE5_APPLE 0x3005 +#define GL_CLIP_DISTANCE6_APPLE 0x3006 +#define GL_CLIP_DISTANCE7_APPLE 0x3007 + +#define GLEW_APPLE_clip_distance GLEW_GET_VAR(__GLEW_APPLE_clip_distance) + +#endif /* GL_APPLE_clip_distance */ + +/* ------------------- GL_APPLE_color_buffer_packed_float ------------------ */ + +#ifndef GL_APPLE_color_buffer_packed_float +#define GL_APPLE_color_buffer_packed_float 1 + +#define GLEW_APPLE_color_buffer_packed_float GLEW_GET_VAR(__GLEW_APPLE_color_buffer_packed_float) + +#endif /* GL_APPLE_color_buffer_packed_float */ + +/* ---------------------- GL_APPLE_copy_texture_levels --------------------- */ + +#ifndef GL_APPLE_copy_texture_levels +#define GL_APPLE_copy_texture_levels 1 + +typedef void (GLAPIENTRY * PFNGLCOPYTEXTURELEVELSAPPLEPROC) (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); + +#define glCopyTextureLevelsAPPLE GLEW_GET_FUN(__glewCopyTextureLevelsAPPLE) + +#define GLEW_APPLE_copy_texture_levels GLEW_GET_VAR(__GLEW_APPLE_copy_texture_levels) + +#endif /* GL_APPLE_copy_texture_levels */ + /* ------------------------- GL_APPLE_element_array ------------------------ */ #ifndef GL_APPLE_element_array @@ -3284,6 +3484,29 @@ typedef void (GLAPIENTRY * PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, #endif /* GL_APPLE_flush_buffer_range */ +/* -------------------- GL_APPLE_framebuffer_multisample ------------------- */ + +#ifndef GL_APPLE_framebuffer_multisample +#define GL_APPLE_framebuffer_multisample 1 + +#define GL_DRAW_FRAMEBUFFER_BINDING_APPLE 0x8CA6 +#define GL_READ_FRAMEBUFFER_APPLE 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_APPLE 0x8CA9 +#define GL_READ_FRAMEBUFFER_BINDING_APPLE 0x8CAA +#define GL_RENDERBUFFER_SAMPLES_APPLE 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE 0x8D56 +#define GL_MAX_SAMPLES_APPLE 0x8D57 + +typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY * PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC) (void); + +#define glRenderbufferStorageMultisampleAPPLE GLEW_GET_FUN(__glewRenderbufferStorageMultisampleAPPLE) +#define glResolveMultisampleFramebufferAPPLE GLEW_GET_FUN(__glewResolveMultisampleFramebufferAPPLE) + +#define GLEW_APPLE_framebuffer_multisample GLEW_GET_VAR(__GLEW_APPLE_framebuffer_multisample) + +#endif /* GL_APPLE_framebuffer_multisample */ + /* ----------------------- GL_APPLE_object_purgeable ----------------------- */ #ifndef GL_APPLE_object_purgeable @@ -3356,6 +3579,94 @@ typedef GLenum (GLAPIENTRY * PFNGLOBJECTUNPURGEABLEAPPLEPROC) (GLenum objectType #endif /* GL_APPLE_specular_vector */ +/* ----------------------------- GL_APPLE_sync ----------------------------- */ + +#ifndef GL_APPLE_sync +#define GL_APPLE_sync 1 + +#define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE 0x00000001 +#define GL_SYNC_OBJECT_APPLE 0x8A53 +#define GL_MAX_SERVER_WAIT_TIMEOUT_APPLE 0x9111 +#define GL_OBJECT_TYPE_APPLE 0x9112 +#define GL_SYNC_CONDITION_APPLE 0x9113 +#define GL_SYNC_STATUS_APPLE 0x9114 +#define GL_SYNC_FLAGS_APPLE 0x9115 +#define GL_SYNC_FENCE_APPLE 0x9116 +#define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE 0x9117 +#define GL_UNSIGNALED_APPLE 0x9118 +#define GL_SIGNALED_APPLE 0x9119 +#define GL_ALREADY_SIGNALED_APPLE 0x911A +#define GL_TIMEOUT_EXPIRED_APPLE 0x911B +#define GL_CONDITION_SATISFIED_APPLE 0x911C +#define GL_WAIT_FAILED_APPLE 0x911D +#define GL_TIMEOUT_IGNORED_APPLE 0xFFFFFFFFFFFFFFFFull + +typedef GLenum (GLAPIENTRY * PFNGLCLIENTWAITSYNCAPPLEPROC) (GLsync GLsync, GLbitfield flags, GLuint64 timeout); +typedef void (GLAPIENTRY * PFNGLDELETESYNCAPPLEPROC) (GLsync GLsync); +typedef GLsync (GLAPIENTRY * PFNGLFENCESYNCAPPLEPROC) (GLenum condition, GLbitfield flags); +typedef void (GLAPIENTRY * PFNGLGETINTEGER64VAPPLEPROC) (GLenum pname, GLint64* params); +typedef void (GLAPIENTRY * PFNGLGETSYNCIVAPPLEPROC) (GLsync GLsync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint *values); +typedef GLboolean (GLAPIENTRY * PFNGLISSYNCAPPLEPROC) (GLsync GLsync); +typedef void (GLAPIENTRY * PFNGLWAITSYNCAPPLEPROC) (GLsync GLsync, GLbitfield flags, GLuint64 timeout); + +#define glClientWaitSyncAPPLE GLEW_GET_FUN(__glewClientWaitSyncAPPLE) +#define glDeleteSyncAPPLE GLEW_GET_FUN(__glewDeleteSyncAPPLE) +#define glFenceSyncAPPLE GLEW_GET_FUN(__glewFenceSyncAPPLE) +#define glGetInteger64vAPPLE GLEW_GET_FUN(__glewGetInteger64vAPPLE) +#define glGetSyncivAPPLE GLEW_GET_FUN(__glewGetSyncivAPPLE) +#define glIsSyncAPPLE GLEW_GET_FUN(__glewIsSyncAPPLE) +#define glWaitSyncAPPLE GLEW_GET_FUN(__glewWaitSyncAPPLE) + +#define GLEW_APPLE_sync GLEW_GET_VAR(__GLEW_APPLE_sync) + +#endif /* GL_APPLE_sync */ + +/* -------------------- GL_APPLE_texture_2D_limited_npot ------------------- */ + +#ifndef GL_APPLE_texture_2D_limited_npot +#define GL_APPLE_texture_2D_limited_npot 1 + +#define GLEW_APPLE_texture_2D_limited_npot GLEW_GET_VAR(__GLEW_APPLE_texture_2D_limited_npot) + +#endif /* GL_APPLE_texture_2D_limited_npot */ + +/* -------------------- GL_APPLE_texture_format_BGRA8888 ------------------- */ + +#ifndef GL_APPLE_texture_format_BGRA8888 +#define GL_APPLE_texture_format_BGRA8888 1 + +#define GL_BGRA_EXT 0x80E1 +#define GL_BGRA8_EXT 0x93A1 + +#define GLEW_APPLE_texture_format_BGRA8888 GLEW_GET_VAR(__GLEW_APPLE_texture_format_BGRA8888) + +#endif /* GL_APPLE_texture_format_BGRA8888 */ + +/* ----------------------- GL_APPLE_texture_max_level ---------------------- */ + +#ifndef GL_APPLE_texture_max_level +#define GL_APPLE_texture_max_level 1 + +#define GL_TEXTURE_MAX_LEVEL_APPLE 0x813D + +#define GLEW_APPLE_texture_max_level GLEW_GET_VAR(__GLEW_APPLE_texture_max_level) + +#endif /* GL_APPLE_texture_max_level */ + +/* --------------------- GL_APPLE_texture_packed_float --------------------- */ + +#ifndef GL_APPLE_texture_packed_float +#define GL_APPLE_texture_packed_float 1 + +#define GL_R11F_G11F_B10F_APPLE 0x8C3A +#define GL_UNSIGNED_INT_10F_11F_11F_REV_APPLE 0x8C3B +#define GL_RGB9_E5_APPLE 0x8C3D +#define GL_UNSIGNED_INT_5_9_9_9_REV_APPLE 0x8C3E + +#define GLEW_APPLE_texture_packed_float GLEW_GET_VAR(__GLEW_APPLE_texture_packed_float) + +#endif /* GL_APPLE_texture_packed_float */ + /* ------------------------- GL_APPLE_texture_range ------------------------ */ #ifndef GL_APPLE_texture_range @@ -3684,10 +3995,8 @@ typedef GLint (GLAPIENTRY * PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GL #define GL_BUFFER_STORAGE_FLAGS 0x8220 typedef void (GLAPIENTRY * PFNGLBUFFERSTORAGEPROC) (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); -typedef void (GLAPIENTRY * PFNGLNAMEDBUFFERSTORAGEEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); #define glBufferStorage GLEW_GET_FUN(__glewBufferStorage) -#define glNamedBufferStorageEXT GLEW_GET_FUN(__glewNamedBufferStorageEXT) #define GLEW_ARB_buffer_storage GLEW_GET_VAR(__GLEW_ARB_buffer_storage) @@ -4067,10 +4376,10 @@ typedef void (GLAPIENTRY * PFNGLGETNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLint typedef void (GLAPIENTRY * PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint* params); typedef void (GLAPIENTRY * PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC) (GLuint framebuffer, GLenum pname, GLint* param); typedef void (GLAPIENTRY * PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC) (GLuint renderbuffer, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETQUERYBUFFEROBJECTI64VPROC) (GLuint id,GLuint buffer,GLenum pname,GLintptr offset); -typedef void (GLAPIENTRY * PFNGLGETQUERYBUFFEROBJECTIVPROC) (GLuint id,GLuint buffer,GLenum pname,GLintptr offset); -typedef void (GLAPIENTRY * PFNGLGETQUERYBUFFEROBJECTUI64VPROC) (GLuint id,GLuint buffer,GLenum pname,GLintptr offset); -typedef void (GLAPIENTRY * PFNGLGETQUERYBUFFEROBJECTUIVPROC) (GLuint id,GLuint buffer,GLenum pname,GLintptr offset); +typedef void (GLAPIENTRY * PFNGLGETQUERYBUFFEROBJECTI64VPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +typedef void (GLAPIENTRY * PFNGLGETQUERYBUFFEROBJECTIVPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +typedef void (GLAPIENTRY * PFNGLGETQUERYBUFFEROBJECTUI64VPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +typedef void (GLAPIENTRY * PFNGLGETQUERYBUFFEROBJECTUIVPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); typedef void (GLAPIENTRY * PFNGLGETTEXTUREIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); typedef void (GLAPIENTRY * PFNGLGETTEXTURELEVELPARAMETERFVPROC) (GLuint texture, GLint level, GLenum pname, GLfloat* params); typedef void (GLAPIENTRY * PFNGLGETTEXTURELEVELPARAMETERIVPROC) (GLuint texture, GLint level, GLenum pname, GLint* params); @@ -4285,10 +4594,10 @@ typedef void (GLAPIENTRY * PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLen #ifndef GL_ARB_draw_elements_base_vertex #define GL_ARB_draw_elements_base_vertex 1 -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); +typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, void *indices, GLint basevertex); typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount, GLint basevertex); -typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); -typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei* count, GLenum type, const void *const *indices, GLsizei primcount, const GLint *basevertex); +typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, void *indices, GLint basevertex); +typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei* count, GLenum type, void**indices, GLsizei primcount, GLint *basevertex); #define glDrawElementsBaseVertex GLEW_GET_FUN(__glewDrawElementsBaseVertex) #define glDrawElementsInstancedBaseVertex GLEW_GET_FUN(__glewDrawElementsInstancedBaseVertex) @@ -5590,6 +5899,21 @@ typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GL #endif /* GL_ARB_point_sprite */ +/* ---------------------- GL_ARB_polygon_offset_clamp ---------------------- */ + +#ifndef GL_ARB_polygon_offset_clamp +#define GL_ARB_polygon_offset_clamp 1 + +#define GL_POLYGON_OFFSET_CLAMP 0x8E1B + +typedef void (GLAPIENTRY * PFNGLPOLYGONOFFSETCLAMPPROC) (GLfloat factor, GLfloat units, GLfloat clamp); + +#define glPolygonOffsetClamp GLEW_GET_FUN(__glewPolygonOffsetClamp) + +#define GLEW_ARB_polygon_offset_clamp GLEW_GET_VAR(__GLEW_ARB_polygon_offset_clamp) + +#endif /* GL_ARB_polygon_offset_clamp */ + /* ----------------------- GL_ARB_post_depth_coverage ---------------------- */ #ifndef GL_ARB_post_depth_coverage @@ -6571,10 +6895,8 @@ typedef void (GLAPIENTRY * PFNGLBUFFERPAGECOMMITMENTARBPROC) (GLenum target, GLi #define GL_NUM_SPARSE_LEVELS_ARB 0x91AA typedef void (GLAPIENTRY * PFNGLTEXPAGECOMMITMENTARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); -typedef void (GLAPIENTRY * PFNGLTEXTUREPAGECOMMITMENTEXTPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); #define glTexPageCommitmentARB GLEW_GET_FUN(__glewTexPageCommitmentARB) -#define glTexturePageCommitmentEXT GLEW_GET_FUN(__glewTexturePageCommitmentEXT) #define GLEW_ARB_sparse_texture GLEW_GET_VAR(__GLEW_ARB_sparse_texture) @@ -6598,6 +6920,18 @@ typedef void (GLAPIENTRY * PFNGLTEXTUREPAGECOMMITMENTEXTPROC) (GLuint texture, G #endif /* GL_ARB_sparse_texture_clamp */ +/* ------------------------ GL_ARB_spirv_extensions ------------------------ */ + +#ifndef GL_ARB_spirv_extensions +#define GL_ARB_spirv_extensions 1 + +#define GL_SPIR_V_EXTENSIONS 0x9553 +#define GL_NUM_SPIR_V_EXTENSIONS 0x9554 + +#define GLEW_ARB_spirv_extensions GLEW_GET_VAR(__GLEW_ARB_spirv_extensions) + +#endif /* GL_ARB_spirv_extensions */ + /* ------------------------ GL_ARB_stencil_texturing ----------------------- */ #ifndef GL_ARB_stencil_texturing @@ -6935,6 +7269,18 @@ typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GL #endif /* GL_ARB_texture_env_dot3 */ +/* ------------------- GL_ARB_texture_filter_anisotropic ------------------- */ + +#ifndef GL_ARB_texture_filter_anisotropic +#define GL_ARB_texture_filter_anisotropic 1 + +#define GL_TEXTURE_MAX_ANISOTROPY 0x84FE +#define GL_MAX_TEXTURE_MAX_ANISOTROPY 0x84FF + +#define GLEW_ARB_texture_filter_anisotropic GLEW_GET_VAR(__GLEW_ARB_texture_filter_anisotropic) + +#endif /* GL_ARB_texture_filter_anisotropic */ + /* ---------------------- GL_ARB_texture_filter_minmax --------------------- */ #ifndef GL_ARB_texture_filter_minmax @@ -7163,16 +7509,10 @@ typedef void (GLAPIENTRY * PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsiz typedef void (GLAPIENTRY * PFNGLTEXSTORAGE1DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); typedef void (GLAPIENTRY * PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); typedef void (GLAPIENTRY * PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -typedef void (GLAPIENTRY * PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -typedef void (GLAPIENTRY * PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); #define glTexStorage1D GLEW_GET_FUN(__glewTexStorage1D) #define glTexStorage2D GLEW_GET_FUN(__glewTexStorage2D) #define glTexStorage3D GLEW_GET_FUN(__glewTexStorage3D) -#define glTextureStorage1DEXT GLEW_GET_FUN(__glewTextureStorage1DEXT) -#define glTextureStorage2DEXT GLEW_GET_FUN(__glewTextureStorage2DEXT) -#define glTextureStorage3DEXT GLEW_GET_FUN(__glewTextureStorage3DEXT) #define GLEW_ARB_texture_storage GLEW_GET_VAR(__GLEW_ARB_texture_storage) @@ -8097,6 +8437,60 @@ typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SVARBPROC) (const GLshort* p); #endif /* GL_ARB_window_pos */ +/* ----------------------- GL_ARM_mali_program_binary ---------------------- */ + +#ifndef GL_ARM_mali_program_binary +#define GL_ARM_mali_program_binary 1 + +#define GL_MALI_PROGRAM_BINARY_ARM 0x8F61 + +#define GLEW_ARM_mali_program_binary GLEW_GET_VAR(__GLEW_ARM_mali_program_binary) + +#endif /* GL_ARM_mali_program_binary */ + +/* ----------------------- GL_ARM_mali_shader_binary ----------------------- */ + +#ifndef GL_ARM_mali_shader_binary +#define GL_ARM_mali_shader_binary 1 + +#define GL_MALI_SHADER_BINARY_ARM 0x8F60 + +#define GLEW_ARM_mali_shader_binary GLEW_GET_VAR(__GLEW_ARM_mali_shader_binary) + +#endif /* GL_ARM_mali_shader_binary */ + +/* ------------------------------ GL_ARM_rgba8 ----------------------------- */ + +#ifndef GL_ARM_rgba8 +#define GL_ARM_rgba8 1 + +#define GL_RGBA8_OES 0x8058 + +#define GLEW_ARM_rgba8 GLEW_GET_VAR(__GLEW_ARM_rgba8) + +#endif /* GL_ARM_rgba8 */ + +/* -------------------- GL_ARM_shader_framebuffer_fetch -------------------- */ + +#ifndef GL_ARM_shader_framebuffer_fetch +#define GL_ARM_shader_framebuffer_fetch 1 + +#define GL_FETCH_PER_SAMPLE_ARM 0x8F65 +#define GL_FRAGMENT_SHADER_FRAMEBUFFER_FETCH_MRT_ARM 0x8F66 + +#define GLEW_ARM_shader_framebuffer_fetch GLEW_GET_VAR(__GLEW_ARM_shader_framebuffer_fetch) + +#endif /* GL_ARM_shader_framebuffer_fetch */ + +/* ------------- GL_ARM_shader_framebuffer_fetch_depth_stencil ------------- */ + +#ifndef GL_ARM_shader_framebuffer_fetch_depth_stencil +#define GL_ARM_shader_framebuffer_fetch_depth_stencil 1 + +#define GLEW_ARM_shader_framebuffer_fetch_depth_stencil GLEW_GET_VAR(__GLEW_ARM_shader_framebuffer_fetch_depth_stencil) + +#endif /* GL_ARM_shader_framebuffer_fetch_depth_stencil */ + /* ------------------------- GL_ATIX_point_sprites ------------------------- */ #ifndef GL_ATIX_point_sprites @@ -8648,6 +9042,15 @@ typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GL #endif /* GL_ATI_vertex_streams */ +/* -------------------- GL_EGL_KHR_context_flush_control ------------------- */ + +#ifndef GL_EGL_KHR_context_flush_control +#define GL_EGL_KHR_context_flush_control 1 + +#define GLEW_EGL_KHR_context_flush_control GLEW_GET_VAR(__GLEW_EGL_KHR_context_flush_control) + +#endif /* GL_EGL_KHR_context_flush_control */ + /* ---------------- GL_EGL_NV_robustness_video_memory_purge ---------------- */ #ifndef GL_EGL_NV_robustness_video_memory_purge @@ -8686,6 +9089,26 @@ typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GL #endif /* GL_EXT_Cg_shader */ +/* ------------------------- GL_EXT_EGL_image_array ------------------------ */ + +#ifndef GL_EXT_EGL_image_array +#define GL_EXT_EGL_image_array 1 + +#define GLEW_EXT_EGL_image_array GLEW_GET_VAR(__GLEW_EXT_EGL_image_array) + +#endif /* GL_EXT_EGL_image_array */ + +/* --------------------------- GL_EXT_YUV_target --------------------------- */ + +#ifndef GL_EXT_YUV_target +#define GL_EXT_YUV_target 1 + +#define GL_SAMPLER_EXTERNAL_2D_Y2Y_EXT 0x8BE7 + +#define GLEW_EXT_YUV_target GLEW_GET_VAR(__GLEW_EXT_YUV_target) + +#endif /* GL_EXT_YUV_target */ + /* ------------------------------ GL_EXT_abgr ------------------------------ */ #ifndef GL_EXT_abgr @@ -8697,6 +9120,23 @@ typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GL #endif /* GL_EXT_abgr */ +/* -------------------------- GL_EXT_base_instance ------------------------- */ + +#ifndef GL_EXT_base_instance +#define GL_EXT_base_instance 1 + +typedef void (GLAPIENTRY * PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEEXTPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); +typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); +typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); + +#define glDrawArraysInstancedBaseInstanceEXT GLEW_GET_FUN(__glewDrawArraysInstancedBaseInstanceEXT) +#define glDrawElementsInstancedBaseInstanceEXT GLEW_GET_FUN(__glewDrawElementsInstancedBaseInstanceEXT) +#define glDrawElementsInstancedBaseVertexBaseInstanceEXT GLEW_GET_FUN(__glewDrawElementsInstancedBaseVertexBaseInstanceEXT) + +#define GLEW_EXT_base_instance GLEW_GET_VAR(__GLEW_EXT_base_instance) + +#endif /* GL_EXT_base_instance */ + /* ------------------------------ GL_EXT_bgra ------------------------------ */ #ifndef GL_EXT_bgra @@ -8768,6 +9208,31 @@ typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, G #endif /* GL_EXT_blend_equation_separate */ +/* ----------------------- GL_EXT_blend_func_extended ---------------------- */ + +#ifndef GL_EXT_blend_func_extended +#define GL_EXT_blend_func_extended 1 + +#define GL_SRC_ALPHA_SATURATE_EXT 0x0308 +#define GL_SRC1_ALPHA_EXT 0x8589 +#define GL_SRC1_COLOR_EXT 0x88F9 +#define GL_ONE_MINUS_SRC1_COLOR_EXT 0x88FA +#define GL_ONE_MINUS_SRC1_ALPHA_EXT 0x88FB +#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS_EXT 0x88FC +#define GL_LOCATION_INDEX_EXT 0x930F + +typedef void (GLAPIENTRY * PFNGLBINDFRAGDATALOCATIONINDEXEDEXTPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar * name); +typedef GLint (GLAPIENTRY * PFNGLGETFRAGDATAINDEXEXTPROC) (GLuint program, const GLchar * name); +typedef GLint (GLAPIENTRY * PFNGLGETPROGRAMRESOURCELOCATIONINDEXEXTPROC) (GLuint program, GLenum programInterface, const GLchar* name); + +#define glBindFragDataLocationIndexedEXT GLEW_GET_FUN(__glewBindFragDataLocationIndexedEXT) +#define glGetFragDataIndexEXT GLEW_GET_FUN(__glewGetFragDataIndexEXT) +#define glGetProgramResourceLocationIndexEXT GLEW_GET_FUN(__glewGetProgramResourceLocationIndexEXT) + +#define GLEW_EXT_blend_func_extended GLEW_GET_VAR(__GLEW_EXT_blend_func_extended) + +#endif /* GL_EXT_blend_func_extended */ + /* ----------------------- GL_EXT_blend_func_separate ---------------------- */ #ifndef GL_EXT_blend_func_separate @@ -8825,6 +9290,67 @@ typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); #endif /* GL_EXT_blend_subtract */ +/* ------------------------- GL_EXT_buffer_storage ------------------------- */ + +#ifndef GL_EXT_buffer_storage +#define GL_EXT_buffer_storage 1 + +#define GL_MAP_READ_BIT 0x0001 +#define GL_MAP_WRITE_BIT 0x0002 +#define GL_MAP_PERSISTENT_BIT_EXT 0x0040 +#define GL_MAP_COHERENT_BIT_EXT 0x0080 +#define GL_DYNAMIC_STORAGE_BIT_EXT 0x0100 +#define GL_CLIENT_STORAGE_BIT_EXT 0x0200 +#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT_EXT 0x00004000 +#define GL_BUFFER_IMMUTABLE_STORAGE_EXT 0x821F +#define GL_BUFFER_STORAGE_FLAGS_EXT 0x8220 + +typedef void (GLAPIENTRY * PFNGLBUFFERSTORAGEEXTPROC) (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); +typedef void (GLAPIENTRY * PFNGLNAMEDBUFFERSTORAGEEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); + +#define glBufferStorageEXT GLEW_GET_FUN(__glewBufferStorageEXT) +#define glNamedBufferStorageEXT GLEW_GET_FUN(__glewNamedBufferStorageEXT) + +#define GLEW_EXT_buffer_storage GLEW_GET_VAR(__GLEW_EXT_buffer_storage) + +#endif /* GL_EXT_buffer_storage */ + +/* -------------------------- GL_EXT_clear_texture ------------------------- */ + +#ifndef GL_EXT_clear_texture +#define GL_EXT_clear_texture 1 + +typedef void (GLAPIENTRY * PFNGLCLEARTEXIMAGEEXTPROC) (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); +typedef void (GLAPIENTRY * PFNGLCLEARTEXSUBIMAGEEXTPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); + +#define glClearTexImageEXT GLEW_GET_FUN(__glewClearTexImageEXT) +#define glClearTexSubImageEXT GLEW_GET_FUN(__glewClearTexSubImageEXT) + +#define GLEW_EXT_clear_texture GLEW_GET_VAR(__GLEW_EXT_clear_texture) + +#endif /* GL_EXT_clear_texture */ + +/* ----------------------- GL_EXT_clip_cull_distance ----------------------- */ + +#ifndef GL_EXT_clip_cull_distance +#define GL_EXT_clip_cull_distance 1 + +#define GL_MAX_CLIP_DISTANCES_EXT 0x0D32 +#define GL_CLIP_DISTANCE0_EXT 0x3000 +#define GL_CLIP_DISTANCE1_EXT 0x3001 +#define GL_CLIP_DISTANCE2_EXT 0x3002 +#define GL_CLIP_DISTANCE3_EXT 0x3003 +#define GL_CLIP_DISTANCE4_EXT 0x3004 +#define GL_CLIP_DISTANCE5_EXT 0x3005 +#define GL_CLIP_DISTANCE6_EXT 0x3006 +#define GL_CLIP_DISTANCE7_EXT 0x3007 +#define GL_MAX_CULL_DISTANCES_EXT 0x82F9 +#define GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES_EXT 0x82FA + +#define GLEW_EXT_clip_cull_distance GLEW_GET_VAR(__GLEW_EXT_clip_cull_distance) + +#endif /* GL_EXT_clip_cull_distance */ + /* ------------------------ GL_EXT_clip_volume_hint ------------------------ */ #ifndef GL_EXT_clip_volume_hint @@ -8850,6 +9376,31 @@ typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); #endif /* GL_EXT_cmyka */ +/* ----------------------- GL_EXT_color_buffer_float ----------------------- */ + +#ifndef GL_EXT_color_buffer_float +#define GL_EXT_color_buffer_float 1 + +#define GLEW_EXT_color_buffer_float GLEW_GET_VAR(__GLEW_EXT_color_buffer_float) + +#endif /* GL_EXT_color_buffer_float */ + +/* --------------------- GL_EXT_color_buffer_half_float -------------------- */ + +#ifndef GL_EXT_color_buffer_half_float +#define GL_EXT_color_buffer_half_float 1 + +#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT 0x8211 +#define GL_R16F_EXT 0x822D +#define GL_RG16F_EXT 0x822F +#define GL_RGBA16F_EXT 0x881A +#define GL_RGB16F_EXT 0x881B +#define GL_UNSIGNED_NORMALIZED_EXT 0x8C17 + +#define GLEW_EXT_color_buffer_half_float GLEW_GET_VAR(__GLEW_EXT_color_buffer_half_float) + +#endif /* GL_EXT_color_buffer_half_float */ + /* ------------------------- GL_EXT_color_subtable ------------------------- */ #ifndef GL_EXT_color_subtable @@ -8883,6 +9434,24 @@ typedef void (GLAPIENTRY * PFNGLUNLOCKARRAYSEXTPROC) (void); #endif /* GL_EXT_compiled_vertex_array */ +/* ---------------- GL_EXT_compressed_ETC1_RGB8_sub_texture ---------------- */ + +#ifndef GL_EXT_compressed_ETC1_RGB8_sub_texture +#define GL_EXT_compressed_ETC1_RGB8_sub_texture 1 + +#define GLEW_EXT_compressed_ETC1_RGB8_sub_texture GLEW_GET_VAR(__GLEW_EXT_compressed_ETC1_RGB8_sub_texture) + +#endif /* GL_EXT_compressed_ETC1_RGB8_sub_texture */ + +/* ----------------------- GL_EXT_conservative_depth ----------------------- */ + +#ifndef GL_EXT_conservative_depth +#define GL_EXT_conservative_depth 1 + +#define GLEW_EXT_conservative_depth GLEW_GET_VAR(__GLEW_EXT_conservative_depth) + +#endif /* GL_EXT_conservative_depth */ + /* --------------------------- GL_EXT_convolution -------------------------- */ #ifndef GL_EXT_convolution @@ -8971,6 +9540,19 @@ typedef void (GLAPIENTRY * PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei str #endif /* GL_EXT_coordinate_frame */ +/* --------------------------- GL_EXT_copy_image --------------------------- */ + +#ifndef GL_EXT_copy_image +#define GL_EXT_copy_image 1 + +typedef void (GLAPIENTRY * PFNGLCOPYIMAGESUBDATAEXTPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); + +#define glCopyImageSubDataEXT GLEW_GET_FUN(__glewCopyImageSubDataEXT) + +#define GLEW_EXT_copy_image GLEW_GET_VAR(__GLEW_EXT_copy_image) + +#endif /* GL_EXT_copy_image */ + /* -------------------------- GL_EXT_copy_texture -------------------------- */ #ifndef GL_EXT_copy_texture @@ -9509,6 +10091,71 @@ typedef void (GLAPIENTRY * PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC) (GLuint vaobj, G #endif /* GL_EXT_direct_state_access */ +/* ----------------------- GL_EXT_discard_framebuffer ---------------------- */ + +#ifndef GL_EXT_discard_framebuffer +#define GL_EXT_discard_framebuffer 1 + +#define GL_COLOR_EXT 0x1800 +#define GL_DEPTH_EXT 0x1801 +#define GL_STENCIL_EXT 0x1802 + +typedef void (GLAPIENTRY * PFNGLDISCARDFRAMEBUFFEREXTPROC) (GLenum target, GLsizei numAttachments, const GLenum* attachments); + +#define glDiscardFramebufferEXT GLEW_GET_FUN(__glewDiscardFramebufferEXT) + +#define GLEW_EXT_discard_framebuffer GLEW_GET_VAR(__GLEW_EXT_discard_framebuffer) + +#endif /* GL_EXT_discard_framebuffer */ + +/* -------------------------- GL_EXT_draw_buffers -------------------------- */ + +#ifndef GL_EXT_draw_buffers +#define GL_EXT_draw_buffers 1 + +#define GL_MAX_DRAW_BUFFERS_EXT 0x8824 +#define GL_DRAW_BUFFER0_EXT 0x8825 +#define GL_DRAW_BUFFER1_EXT 0x8826 +#define GL_DRAW_BUFFER2_EXT 0x8827 +#define GL_DRAW_BUFFER3_EXT 0x8828 +#define GL_DRAW_BUFFER4_EXT 0x8829 +#define GL_DRAW_BUFFER5_EXT 0x882A +#define GL_DRAW_BUFFER6_EXT 0x882B +#define GL_DRAW_BUFFER7_EXT 0x882C +#define GL_DRAW_BUFFER8_EXT 0x882D +#define GL_DRAW_BUFFER9_EXT 0x882E +#define GL_DRAW_BUFFER10_EXT 0x882F +#define GL_DRAW_BUFFER11_EXT 0x8830 +#define GL_DRAW_BUFFER12_EXT 0x8831 +#define GL_DRAW_BUFFER13_EXT 0x8832 +#define GL_DRAW_BUFFER14_EXT 0x8833 +#define GL_DRAW_BUFFER15_EXT 0x8834 +#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF +#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 +#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 +#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 +#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 +#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 +#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 +#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 +#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 +#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 +#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 +#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA +#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB +#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC +#define GL_COLOR_ATTACHMENT13_EXT 0x8CED +#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE +#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF + +typedef void (GLAPIENTRY * PFNGLDRAWBUFFERSEXTPROC) (GLsizei n, const GLenum* bufs); + +#define glDrawBuffersEXT GLEW_GET_FUN(__glewDrawBuffersEXT) + +#define GLEW_EXT_draw_buffers GLEW_GET_VAR(__GLEW_EXT_draw_buffers) + +#endif /* GL_EXT_draw_buffers */ + /* -------------------------- GL_EXT_draw_buffers2 ------------------------- */ #ifndef GL_EXT_draw_buffers2 @@ -9532,6 +10179,52 @@ typedef GLboolean (GLAPIENTRY * PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GL #endif /* GL_EXT_draw_buffers2 */ +/* ---------------------- GL_EXT_draw_buffers_indexed ---------------------- */ + +#ifndef GL_EXT_draw_buffers_indexed +#define GL_EXT_draw_buffers_indexed 1 + +typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONSEPARATEIEXTPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONIEXTPROC) (GLuint buf, GLenum mode); +typedef void (GLAPIENTRY * PFNGLBLENDFUNCSEPARATEIEXTPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (GLAPIENTRY * PFNGLBLENDFUNCIEXTPROC) (GLuint buf, GLenum src, GLenum dst); +typedef void (GLAPIENTRY * PFNGLCOLORMASKIEXTPROC) (GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +typedef void (GLAPIENTRY * PFNGLDISABLEIEXTPROC) (GLenum target, GLuint index); +typedef void (GLAPIENTRY * PFNGLENABLEIEXTPROC) (GLenum target, GLuint index); +typedef GLboolean (GLAPIENTRY * PFNGLISENABLEDIEXTPROC) (GLenum target, GLuint index); + +#define glBlendEquationSeparateiEXT GLEW_GET_FUN(__glewBlendEquationSeparateiEXT) +#define glBlendEquationiEXT GLEW_GET_FUN(__glewBlendEquationiEXT) +#define glBlendFuncSeparateiEXT GLEW_GET_FUN(__glewBlendFuncSeparateiEXT) +#define glBlendFunciEXT GLEW_GET_FUN(__glewBlendFunciEXT) +#define glColorMaskiEXT GLEW_GET_FUN(__glewColorMaskiEXT) +#define glDisableiEXT GLEW_GET_FUN(__glewDisableiEXT) +#define glEnableiEXT GLEW_GET_FUN(__glewEnableiEXT) +#define glIsEnablediEXT GLEW_GET_FUN(__glewIsEnablediEXT) + +#define GLEW_EXT_draw_buffers_indexed GLEW_GET_VAR(__GLEW_EXT_draw_buffers_indexed) + +#endif /* GL_EXT_draw_buffers_indexed */ + +/* -------------------- GL_EXT_draw_elements_base_vertex ------------------- */ + +#ifndef GL_EXT_draw_elements_base_vertex +#define GL_EXT_draw_elements_base_vertex 1 + +typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSBASEVERTEXEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); +typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); +typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTSBASEVERTEXEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); +typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSBASEVERTEXEXTPROC) (GLenum mode, const GLsizei* count, GLenum type, const void *const *indices, GLsizei primcount, const GLint *basevertex); + +#define glDrawElementsBaseVertexEXT GLEW_GET_FUN(__glewDrawElementsBaseVertexEXT) +#define glDrawElementsInstancedBaseVertexEXT GLEW_GET_FUN(__glewDrawElementsInstancedBaseVertexEXT) +#define glDrawRangeElementsBaseVertexEXT GLEW_GET_FUN(__glewDrawRangeElementsBaseVertexEXT) +#define glMultiDrawElementsBaseVertexEXT GLEW_GET_FUN(__glewMultiDrawElementsBaseVertexEXT) + +#define GLEW_EXT_draw_elements_base_vertex GLEW_GET_VAR(__GLEW_EXT_draw_elements_base_vertex) + +#endif /* GL_EXT_draw_elements_base_vertex */ + /* ------------------------- GL_EXT_draw_instanced ------------------------- */ #ifndef GL_EXT_draw_instanced @@ -9563,6 +10256,32 @@ typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint s #endif /* GL_EXT_draw_range_elements */ +/* ------------------------- GL_EXT_external_buffer ------------------------ */ + +#ifndef GL_EXT_external_buffer +#define GL_EXT_external_buffer 1 + +typedef void* GLeglClientBufferEXT; + +typedef void (GLAPIENTRY * PFNGLBUFFERSTORAGEEXTERNALEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); +typedef void (GLAPIENTRY * PFNGLNAMEDBUFFERSTORAGEEXTERNALEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); + +#define glBufferStorageExternalEXT GLEW_GET_FUN(__glewBufferStorageExternalEXT) +#define glNamedBufferStorageExternalEXT GLEW_GET_FUN(__glewNamedBufferStorageExternalEXT) + +#define GLEW_EXT_external_buffer GLEW_GET_VAR(__GLEW_EXT_external_buffer) + +#endif /* GL_EXT_external_buffer */ + +/* --------------------------- GL_EXT_float_blend -------------------------- */ + +#ifndef GL_EXT_float_blend +#define GL_EXT_float_blend 1 + +#define GLEW_EXT_float_blend GLEW_GET_VAR(__GLEW_EXT_float_blend) + +#endif /* GL_EXT_float_blend */ + /* ---------------------------- GL_EXT_fog_coord --------------------------- */ #ifndef GL_EXT_fog_coord @@ -9593,6 +10312,15 @@ typedef void (GLAPIENTRY * PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); #endif /* GL_EXT_fog_coord */ +/* --------------------------- GL_EXT_frag_depth --------------------------- */ + +#ifndef GL_EXT_frag_depth +#define GL_EXT_frag_depth 1 + +#define GLEW_EXT_frag_depth GLEW_GET_VAR(__GLEW_EXT_frag_depth) + +#endif /* GL_EXT_frag_depth */ + /* ------------------------ GL_EXT_fragment_lighting ----------------------- */ #ifndef GL_EXT_fragment_lighting @@ -9811,6 +10539,92 @@ typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLen #endif /* GL_EXT_framebuffer_sRGB */ +/* ----------------------- GL_EXT_geometry_point_size ---------------------- */ + +#ifndef GL_EXT_geometry_point_size +#define GL_EXT_geometry_point_size 1 + +#define GL_GEOMETRY_SHADER_BIT_EXT 0x00000004 +#define GL_LINES_ADJACENCY_EXT 0xA +#define GL_LINE_STRIP_ADJACENCY_EXT 0xB +#define GL_TRIANGLES_ADJACENCY_EXT 0xC +#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0xD +#define GL_LAYER_PROVOKING_VERTEX_EXT 0x825E +#define GL_UNDEFINED_VERTEX_EXT 0x8260 +#define GL_GEOMETRY_SHADER_INVOCATIONS_EXT 0x887F +#define GL_GEOMETRY_LINKED_VERTICES_OUT_EXT 0x8916 +#define GL_GEOMETRY_LINKED_INPUT_TYPE_EXT 0x8917 +#define GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT 0x8918 +#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT 0x8A2C +#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8A32 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 +#define GL_PRIMITIVES_GENERATED_EXT 0x8C87 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 +#define GL_GEOMETRY_SHADER_EXT 0x8DD9 +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 +#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D +#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E +#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS_EXT 0x8E5A +#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS_EXT 0x90CD +#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_EXT 0x90D7 +#define GL_MAX_GEOMETRY_INPUT_COMPONENTS_EXT 0x9123 +#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_EXT 0x9124 +#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_EXT 0x92CF +#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS_EXT 0x92D5 +#define GL_REFERENCED_BY_GEOMETRY_SHADER_EXT 0x9309 +#define GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT 0x9312 +#define GL_MAX_FRAMEBUFFER_LAYERS_EXT 0x9317 + +#define GLEW_EXT_geometry_point_size GLEW_GET_VAR(__GLEW_EXT_geometry_point_size) + +#endif /* GL_EXT_geometry_point_size */ + +/* ------------------------- GL_EXT_geometry_shader ------------------------ */ + +#ifndef GL_EXT_geometry_shader +#define GL_EXT_geometry_shader 1 + +#define GL_GEOMETRY_SHADER_BIT_EXT 0x00000004 +#define GL_LINES_ADJACENCY_EXT 0xA +#define GL_LINE_STRIP_ADJACENCY_EXT 0xB +#define GL_TRIANGLES_ADJACENCY_EXT 0xC +#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0xD +#define GL_LAYER_PROVOKING_VERTEX_EXT 0x825E +#define GL_UNDEFINED_VERTEX_EXT 0x8260 +#define GL_GEOMETRY_SHADER_INVOCATIONS_EXT 0x887F +#define GL_GEOMETRY_LINKED_VERTICES_OUT_EXT 0x8916 +#define GL_GEOMETRY_LINKED_INPUT_TYPE_EXT 0x8917 +#define GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT 0x8918 +#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT 0x8A2C +#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8A32 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 +#define GL_PRIMITIVES_GENERATED_EXT 0x8C87 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 +#define GL_GEOMETRY_SHADER_EXT 0x8DD9 +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 +#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D +#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E +#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS_EXT 0x8E5A +#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS_EXT 0x90CD +#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_EXT 0x90D7 +#define GL_MAX_GEOMETRY_INPUT_COMPONENTS_EXT 0x9123 +#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_EXT 0x9124 +#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_EXT 0x92CF +#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS_EXT 0x92D5 +#define GL_REFERENCED_BY_GEOMETRY_SHADER_EXT 0x9309 +#define GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT 0x9312 +#define GL_MAX_FRAMEBUFFER_LAYERS_EXT 0x9317 + +#define GLEW_EXT_geometry_shader GLEW_GET_VAR(__GLEW_EXT_geometry_shader) + +#endif /* GL_EXT_geometry_shader */ + /* ------------------------ GL_EXT_geometry_shader4 ------------------------ */ #ifndef GL_EXT_geometry_shader4 @@ -9970,6 +10784,15 @@ typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLin #endif /* GL_EXT_gpu_shader4 */ +/* --------------------------- GL_EXT_gpu_shader5 -------------------------- */ + +#ifndef GL_EXT_gpu_shader5 +#define GL_EXT_gpu_shader5 1 + +#define GLEW_EXT_gpu_shader5 GLEW_GET_VAR(__GLEW_EXT_gpu_shader5) + +#endif /* GL_EXT_gpu_shader5 */ + /* ---------------------------- GL_EXT_histogram --------------------------- */ #ifndef GL_EXT_histogram @@ -10059,6 +10882,21 @@ typedef void (GLAPIENTRY * PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode) #endif /* GL_EXT_index_texture */ +/* ------------------------ GL_EXT_instanced_arrays ------------------------ */ + +#ifndef GL_EXT_instanced_arrays +#define GL_EXT_instanced_arrays 1 + +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_EXT 0x88FE + +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBDIVISOREXTPROC) (GLuint index, GLuint divisor); + +#define glVertexAttribDivisorEXT GLEW_GET_FUN(__glewVertexAttribDivisorEXT) + +#define GLEW_EXT_instanced_arrays GLEW_GET_VAR(__GLEW_EXT_instanced_arrays) + +#endif /* GL_EXT_instanced_arrays */ + /* -------------------------- GL_EXT_light_texture ------------------------- */ #ifndef GL_EXT_light_texture @@ -10086,6 +10924,138 @@ typedef void (GLAPIENTRY * PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mod #endif /* GL_EXT_light_texture */ +/* ------------------------ GL_EXT_map_buffer_range ------------------------ */ + +#ifndef GL_EXT_map_buffer_range +#define GL_EXT_map_buffer_range 1 + +#define GL_MAP_READ_BIT_EXT 0x0001 +#define GL_MAP_WRITE_BIT_EXT 0x0002 +#define GL_MAP_INVALIDATE_RANGE_BIT_EXT 0x0004 +#define GL_MAP_INVALIDATE_BUFFER_BIT_EXT 0x0008 +#define GL_MAP_FLUSH_EXPLICIT_BIT_EXT 0x0010 +#define GL_MAP_UNSYNCHRONIZED_BIT_EXT 0x0020 + +typedef void (GLAPIENTRY * PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length); +typedef void * (GLAPIENTRY * PFNGLMAPBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); + +#define glFlushMappedBufferRangeEXT GLEW_GET_FUN(__glewFlushMappedBufferRangeEXT) +#define glMapBufferRangeEXT GLEW_GET_FUN(__glewMapBufferRangeEXT) + +#define GLEW_EXT_map_buffer_range GLEW_GET_VAR(__GLEW_EXT_map_buffer_range) + +#endif /* GL_EXT_map_buffer_range */ + +/* -------------------------- GL_EXT_memory_object ------------------------- */ + +#ifndef GL_EXT_memory_object +#define GL_EXT_memory_object 1 + +#define GL_UUID_SIZE_EXT 16 +#define GL_TEXTURE_TILING_EXT 0x9580 +#define GL_DEDICATED_MEMORY_OBJECT_EXT 0x9581 +#define GL_NUM_TILING_TYPES_EXT 0x9582 +#define GL_TILING_TYPES_EXT 0x9583 +#define GL_OPTIMAL_TILING_EXT 0x9584 +#define GL_LINEAR_TILING_EXT 0x9585 +#define GL_LAYOUT_GENERAL_EXT 0x958D +#define GL_LAYOUT_COLOR_ATTACHMENT_EXT 0x958E +#define GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT 0x958F +#define GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT 0x9590 +#define GL_LAYOUT_SHADER_READ_ONLY_EXT 0x9591 +#define GL_LAYOUT_TRANSFER_SRC_EXT 0x9592 +#define GL_LAYOUT_TRANSFER_DST_EXT 0x9593 +#define GL_NUM_DEVICE_UUIDS_EXT 0x9596 +#define GL_DEVICE_UUID_EXT 0x9597 +#define GL_DRIVER_UUID_EXT 0x9598 +#define GL_PROTECTED_MEMORY_OBJECT_EXT 0x959B + +typedef void (GLAPIENTRY * PFNGLBUFFERSTORAGEMEMEXTPROC) (GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset); +typedef void (GLAPIENTRY * PFNGLCREATEMEMORYOBJECTSEXTPROC) (GLsizei n, GLuint* memoryObjects); +typedef void (GLAPIENTRY * PFNGLDELETEMEMORYOBJECTSEXTPROC) (GLsizei n, const GLuint* memoryObjects); +typedef void (GLAPIENTRY * PFNGLGETMEMORYOBJECTPARAMETERIVEXTPROC) (GLuint memoryObject, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETUNSIGNEDBYTEI_VEXTPROC) (GLenum target, GLuint index, GLubyte* data); +typedef void (GLAPIENTRY * PFNGLGETUNSIGNEDBYTEVEXTPROC) (GLenum pname, GLubyte* data); +typedef GLboolean (GLAPIENTRY * PFNGLISMEMORYOBJECTEXTPROC) (GLuint memoryObject); +typedef void (GLAPIENTRY * PFNGLMEMORYOBJECTPARAMETERIVEXTPROC) (GLuint memoryObject, GLenum pname, const GLint* params); +typedef void (GLAPIENTRY * PFNGLNAMEDBUFFERSTORAGEMEMEXTPROC) (GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset); +typedef void (GLAPIENTRY * PFNGLTEXSTORAGEMEM1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset); +typedef void (GLAPIENTRY * PFNGLTEXSTORAGEMEM2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); +typedef void (GLAPIENTRY * PFNGLTEXSTORAGEMEM2DMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +typedef void (GLAPIENTRY * PFNGLTEXSTORAGEMEM3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); +typedef void (GLAPIENTRY * PFNGLTEXSTORAGEMEM3DMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +typedef void (GLAPIENTRY * PFNGLTEXTURESTORAGEMEM1DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset); +typedef void (GLAPIENTRY * PFNGLTEXTURESTORAGEMEM2DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); +typedef void (GLAPIENTRY * PFNGLTEXTURESTORAGEMEM2DMULTISAMPLEEXTPROC) (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +typedef void (GLAPIENTRY * PFNGLTEXTURESTORAGEMEM3DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); +typedef void (GLAPIENTRY * PFNGLTEXTURESTORAGEMEM3DMULTISAMPLEEXTPROC) (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); + +#define glBufferStorageMemEXT GLEW_GET_FUN(__glewBufferStorageMemEXT) +#define glCreateMemoryObjectsEXT GLEW_GET_FUN(__glewCreateMemoryObjectsEXT) +#define glDeleteMemoryObjectsEXT GLEW_GET_FUN(__glewDeleteMemoryObjectsEXT) +#define glGetMemoryObjectParameterivEXT GLEW_GET_FUN(__glewGetMemoryObjectParameterivEXT) +#define glGetUnsignedBytei_vEXT GLEW_GET_FUN(__glewGetUnsignedBytei_vEXT) +#define glGetUnsignedBytevEXT GLEW_GET_FUN(__glewGetUnsignedBytevEXT) +#define glIsMemoryObjectEXT GLEW_GET_FUN(__glewIsMemoryObjectEXT) +#define glMemoryObjectParameterivEXT GLEW_GET_FUN(__glewMemoryObjectParameterivEXT) +#define glNamedBufferStorageMemEXT GLEW_GET_FUN(__glewNamedBufferStorageMemEXT) +#define glTexStorageMem1DEXT GLEW_GET_FUN(__glewTexStorageMem1DEXT) +#define glTexStorageMem2DEXT GLEW_GET_FUN(__glewTexStorageMem2DEXT) +#define glTexStorageMem2DMultisampleEXT GLEW_GET_FUN(__glewTexStorageMem2DMultisampleEXT) +#define glTexStorageMem3DEXT GLEW_GET_FUN(__glewTexStorageMem3DEXT) +#define glTexStorageMem3DMultisampleEXT GLEW_GET_FUN(__glewTexStorageMem3DMultisampleEXT) +#define glTextureStorageMem1DEXT GLEW_GET_FUN(__glewTextureStorageMem1DEXT) +#define glTextureStorageMem2DEXT GLEW_GET_FUN(__glewTextureStorageMem2DEXT) +#define glTextureStorageMem2DMultisampleEXT GLEW_GET_FUN(__glewTextureStorageMem2DMultisampleEXT) +#define glTextureStorageMem3DEXT GLEW_GET_FUN(__glewTextureStorageMem3DEXT) +#define glTextureStorageMem3DMultisampleEXT GLEW_GET_FUN(__glewTextureStorageMem3DMultisampleEXT) + +#define GLEW_EXT_memory_object GLEW_GET_VAR(__GLEW_EXT_memory_object) + +#endif /* GL_EXT_memory_object */ + +/* ------------------------ GL_EXT_memory_object_fd ------------------------ */ + +#ifndef GL_EXT_memory_object_fd +#define GL_EXT_memory_object_fd 1 + +#define GL_HANDLE_TYPE_OPAQUE_FD_EXT 0x9586 + +typedef void (GLAPIENTRY * PFNGLIMPORTMEMORYFDEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, GLint fd); + +#define glImportMemoryFdEXT GLEW_GET_FUN(__glewImportMemoryFdEXT) + +#define GLEW_EXT_memory_object_fd GLEW_GET_VAR(__GLEW_EXT_memory_object_fd) + +#endif /* GL_EXT_memory_object_fd */ + +/* ----------------------- GL_EXT_memory_object_win32 ---------------------- */ + +#ifndef GL_EXT_memory_object_win32 +#define GL_EXT_memory_object_win32 1 + +#define GL_LUID_SIZE_EXT 8 +#define GL_HANDLE_TYPE_OPAQUE_WIN32_EXT 0x9587 +#define GL_HANDLE_TYPE_OPAQUE_WIN32_KMT_EXT 0x9588 +#define GL_HANDLE_TYPE_D3D12_TILEPOOL_EXT 0x9589 +#define GL_HANDLE_TYPE_D3D12_RESOURCE_EXT 0x958A +#define GL_HANDLE_TYPE_D3D11_IMAGE_EXT 0x958B +#define GL_HANDLE_TYPE_D3D11_IMAGE_KMT_EXT 0x958C +#define GL_HANDLE_TYPE_D3D12_FENCE_EXT 0x9594 +#define GL_D3D12_FENCE_VALUE_EXT 0x9595 +#define GL_DEVICE_LUID_EXT 0x9599 +#define GL_DEVICE_NODE_MASK_EXT 0x959A + +typedef void (GLAPIENTRY * PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, void *handle); +typedef void (GLAPIENTRY * PFNGLIMPORTMEMORYWIN32NAMEEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, const void *name); + +#define glImportMemoryWin32HandleEXT GLEW_GET_FUN(__glewImportMemoryWin32HandleEXT) +#define glImportMemoryWin32NameEXT GLEW_GET_FUN(__glewImportMemoryWin32NameEXT) + +#define GLEW_EXT_memory_object_win32 GLEW_GET_VAR(__GLEW_EXT_memory_object_win32) + +#endif /* GL_EXT_memory_object_win32 */ + /* ------------------------- GL_EXT_misc_attribute ------------------------- */ #ifndef GL_EXT_misc_attribute @@ -10110,6 +11080,30 @@ typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, GLsizei* #endif /* GL_EXT_multi_draw_arrays */ +/* ----------------------- GL_EXT_multi_draw_indirect ---------------------- */ + +#ifndef GL_EXT_multi_draw_indirect +#define GL_EXT_multi_draw_indirect 1 + +typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSINDIRECTEXTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); +typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSINDIRECTEXTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); + +#define glMultiDrawArraysIndirectEXT GLEW_GET_FUN(__glewMultiDrawArraysIndirectEXT) +#define glMultiDrawElementsIndirectEXT GLEW_GET_FUN(__glewMultiDrawElementsIndirectEXT) + +#define GLEW_EXT_multi_draw_indirect GLEW_GET_VAR(__GLEW_EXT_multi_draw_indirect) + +#endif /* GL_EXT_multi_draw_indirect */ + +/* ------------------------ GL_EXT_multiple_textures ----------------------- */ + +#ifndef GL_EXT_multiple_textures +#define GL_EXT_multiple_textures 1 + +#define GLEW_EXT_multiple_textures GLEW_GET_VAR(__GLEW_EXT_multiple_textures) + +#endif /* GL_EXT_multiple_textures */ + /* --------------------------- GL_EXT_multisample -------------------------- */ #ifndef GL_EXT_multisample @@ -10143,6 +11137,68 @@ typedef void (GLAPIENTRY * PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); #endif /* GL_EXT_multisample */ +/* -------------------- GL_EXT_multisample_compatibility ------------------- */ + +#ifndef GL_EXT_multisample_compatibility +#define GL_EXT_multisample_compatibility 1 + +#define GL_MULTISAMPLE_EXT 0x809D +#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F + +#define GLEW_EXT_multisample_compatibility GLEW_GET_VAR(__GLEW_EXT_multisample_compatibility) + +#endif /* GL_EXT_multisample_compatibility */ + +/* ----------------- GL_EXT_multisampled_render_to_texture ----------------- */ + +#ifndef GL_EXT_multisampled_render_to_texture +#define GL_EXT_multisampled_render_to_texture 1 + +#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 +#define GL_MAX_SAMPLES_EXT 0x8D57 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT 0x8D6C + +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); + +#define glFramebufferTexture2DMultisampleEXT GLEW_GET_FUN(__glewFramebufferTexture2DMultisampleEXT) + +#define GLEW_EXT_multisampled_render_to_texture GLEW_GET_VAR(__GLEW_EXT_multisampled_render_to_texture) + +#endif /* GL_EXT_multisampled_render_to_texture */ + +/* ----------------- GL_EXT_multisampled_render_to_texture2 ---------------- */ + +#ifndef GL_EXT_multisampled_render_to_texture2 +#define GL_EXT_multisampled_render_to_texture2 1 + +#define GLEW_EXT_multisampled_render_to_texture2 GLEW_GET_VAR(__GLEW_EXT_multisampled_render_to_texture2) + +#endif /* GL_EXT_multisampled_render_to_texture2 */ + +/* --------------------- GL_EXT_multiview_draw_buffers --------------------- */ + +#ifndef GL_EXT_multiview_draw_buffers +#define GL_EXT_multiview_draw_buffers 1 + +#define GL_DRAW_BUFFER_EXT 0x0C01 +#define GL_READ_BUFFER_EXT 0x0C02 +#define GL_COLOR_ATTACHMENT_EXT 0x90F0 +#define GL_MULTIVIEW_EXT 0x90F1 +#define GL_MAX_MULTIVIEW_BUFFERS_EXT 0x90F2 + +typedef void (GLAPIENTRY * PFNGLDRAWBUFFERSINDEXEDEXTPROC) (GLint n, const GLenum* location, const GLint *indices); +typedef void (GLAPIENTRY * PFNGLGETINTEGERI_VEXTPROC) (GLenum target, GLuint index, GLint* data); +typedef void (GLAPIENTRY * PFNGLREADBUFFERINDEXEDEXTPROC) (GLenum src, GLint index); + +#define glDrawBuffersIndexedEXT GLEW_GET_FUN(__glewDrawBuffersIndexedEXT) +#define glGetIntegeri_vEXT GLEW_GET_FUN(__glewGetIntegeri_vEXT) +#define glReadBufferIndexedEXT GLEW_GET_FUN(__glewReadBufferIndexedEXT) + +#define GLEW_EXT_multiview_draw_buffers GLEW_GET_VAR(__GLEW_EXT_multiview_draw_buffers) + +#endif /* GL_EXT_multiview_draw_buffers */ + /* ---------------------- GL_EXT_packed_depth_stencil ---------------------- */ #ifndef GL_EXT_packed_depth_stencil @@ -10361,6 +11417,20 @@ typedef void (GLAPIENTRY * PFNGLPROVOKINGVERTEXEXTPROC) (GLenum mode); #endif /* GL_EXT_provoking_vertex */ +/* --------------------------- GL_EXT_pvrtc_sRGB --------------------------- */ + +#ifndef GL_EXT_pvrtc_sRGB +#define GL_EXT_pvrtc_sRGB 1 + +#define GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT 0x8A54 +#define GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT 0x8A55 +#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT 0x8A56 +#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT 0x8A57 + +#define GLEW_EXT_pvrtc_sRGB GLEW_GET_VAR(__GLEW_EXT_pvrtc_sRGB) + +#endif /* GL_EXT_pvrtc_sRGB */ + /* ----------------------- GL_EXT_raster_multisample ----------------------- */ #ifndef GL_EXT_raster_multisample @@ -10395,6 +11465,37 @@ typedef void (GLAPIENTRY * PFNGLRASTERSAMPLESEXTPROC) (GLuint samples, GLboolean #endif /* GL_EXT_raster_multisample */ +/* ------------------------ GL_EXT_read_format_bgra ------------------------ */ + +#ifndef GL_EXT_read_format_bgra +#define GL_EXT_read_format_bgra 1 + +#define GL_BGRA_EXT 0x80E1 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT 0x8365 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT 0x8366 + +#define GLEW_EXT_read_format_bgra GLEW_GET_VAR(__GLEW_EXT_read_format_bgra) + +#endif /* GL_EXT_read_format_bgra */ + +/* -------------------------- GL_EXT_render_snorm -------------------------- */ + +#ifndef GL_EXT_render_snorm +#define GL_EXT_render_snorm 1 + +#define GL_BYTE 0x1400 +#define GL_SHORT 0x1402 +#define GL_R8_SNORM 0x8F94 +#define GL_RG8_SNORM 0x8F95 +#define GL_RGBA8_SNORM 0x8F97 +#define GL_R16_SNORM_EXT 0x8F98 +#define GL_RG16_SNORM_EXT 0x8F99 +#define GL_RGBA16_SNORM_EXT 0x8F9B + +#define GLEW_EXT_render_snorm GLEW_GET_VAR(__GLEW_EXT_render_snorm) + +#endif /* GL_EXT_render_snorm */ + /* ------------------------- GL_EXT_rescale_normal ------------------------- */ #ifndef GL_EXT_rescale_normal @@ -10406,6 +11507,31 @@ typedef void (GLAPIENTRY * PFNGLRASTERSAMPLESEXTPROC) (GLuint samples, GLboolean #endif /* GL_EXT_rescale_normal */ +/* ------------------------------ GL_EXT_sRGB ------------------------------ */ + +#ifndef GL_EXT_sRGB +#define GL_EXT_sRGB 1 + +#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT 0x8210 +#define GL_SRGB_EXT 0x8C40 +#define GL_SRGB_ALPHA_EXT 0x8C42 +#define GL_SRGB8_ALPHA8_EXT 0x8C43 + +#define GLEW_EXT_sRGB GLEW_GET_VAR(__GLEW_EXT_sRGB) + +#endif /* GL_EXT_sRGB */ + +/* ----------------------- GL_EXT_sRGB_write_control ----------------------- */ + +#ifndef GL_EXT_sRGB_write_control +#define GL_EXT_sRGB_write_control 1 + +#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 + +#define GLEW_EXT_sRGB_write_control GLEW_GET_VAR(__GLEW_EXT_sRGB_write_control) + +#endif /* GL_EXT_sRGB_write_control */ + /* -------------------------- GL_EXT_scene_marker -------------------------- */ #ifndef GL_EXT_scene_marker @@ -10474,6 +11600,59 @@ typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenu #endif /* GL_EXT_secondary_color */ +/* ---------------------------- GL_EXT_semaphore --------------------------- */ + +#ifndef GL_EXT_semaphore +#define GL_EXT_semaphore 1 + +typedef void (GLAPIENTRY * PFNGLDELETESEMAPHORESEXTPROC) (GLsizei n, const GLuint* semaphores); +typedef void (GLAPIENTRY * PFNGLGENSEMAPHORESEXTPROC) (GLsizei n, GLuint* semaphores); +typedef void (GLAPIENTRY * PFNGLGETSEMAPHOREPARAMETERUI64VEXTPROC) (GLuint semaphore, GLenum pname, GLuint64* params); +typedef GLboolean (GLAPIENTRY * PFNGLISSEMAPHOREEXTPROC) (GLuint semaphore); +typedef void (GLAPIENTRY * PFNGLSEMAPHOREPARAMETERUI64VEXTPROC) (GLuint semaphore, GLenum pname, const GLuint64* params); +typedef void (GLAPIENTRY * PFNGLSIGNALSEMAPHOREEXTPROC) (GLuint semaphore, GLuint numBufferBarriers, const GLuint* buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts); +typedef void (GLAPIENTRY * PFNGLWAITSEMAPHOREEXTPROC) (GLuint semaphore, GLuint numBufferBarriers, const GLuint* buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts); + +#define glDeleteSemaphoresEXT GLEW_GET_FUN(__glewDeleteSemaphoresEXT) +#define glGenSemaphoresEXT GLEW_GET_FUN(__glewGenSemaphoresEXT) +#define glGetSemaphoreParameterui64vEXT GLEW_GET_FUN(__glewGetSemaphoreParameterui64vEXT) +#define glIsSemaphoreEXT GLEW_GET_FUN(__glewIsSemaphoreEXT) +#define glSemaphoreParameterui64vEXT GLEW_GET_FUN(__glewSemaphoreParameterui64vEXT) +#define glSignalSemaphoreEXT GLEW_GET_FUN(__glewSignalSemaphoreEXT) +#define glWaitSemaphoreEXT GLEW_GET_FUN(__glewWaitSemaphoreEXT) + +#define GLEW_EXT_semaphore GLEW_GET_VAR(__GLEW_EXT_semaphore) + +#endif /* GL_EXT_semaphore */ + +/* -------------------------- GL_EXT_semaphore_fd -------------------------- */ + +#ifndef GL_EXT_semaphore_fd +#define GL_EXT_semaphore_fd 1 + +typedef void (GLAPIENTRY * PFNGLIMPORTSEMAPHOREFDEXTPROC) (GLuint semaphore, GLenum handleType, GLint fd); + +#define glImportSemaphoreFdEXT GLEW_GET_FUN(__glewImportSemaphoreFdEXT) + +#define GLEW_EXT_semaphore_fd GLEW_GET_VAR(__GLEW_EXT_semaphore_fd) + +#endif /* GL_EXT_semaphore_fd */ + +/* ------------------------- GL_EXT_semaphore_win32 ------------------------ */ + +#ifndef GL_EXT_semaphore_win32 +#define GL_EXT_semaphore_win32 1 + +typedef void (GLAPIENTRY * PFNGLIMPORTSEMAPHOREWIN32HANDLEEXTPROC) (GLuint semaphore, GLenum handleType, void *handle); +typedef void (GLAPIENTRY * PFNGLIMPORTSEMAPHOREWIN32NAMEEXTPROC) (GLuint semaphore, GLenum handleType, const void *name); + +#define glImportSemaphoreWin32HandleEXT GLEW_GET_FUN(__glewImportSemaphoreWin32HandleEXT) +#define glImportSemaphoreWin32NameEXT GLEW_GET_FUN(__glewImportSemaphoreWin32NameEXT) + +#define GLEW_EXT_semaphore_win32 GLEW_GET_VAR(__GLEW_EXT_semaphore_win32) + +#endif /* GL_EXT_semaphore_win32 */ + /* --------------------- GL_EXT_separate_shader_objects -------------------- */ #ifndef GL_EXT_separate_shader_objects @@ -10506,6 +11685,26 @@ typedef void (GLAPIENTRY * PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint pr #endif /* GL_EXT_separate_specular_color */ +/* -------------------- GL_EXT_shader_framebuffer_fetch -------------------- */ + +#ifndef GL_EXT_shader_framebuffer_fetch +#define GL_EXT_shader_framebuffer_fetch 1 + +#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 + +#define GLEW_EXT_shader_framebuffer_fetch GLEW_GET_VAR(__GLEW_EXT_shader_framebuffer_fetch) + +#endif /* GL_EXT_shader_framebuffer_fetch */ + +/* ------------------------ GL_EXT_shader_group_vote ----------------------- */ + +#ifndef GL_EXT_shader_group_vote +#define GL_EXT_shader_group_vote 1 + +#define GLEW_EXT_shader_group_vote GLEW_GET_VAR(__GLEW_EXT_shader_group_vote) + +#endif /* GL_EXT_shader_group_vote */ + /* ------------------- GL_EXT_shader_image_load_formatted ------------------ */ #ifndef GL_EXT_shader_image_load_formatted @@ -10586,6 +11785,15 @@ typedef void (GLAPIENTRY * PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers); #endif /* GL_EXT_shader_image_load_store */ +/* ------------------- GL_EXT_shader_implicit_conversions ------------------ */ + +#ifndef GL_EXT_shader_implicit_conversions +#define GL_EXT_shader_implicit_conversions 1 + +#define GLEW_EXT_shader_implicit_conversions GLEW_GET_VAR(__GLEW_EXT_shader_implicit_conversions) + +#endif /* GL_EXT_shader_implicit_conversions */ + /* ----------------------- GL_EXT_shader_integer_mix ----------------------- */ #ifndef GL_EXT_shader_integer_mix @@ -10595,6 +11803,67 @@ typedef void (GLAPIENTRY * PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers); #endif /* GL_EXT_shader_integer_mix */ +/* ------------------------ GL_EXT_shader_io_blocks ------------------------ */ + +#ifndef GL_EXT_shader_io_blocks +#define GL_EXT_shader_io_blocks 1 + +#define GLEW_EXT_shader_io_blocks GLEW_GET_VAR(__GLEW_EXT_shader_io_blocks) + +#endif /* GL_EXT_shader_io_blocks */ + +/* ------------- GL_EXT_shader_non_constant_global_initializers ------------ */ + +#ifndef GL_EXT_shader_non_constant_global_initializers +#define GL_EXT_shader_non_constant_global_initializers 1 + +#define GLEW_EXT_shader_non_constant_global_initializers GLEW_GET_VAR(__GLEW_EXT_shader_non_constant_global_initializers) + +#endif /* GL_EXT_shader_non_constant_global_initializers */ + +/* ------------------- GL_EXT_shader_pixel_local_storage ------------------- */ + +#ifndef GL_EXT_shader_pixel_local_storage +#define GL_EXT_shader_pixel_local_storage 1 + +#define GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_FAST_SIZE_EXT 0x8F63 +#define GL_SHADER_PIXEL_LOCAL_STORAGE_EXT 0x8F64 +#define GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_SIZE_EXT 0x8F67 + +#define GLEW_EXT_shader_pixel_local_storage GLEW_GET_VAR(__GLEW_EXT_shader_pixel_local_storage) + +#endif /* GL_EXT_shader_pixel_local_storage */ + +/* ------------------- GL_EXT_shader_pixel_local_storage2 ------------------ */ + +#ifndef GL_EXT_shader_pixel_local_storage2 +#define GL_EXT_shader_pixel_local_storage2 1 + +#define GL_MAX_SHADER_COMBINED_LOCAL_STORAGE_FAST_SIZE_EXT 0x9650 +#define GL_MAX_SHADER_COMBINED_LOCAL_STORAGE_SIZE_EXT 0x9651 +#define GL_FRAMEBUFFER_INCOMPLETE_INSUFFICIENT_SHADER_COMBINED_LOCAL_STORAGE_EXT 0x9652 + +typedef void (GLAPIENTRY * PFNGLCLEARPIXELLOCALSTORAGEUIEXTPROC) (GLsizei offset, GLsizei n, const GLuint* values); +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERPIXELLOCALSTORAGESIZEEXTPROC) (GLuint target, GLsizei size); +typedef GLsizei (GLAPIENTRY * PFNGLGETFRAMEBUFFERPIXELLOCALSTORAGESIZEEXTPROC) (GLuint target); + +#define glClearPixelLocalStorageuiEXT GLEW_GET_FUN(__glewClearPixelLocalStorageuiEXT) +#define glFramebufferPixelLocalStorageSizeEXT GLEW_GET_FUN(__glewFramebufferPixelLocalStorageSizeEXT) +#define glGetFramebufferPixelLocalStorageSizeEXT GLEW_GET_FUN(__glewGetFramebufferPixelLocalStorageSizeEXT) + +#define GLEW_EXT_shader_pixel_local_storage2 GLEW_GET_VAR(__GLEW_EXT_shader_pixel_local_storage2) + +#endif /* GL_EXT_shader_pixel_local_storage2 */ + +/* ----------------------- GL_EXT_shader_texture_lod ----------------------- */ + +#ifndef GL_EXT_shader_texture_lod +#define GL_EXT_shader_texture_lod 1 + +#define GLEW_EXT_shader_texture_lod GLEW_GET_VAR(__GLEW_EXT_shader_texture_lod) + +#endif /* GL_EXT_shader_texture_lod */ + /* -------------------------- GL_EXT_shadow_funcs -------------------------- */ #ifndef GL_EXT_shadow_funcs @@ -10604,6 +11873,20 @@ typedef void (GLAPIENTRY * PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers); #endif /* GL_EXT_shadow_funcs */ +/* ------------------------- GL_EXT_shadow_samplers ------------------------ */ + +#ifndef GL_EXT_shadow_samplers +#define GL_EXT_shadow_samplers 1 + +#define GL_TEXTURE_COMPARE_MODE_EXT 0x884C +#define GL_TEXTURE_COMPARE_FUNC_EXT 0x884D +#define GL_COMPARE_REF_TO_TEXTURE_EXT 0x884E +#define GL_SAMPLER_2D_SHADOW_EXT 0x8B62 + +#define GLEW_EXT_shadow_samplers GLEW_GET_VAR(__GLEW_EXT_shadow_samplers) + +#endif /* GL_EXT_shadow_samplers */ + /* --------------------- GL_EXT_shared_texture_palette --------------------- */ #ifndef GL_EXT_shared_texture_palette @@ -10615,6 +11898,38 @@ typedef void (GLAPIENTRY * PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers); #endif /* GL_EXT_shared_texture_palette */ +/* ------------------------- GL_EXT_sparse_texture ------------------------- */ + +#ifndef GL_EXT_sparse_texture +#define GL_EXT_sparse_texture 1 + +#define GL_TEXTURE_2D 0x0DE1 +#define GL_TEXTURE_3D 0x806F +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_2D_ARRAY 0x8C1A +#define GL_TEXTURE_CUBE_MAP_ARRAY_OES 0x9009 +#define GL_VIRTUAL_PAGE_SIZE_X_EXT 0x9195 +#define GL_VIRTUAL_PAGE_SIZE_Y_EXT 0x9196 +#define GL_VIRTUAL_PAGE_SIZE_Z_EXT 0x9197 +#define GL_MAX_SPARSE_TEXTURE_SIZE_EXT 0x9198 +#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_EXT 0x9199 +#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_EXT 0x919A +#define GL_TEXTURE_SPARSE_EXT 0x91A6 +#define GL_VIRTUAL_PAGE_SIZE_INDEX_EXT 0x91A7 +#define GL_NUM_VIRTUAL_PAGE_SIZES_EXT 0x91A8 +#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_EXT 0x91A9 +#define GL_NUM_SPARSE_LEVELS_EXT 0x91AA + +typedef void (GLAPIENTRY * PFNGLTEXPAGECOMMITMENTEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); +typedef void (GLAPIENTRY * PFNGLTEXTUREPAGECOMMITMENTEXTPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); + +#define glTexPageCommitmentEXT GLEW_GET_FUN(__glewTexPageCommitmentEXT) +#define glTexturePageCommitmentEXT GLEW_GET_FUN(__glewTexturePageCommitmentEXT) + +#define GLEW_EXT_sparse_texture GLEW_GET_VAR(__GLEW_EXT_sparse_texture) + +#endif /* GL_EXT_sparse_texture */ + /* ------------------------- GL_EXT_sparse_texture2 ------------------------ */ #ifndef GL_EXT_sparse_texture2 @@ -10797,6 +12112,42 @@ typedef void (GLAPIENTRY * PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum interna #endif /* GL_EXT_texture_buffer_object */ +/* -------------- GL_EXT_texture_compression_astc_decode_mode -------------- */ + +#ifndef GL_EXT_texture_compression_astc_decode_mode +#define GL_EXT_texture_compression_astc_decode_mode 1 + +#define GL_TEXTURE_ASTC_DECODE_PRECISION_EXT 0x8F69 + +#define GLEW_EXT_texture_compression_astc_decode_mode GLEW_GET_VAR(__GLEW_EXT_texture_compression_astc_decode_mode) + +#endif /* GL_EXT_texture_compression_astc_decode_mode */ + +/* ----------- GL_EXT_texture_compression_astc_decode_mode_rgb9e5 ---------- */ + +#ifndef GL_EXT_texture_compression_astc_decode_mode_rgb9e5 +#define GL_EXT_texture_compression_astc_decode_mode_rgb9e5 1 + +#define GL_TEXTURE_ASTC_DECODE_PRECISION_EXT 0x8F69 + +#define GLEW_EXT_texture_compression_astc_decode_mode_rgb9e5 GLEW_GET_VAR(__GLEW_EXT_texture_compression_astc_decode_mode_rgb9e5) + +#endif /* GL_EXT_texture_compression_astc_decode_mode_rgb9e5 */ + +/* -------------------- GL_EXT_texture_compression_bptc -------------------- */ + +#ifndef GL_EXT_texture_compression_bptc +#define GL_EXT_texture_compression_bptc 1 + +#define GL_COMPRESSED_RGBA_BPTC_UNORM_EXT 0x8E8C +#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT 0x8E8D +#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT 0x8E8E +#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT 0x8E8F + +#define GLEW_EXT_texture_compression_bptc GLEW_GET_VAR(__GLEW_EXT_texture_compression_bptc) + +#endif /* GL_EXT_texture_compression_bptc */ + /* -------------------- GL_EXT_texture_compression_dxt1 -------------------- */ #ifndef GL_EXT_texture_compression_dxt1 @@ -10870,6 +12221,25 @@ typedef void (GLAPIENTRY * PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum interna #endif /* GL_EXT_texture_cube_map */ +/* --------------------- GL_EXT_texture_cube_map_array --------------------- */ + +#ifndef GL_EXT_texture_cube_map_array +#define GL_EXT_texture_cube_map_array 1 + +#define GL_TEXTURE_CUBE_MAP_ARRAY_EXT 0x9009 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_EXT 0x900A +#define GL_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_EXT 0x900D +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900E +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900F +#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 +#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A + +#define GLEW_EXT_texture_cube_map_array GLEW_GET_VAR(__GLEW_EXT_texture_cube_map_array) + +#endif /* GL_EXT_texture_cube_map_array */ + /* ----------------------- GL_EXT_texture_edge_clamp ----------------------- */ #ifndef GL_EXT_texture_edge_clamp @@ -10966,6 +12336,17 @@ typedef void (GLAPIENTRY * PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum interna #endif /* GL_EXT_texture_filter_minmax */ +/* --------------------- GL_EXT_texture_format_BGRA8888 -------------------- */ + +#ifndef GL_EXT_texture_format_BGRA8888 +#define GL_EXT_texture_format_BGRA8888 1 + +#define GL_BGRA_EXT 0x80E1 + +#define GLEW_EXT_texture_format_BGRA8888 GLEW_GET_VAR(__GLEW_EXT_texture_format_BGRA8888) + +#endif /* GL_EXT_texture_format_BGRA8888 */ + /* ------------------------- GL_EXT_texture_integer ------------------------ */ #ifndef GL_EXT_texture_integer @@ -11063,6 +12444,24 @@ typedef void (GLAPIENTRY * PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum #endif /* GL_EXT_texture_mirror_clamp */ +/* ------------------------- GL_EXT_texture_norm16 ------------------------- */ + +#ifndef GL_EXT_texture_norm16 +#define GL_EXT_texture_norm16 1 + +#define GL_RGB16_EXT 0x8054 +#define GL_RGBA16_EXT 0x805B +#define GL_R16_EXT 0x822A +#define GL_RG16_EXT 0x822C +#define GL_R16_SNORM_EXT 0x8F98 +#define GL_RG16_SNORM_EXT 0x8F99 +#define GL_RGB16_SNORM_EXT 0x8F9A +#define GL_RGBA16_SNORM_EXT 0x8F9B + +#define GLEW_EXT_texture_norm16 GLEW_GET_VAR(__GLEW_EXT_texture_norm16) + +#endif /* GL_EXT_texture_norm16 */ + /* ------------------------- GL_EXT_texture_object ------------------------- */ #ifndef GL_EXT_texture_object @@ -11122,6 +12521,20 @@ typedef void (GLAPIENTRY * PFNGLTEXTURENORMALEXTPROC) (GLenum mode); #endif /* GL_EXT_texture_rectangle */ +/* --------------------------- GL_EXT_texture_rg --------------------------- */ + +#ifndef GL_EXT_texture_rg +#define GL_EXT_texture_rg 1 + +#define GL_RED_EXT 0x1903 +#define GL_RG_EXT 0x8227 +#define GL_R8_EXT 0x8229 +#define GL_RG8_EXT 0x822B + +#define GLEW_EXT_texture_rg GLEW_GET_VAR(__GLEW_EXT_texture_rg) + +#endif /* GL_EXT_texture_rg */ + /* -------------------------- GL_EXT_texture_sRGB -------------------------- */ #ifndef GL_EXT_texture_sRGB @@ -11148,6 +12561,28 @@ typedef void (GLAPIENTRY * PFNGLTEXTURENORMALEXTPROC) (GLenum mode); #endif /* GL_EXT_texture_sRGB */ +/* ------------------------- GL_EXT_texture_sRGB_R8 ------------------------ */ + +#ifndef GL_EXT_texture_sRGB_R8 +#define GL_EXT_texture_sRGB_R8 1 + +#define GL_SR8_EXT 0x8FBD + +#define GLEW_EXT_texture_sRGB_R8 GLEW_GET_VAR(__GLEW_EXT_texture_sRGB_R8) + +#endif /* GL_EXT_texture_sRGB_R8 */ + +/* ------------------------ GL_EXT_texture_sRGB_RG8 ------------------------ */ + +#ifndef GL_EXT_texture_sRGB_RG8 +#define GL_EXT_texture_sRGB_RG8 1 + +#define GL_SRG8_EXT 0x8FBE + +#define GLEW_EXT_texture_sRGB_RG8 GLEW_GET_VAR(__GLEW_EXT_texture_sRGB_RG8) + +#endif /* GL_EXT_texture_sRGB_RG8 */ + /* ----------------------- GL_EXT_texture_sRGB_decode ---------------------- */ #ifndef GL_EXT_texture_sRGB_decode @@ -11209,6 +12644,54 @@ typedef void (GLAPIENTRY * PFNGLTEXTURENORMALEXTPROC) (GLenum mode); #endif /* GL_EXT_texture_snorm */ +/* ------------------------- GL_EXT_texture_storage ------------------------ */ + +#ifndef GL_EXT_texture_storage +#define GL_EXT_texture_storage 1 + +#define GL_ALPHA8_EXT 0x803C +#define GL_LUMINANCE8_EXT 0x8040 +#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 +#define GL_RGB10_EXT 0x8052 +#define GL_RGB10_A2_EXT 0x8059 +#define GL_R8_EXT 0x8229 +#define GL_RG8_EXT 0x822B +#define GL_R16F_EXT 0x822D +#define GL_R32F_EXT 0x822E +#define GL_RG16F_EXT 0x822F +#define GL_RG32F_EXT 0x8230 +#define GL_RGBA32F_EXT 0x8814 +#define GL_RGB32F_EXT 0x8815 +#define GL_ALPHA32F_EXT 0x8816 +#define GL_LUMINANCE32F_EXT 0x8818 +#define GL_LUMINANCE_ALPHA32F_EXT 0x8819 +#define GL_RGBA16F_EXT 0x881A +#define GL_RGB16F_EXT 0x881B +#define GL_ALPHA16F_EXT 0x881C +#define GL_LUMINANCE16F_EXT 0x881E +#define GL_LUMINANCE_ALPHA16F_EXT 0x881F +#define GL_RGB_RAW_422_APPLE 0x8A51 +#define GL_TEXTURE_IMMUTABLE_FORMAT_EXT 0x912F +#define GL_BGRA8_EXT 0x93A1 + +typedef void (GLAPIENTRY * PFNGLTEXSTORAGE1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (GLAPIENTRY * PFNGLTEXSTORAGE2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY * PFNGLTEXSTORAGE3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (GLAPIENTRY * PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (GLAPIENTRY * PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY * PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); + +#define glTexStorage1DEXT GLEW_GET_FUN(__glewTexStorage1DEXT) +#define glTexStorage2DEXT GLEW_GET_FUN(__glewTexStorage2DEXT) +#define glTexStorage3DEXT GLEW_GET_FUN(__glewTexStorage3DEXT) +#define glTextureStorage1DEXT GLEW_GET_FUN(__glewTextureStorage1DEXT) +#define glTextureStorage2DEXT GLEW_GET_FUN(__glewTextureStorage2DEXT) +#define glTextureStorage3DEXT GLEW_GET_FUN(__glewTextureStorage3DEXT) + +#define GLEW_EXT_texture_storage GLEW_GET_VAR(__GLEW_EXT_texture_storage) + +#endif /* GL_EXT_texture_storage */ + /* ------------------------- GL_EXT_texture_swizzle ------------------------ */ #ifndef GL_EXT_texture_swizzle @@ -11224,6 +12707,36 @@ typedef void (GLAPIENTRY * PFNGLTEXTURENORMALEXTPROC) (GLenum mode); #endif /* GL_EXT_texture_swizzle */ +/* ------------------- GL_EXT_texture_type_2_10_10_10_REV ------------------ */ + +#ifndef GL_EXT_texture_type_2_10_10_10_REV +#define GL_EXT_texture_type_2_10_10_10_REV 1 + +#define GL_UNSIGNED_INT_2_10_10_10_REV_EXT 0x8368 + +#define GLEW_EXT_texture_type_2_10_10_10_REV GLEW_GET_VAR(__GLEW_EXT_texture_type_2_10_10_10_REV) + +#endif /* GL_EXT_texture_type_2_10_10_10_REV */ + +/* -------------------------- GL_EXT_texture_view -------------------------- */ + +#ifndef GL_EXT_texture_view +#define GL_EXT_texture_view 1 + +#define GL_TEXTURE_VIEW_MIN_LEVEL_EXT 0x82DB +#define GL_TEXTURE_VIEW_NUM_LEVELS_EXT 0x82DC +#define GL_TEXTURE_VIEW_MIN_LAYER_EXT 0x82DD +#define GL_TEXTURE_VIEW_NUM_LAYERS_EXT 0x82DE +#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF + +typedef void (GLAPIENTRY * PFNGLTEXTUREVIEWEXTPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); + +#define glTextureViewEXT GLEW_GET_FUN(__glewTextureViewEXT) + +#define GLEW_EXT_texture_view GLEW_GET_VAR(__GLEW_EXT_texture_view) + +#endif /* GL_EXT_texture_view */ + /* --------------------------- GL_EXT_timer_query -------------------------- */ #ifndef GL_EXT_timer_query @@ -11282,6 +12795,19 @@ typedef void (GLAPIENTRY * PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint progra #endif /* GL_EXT_transform_feedback */ +/* ------------------------- GL_EXT_unpack_subimage ------------------------ */ + +#ifndef GL_EXT_unpack_subimage +#define GL_EXT_unpack_subimage 1 + +#define GL_UNPACK_ROW_LENGTH_EXT 0x0CF2 +#define GL_UNPACK_SKIP_ROWS_EXT 0x0CF3 +#define GL_UNPACK_SKIP_PIXELS_EXT 0x0CF4 + +#define GLEW_EXT_unpack_subimage GLEW_GET_VAR(__GLEW_EXT_unpack_subimage) + +#endif /* GL_EXT_unpack_subimage */ + /* -------------------------- GL_EXT_vertex_array -------------------------- */ #ifndef GL_EXT_vertex_array @@ -11354,6 +12880,23 @@ typedef void (GLAPIENTRY * PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, #endif /* GL_EXT_vertex_array_bgra */ +/* ----------------------- GL_EXT_vertex_array_setXXX ---------------------- */ + +#ifndef GL_EXT_vertex_array_setXXX +#define GL_EXT_vertex_array_setXXX 1 + +typedef void (GLAPIENTRY * PFNGLBINDARRAYSETEXTPROC) (const void *arrayset); +typedef const void * (GLAPIENTRY * PFNGLCREATEARRAYSETEXTPROC) (void); +typedef void (GLAPIENTRY * PFNGLDELETEARRAYSETSEXTPROC) (GLsizei n, const void *arrayset[]); + +#define glBindArraySetEXT GLEW_GET_FUN(__glewBindArraySetEXT) +#define glCreateArraySetExt GLEW_GET_FUN(__glewCreateArraySetExt) +#define glDeleteArraySetsEXT GLEW_GET_FUN(__glewDeleteArraySetsEXT) + +#define GLEW_EXT_vertex_array_setXXX GLEW_GET_VAR(__GLEW_EXT_vertex_array_setXXX) + +#endif /* GL_EXT_vertex_array_setXXX */ + /* ----------------------- GL_EXT_vertex_attrib_64bit ---------------------- */ #ifndef GL_EXT_vertex_attrib_64bit @@ -11637,6 +13180,21 @@ typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTFVEXTPROC) (GLfloat* weight); #endif /* GL_EXT_vertex_weighting */ +/* ------------------------ GL_EXT_win32_keyed_mutex ----------------------- */ + +#ifndef GL_EXT_win32_keyed_mutex +#define GL_EXT_win32_keyed_mutex 1 + +typedef GLboolean (GLAPIENTRY * PFNGLACQUIREKEYEDMUTEXWIN32EXTPROC) (GLuint memory, GLuint64 key, GLuint timeout); +typedef GLboolean (GLAPIENTRY * PFNGLRELEASEKEYEDMUTEXWIN32EXTPROC) (GLuint memory, GLuint64 key); + +#define glAcquireKeyedMutexWin32EXT GLEW_GET_FUN(__glewAcquireKeyedMutexWin32EXT) +#define glReleaseKeyedMutexWin32EXT GLEW_GET_FUN(__glewReleaseKeyedMutexWin32EXT) + +#define GLEW_EXT_win32_keyed_mutex GLEW_GET_VAR(__GLEW_EXT_win32_keyed_mutex) + +#endif /* GL_EXT_win32_keyed_mutex */ + /* ------------------------ GL_EXT_window_rectangles ----------------------- */ #ifndef GL_EXT_window_rectangles @@ -12068,9 +13626,6 @@ typedef void (GLAPIENTRY * PFNGLBLENDBARRIERKHRPROC) (void); #ifndef GL_KHR_context_flush_control #define GL_KHR_context_flush_control 1 -#define GL_CONTEXT_RELEASE_BEHAVIOR 0x82FB -#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82FC - #define GLEW_KHR_context_flush_control GLEW_GET_VAR(__GLEW_KHR_context_flush_control) #endif /* GL_KHR_context_flush_control */ @@ -12128,9 +13683,9 @@ typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* buf); typedef GLuint (GLAPIENTRY * PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufSize, GLenum* sources, GLenum* types, GLuint* ids, GLenum* severities, GLsizei* lengths, GLchar* messageLog); typedef void (GLAPIENTRY * PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei* length, GLchar *label); -typedef void (GLAPIENTRY * PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei* length, GLchar *label); +typedef void (GLAPIENTRY * PFNGLGETOBJECTPTRLABELPROC) (void* ptr, GLsizei bufSize, GLsizei* length, GLchar *label); typedef void (GLAPIENTRY * PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar* label); -typedef void (GLAPIENTRY * PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar* label); +typedef void (GLAPIENTRY * PFNGLOBJECTPTRLABELPROC) (void* ptr, GLsizei length, const GLchar* label); typedef void (GLAPIENTRY * PFNGLPOPDEBUGGROUPPROC) (void); typedef void (GLAPIENTRY * PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar * message); @@ -12160,6 +13715,22 @@ typedef void (GLAPIENTRY * PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, G #endif /* GL_KHR_no_error */ +/* --------------------- GL_KHR_parallel_shader_compile -------------------- */ + +#ifndef GL_KHR_parallel_shader_compile +#define GL_KHR_parallel_shader_compile 1 + +#define GL_MAX_SHADER_COMPILER_THREADS_KHR 0x91B0 +#define GL_COMPLETION_STATUS_KHR 0x91B1 + +typedef void (GLAPIENTRY * PFNGLMAXSHADERCOMPILERTHREADSKHRPROC) (GLuint count); + +#define glMaxShaderCompilerThreadsKHR GLEW_GET_FUN(__glewMaxShaderCompilerThreadsKHR) + +#define GLEW_KHR_parallel_shader_compile GLEW_GET_VAR(__GLEW_KHR_parallel_shader_compile) + +#endif /* GL_KHR_parallel_shader_compile */ + /* ------------------ GL_KHR_robust_buffer_access_behavior ----------------- */ #ifndef GL_KHR_robust_buffer_access_behavior @@ -12488,6 +14059,68 @@ typedef void (GLAPIENTRY * PFNGLLGPUNAMEDBUFFERSUBDATANVXPROC) (GLbitfield gpuMa #endif /* GL_NVX_linked_gpu_multicast */ +/* ------------------------ GL_NV_3dvision_settings ------------------------ */ + +#ifndef GL_NV_3dvision_settings +#define GL_NV_3dvision_settings 1 + +#define GL_3DVISION_STEREO_NV 0x90F4 +#define GL_STEREO_SEPARATION_NV 0x90F5 +#define GL_STEREO_CONVERGENCE_NV 0x90F6 +#define GL_STEREO_CUTOFF_NV 0x90F7 +#define GL_STEREO_PROJECTION_NV 0x90F8 +#define GL_STEREO_PROJECTION_PERSPECTIVE_NV 0x90F9 +#define GL_STEREO_PROJECTION_ORTHO_NV 0x90FA + +typedef void (GLAPIENTRY * PFNGLSTEREOPARAMETERFNVPROC) (GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLSTEREOPARAMETERINVPROC) (GLenum pname, GLint param); + +#define glStereoParameterfNV GLEW_GET_FUN(__glewStereoParameterfNV) +#define glStereoParameteriNV GLEW_GET_FUN(__glewStereoParameteriNV) + +#define GLEW_NV_3dvision_settings GLEW_GET_VAR(__GLEW_NV_3dvision_settings) + +#endif /* GL_NV_3dvision_settings */ + +/* ------------------- GL_NV_EGL_stream_consumer_external ------------------ */ + +#ifndef GL_NV_EGL_stream_consumer_external +#define GL_NV_EGL_stream_consumer_external 1 + +#define GL_TEXTURE_EXTERNAL_OES 0x8D65 +#define GL_SAMPLER_EXTERNAL_OES 0x8D66 +#define GL_TEXTURE_BINDING_EXTERNAL_OES 0x8D67 +#define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES 0x8D68 + +#define GLEW_NV_EGL_stream_consumer_external GLEW_GET_VAR(__GLEW_NV_EGL_stream_consumer_external) + +#endif /* GL_NV_EGL_stream_consumer_external */ + +/* ----------------- GL_NV_alpha_to_coverage_dither_control ---------------- */ + +#ifndef GL_NV_alpha_to_coverage_dither_control +#define GL_NV_alpha_to_coverage_dither_control 1 + +#define GL_ALPHA_TO_COVERAGE_DITHER_MODE_NV 0x92BF +#define GL_ALPHA_TO_COVERAGE_DITHER_DEFAULT_NV 0x934D +#define GL_ALPHA_TO_COVERAGE_DITHER_ENABLE_NV 0x934E +#define GL_ALPHA_TO_COVERAGE_DITHER_DISABLE_NV 0x934F + +#define GLEW_NV_alpha_to_coverage_dither_control GLEW_GET_VAR(__GLEW_NV_alpha_to_coverage_dither_control) + +#endif /* GL_NV_alpha_to_coverage_dither_control */ + +/* ------------------------------- GL_NV_bgr ------------------------------- */ + +#ifndef GL_NV_bgr +#define GL_NV_bgr 1 + +#define GL_BGR_NV 0x80E0 + +#define GLEW_NV_bgr GLEW_GET_VAR(__GLEW_NV_bgr) + +#endif /* GL_NV_bgr */ + /* ------------------- GL_NV_bindless_multi_draw_indirect ------------------ */ #ifndef GL_NV_bindless_multi_draw_indirect @@ -12630,6 +14263,18 @@ typedef void (GLAPIENTRY * PFNGLBLENDPARAMETERINVPROC) (GLenum pname, GLint valu #endif /* GL_NV_blend_equation_advanced_coherent */ +/* ----------------------- GL_NV_blend_minmax_factor ----------------------- */ + +#ifndef GL_NV_blend_minmax_factor +#define GL_NV_blend_minmax_factor 1 + +#define GL_FACTOR_MIN_AMD 0x901C +#define GL_FACTOR_MAX_AMD 0x901D + +#define GLEW_NV_blend_minmax_factor GLEW_GET_VAR(__GLEW_NV_blend_minmax_factor) + +#endif /* GL_NV_blend_minmax_factor */ + /* --------------------------- GL_NV_blend_square -------------------------- */ #ifndef GL_NV_blend_square @@ -12805,6 +14450,22 @@ typedef void (GLAPIENTRY * PFNGLCONSERVATIVERASTERPARAMETERINVPROC) (GLenum pnam #endif /* GL_NV_conservative_raster_pre_snap_triangles */ +/* --------------------------- GL_NV_copy_buffer --------------------------- */ + +#ifndef GL_NV_copy_buffer +#define GL_NV_copy_buffer 1 + +#define GL_COPY_READ_BUFFER_NV 0x8F36 +#define GL_COPY_WRITE_BUFFER_NV 0x8F37 + +typedef void (GLAPIENTRY * PFNGLCOPYBUFFERSUBDATANVPROC) (GLenum readtarget, GLenum writetarget, GLintptr readoffset, GLintptr writeoffset, GLsizeiptr size); + +#define glCopyBufferSubDataNV GLEW_GET_FUN(__glewCopyBufferSubDataNV) + +#define GLEW_NV_copy_buffer GLEW_GET_VAR(__GLEW_NV_copy_buffer) + +#endif /* GL_NV_copy_buffer */ + /* ----------------------- GL_NV_copy_depth_to_color ----------------------- */ #ifndef GL_NV_copy_depth_to_color @@ -12890,6 +14551,68 @@ typedef void (GLAPIENTRY * PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFa #endif /* GL_NV_depth_range_unclamped */ +/* --------------------------- GL_NV_draw_buffers -------------------------- */ + +#ifndef GL_NV_draw_buffers +#define GL_NV_draw_buffers 1 + +#define GL_MAX_DRAW_BUFFERS_NV 0x8824 +#define GL_DRAW_BUFFER0_NV 0x8825 +#define GL_DRAW_BUFFER1_NV 0x8826 +#define GL_DRAW_BUFFER2_NV 0x8827 +#define GL_DRAW_BUFFER3_NV 0x8828 +#define GL_DRAW_BUFFER4_NV 0x8829 +#define GL_DRAW_BUFFER5_NV 0x882A +#define GL_DRAW_BUFFER6_NV 0x882B +#define GL_DRAW_BUFFER7_NV 0x882C +#define GL_DRAW_BUFFER8_NV 0x882D +#define GL_DRAW_BUFFER9_NV 0x882E +#define GL_DRAW_BUFFER10_NV 0x882F +#define GL_DRAW_BUFFER11_NV 0x8830 +#define GL_DRAW_BUFFER12_NV 0x8831 +#define GL_DRAW_BUFFER13_NV 0x8832 +#define GL_DRAW_BUFFER14_NV 0x8833 +#define GL_DRAW_BUFFER15_NV 0x8834 +#define GL_COLOR_ATTACHMENT0_NV 0x8CE0 +#define GL_COLOR_ATTACHMENT1_NV 0x8CE1 +#define GL_COLOR_ATTACHMENT2_NV 0x8CE2 +#define GL_COLOR_ATTACHMENT3_NV 0x8CE3 +#define GL_COLOR_ATTACHMENT4_NV 0x8CE4 +#define GL_COLOR_ATTACHMENT5_NV 0x8CE5 +#define GL_COLOR_ATTACHMENT6_NV 0x8CE6 +#define GL_COLOR_ATTACHMENT7_NV 0x8CE7 +#define GL_COLOR_ATTACHMENT8_NV 0x8CE8 +#define GL_COLOR_ATTACHMENT9_NV 0x8CE9 +#define GL_COLOR_ATTACHMENT10_NV 0x8CEA +#define GL_COLOR_ATTACHMENT11_NV 0x8CEB +#define GL_COLOR_ATTACHMENT12_NV 0x8CEC +#define GL_COLOR_ATTACHMENT13_NV 0x8CED +#define GL_COLOR_ATTACHMENT14_NV 0x8CEE +#define GL_COLOR_ATTACHMENT15_NV 0x8CEF + +typedef void (GLAPIENTRY * PFNGLDRAWBUFFERSNVPROC) (GLsizei n, const GLenum* bufs); + +#define glDrawBuffersNV GLEW_GET_FUN(__glewDrawBuffersNV) + +#define GLEW_NV_draw_buffers GLEW_GET_VAR(__GLEW_NV_draw_buffers) + +#endif /* GL_NV_draw_buffers */ + +/* -------------------------- GL_NV_draw_instanced ------------------------- */ + +#ifndef GL_NV_draw_instanced +#define GL_NV_draw_instanced 1 + +typedef void (GLAPIENTRY * PFNGLDRAWARRAYSINSTANCEDNVPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDNVPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); + +#define glDrawArraysInstancedNV GLEW_GET_FUN(__glewDrawArraysInstancedNV) +#define glDrawElementsInstancedNV GLEW_GET_FUN(__glewDrawElementsInstancedNV) + +#define GLEW_NV_draw_instanced GLEW_GET_VAR(__GLEW_NV_draw_instanced) + +#endif /* GL_NV_draw_instanced */ + /* --------------------------- GL_NV_draw_texture -------------------------- */ #ifndef GL_NV_draw_texture @@ -12980,6 +14703,15 @@ typedef void (GLAPIENTRY * PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pna #endif /* GL_NV_evaluators */ +/* --------------------- GL_NV_explicit_attrib_location -------------------- */ + +#ifndef GL_NV_explicit_attrib_location +#define GL_NV_explicit_attrib_location 1 + +#define GLEW_NV_explicit_attrib_location GLEW_GET_VAR(__GLEW_NV_explicit_attrib_location) + +#endif /* GL_NV_explicit_attrib_location */ + /* ----------------------- GL_NV_explicit_multisample ---------------------- */ #ifndef GL_NV_explicit_multisample @@ -13008,6 +14740,33 @@ typedef void (GLAPIENTRY * PFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint re #endif /* GL_NV_explicit_multisample */ +/* ---------------------- GL_NV_fbo_color_attachments ---------------------- */ + +#ifndef GL_NV_fbo_color_attachments +#define GL_NV_fbo_color_attachments 1 + +#define GL_MAX_COLOR_ATTACHMENTS_NV 0x8CDF +#define GL_COLOR_ATTACHMENT0_NV 0x8CE0 +#define GL_COLOR_ATTACHMENT1_NV 0x8CE1 +#define GL_COLOR_ATTACHMENT2_NV 0x8CE2 +#define GL_COLOR_ATTACHMENT3_NV 0x8CE3 +#define GL_COLOR_ATTACHMENT4_NV 0x8CE4 +#define GL_COLOR_ATTACHMENT5_NV 0x8CE5 +#define GL_COLOR_ATTACHMENT6_NV 0x8CE6 +#define GL_COLOR_ATTACHMENT7_NV 0x8CE7 +#define GL_COLOR_ATTACHMENT8_NV 0x8CE8 +#define GL_COLOR_ATTACHMENT9_NV 0x8CE9 +#define GL_COLOR_ATTACHMENT10_NV 0x8CEA +#define GL_COLOR_ATTACHMENT11_NV 0x8CEB +#define GL_COLOR_ATTACHMENT12_NV 0x8CEC +#define GL_COLOR_ATTACHMENT13_NV 0x8CED +#define GL_COLOR_ATTACHMENT14_NV 0x8CEE +#define GL_COLOR_ATTACHMENT15_NV 0x8CEF + +#define GLEW_NV_fbo_color_attachments GLEW_GET_VAR(__GLEW_NV_fbo_color_attachments) + +#endif /* GL_NV_fbo_color_attachments */ + /* ------------------------------ GL_NV_fence ------------------------------ */ #ifndef GL_NV_fence @@ -13174,6 +14933,24 @@ typedef void (GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsi #endif /* GL_NV_fragment_shader_interlock */ +/* ------------------------- GL_NV_framebuffer_blit ------------------------ */ + +#ifndef GL_NV_framebuffer_blit +#define GL_NV_framebuffer_blit 1 + +#define GL_DRAW_FRAMEBUFFER_BINDING_NV 0x8CA6 +#define GL_READ_FRAMEBUFFER_NV 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_NV 0x8CA9 +#define GL_READ_FRAMEBUFFER_BINDING_NV 0x8CAA + +typedef void (GLAPIENTRY * PFNGLBLITFRAMEBUFFERNVPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); + +#define glBlitFramebufferNV GLEW_GET_FUN(__glewBlitFramebufferNV) + +#define GLEW_NV_framebuffer_blit GLEW_GET_VAR(__GLEW_NV_framebuffer_blit) + +#endif /* GL_NV_framebuffer_blit */ + /* -------------------- GL_NV_framebuffer_mixed_samples -------------------- */ #ifndef GL_NV_framebuffer_mixed_samples @@ -13198,6 +14975,23 @@ typedef void (GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsi #endif /* GL_NV_framebuffer_mixed_samples */ +/* --------------------- GL_NV_framebuffer_multisample --------------------- */ + +#ifndef GL_NV_framebuffer_multisample +#define GL_NV_framebuffer_multisample 1 + +#define GL_RENDERBUFFER_SAMPLES_NV 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_NV 0x8D56 +#define GL_MAX_SAMPLES_NV 0x8D57 + +typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEMULTISAMPLENVPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); + +#define glRenderbufferStorageMultisampleNV GLEW_GET_FUN(__glewRenderbufferStorageMultisampleNV) + +#define GLEW_NV_framebuffer_multisample GLEW_GET_VAR(__GLEW_NV_framebuffer_multisample) + +#endif /* GL_NV_framebuffer_multisample */ + /* ----------------- GL_NV_framebuffer_multisample_coverage ---------------- */ #ifndef GL_NV_framebuffer_multisample_coverage @@ -13216,6 +15010,15 @@ typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (G #endif /* GL_NV_framebuffer_multisample_coverage */ +/* ----------------------- GL_NV_generate_mipmap_sRGB ---------------------- */ + +#ifndef GL_NV_generate_mipmap_sRGB +#define GL_NV_generate_mipmap_sRGB 1 + +#define GLEW_NV_generate_mipmap_sRGB GLEW_GET_VAR(__GLEW_NV_generate_mipmap_sRGB) + +#endif /* GL_NV_generate_mipmap_sRGB */ + /* ------------------------ GL_NV_geometry_program4 ------------------------ */ #ifndef GL_NV_geometry_program4 @@ -13266,7 +15069,7 @@ typedef void (GLAPIENTRY * PFNGLMULTICASTBARRIERNVPROC) (void); typedef void (GLAPIENTRY * PFNGLMULTICASTBLITFRAMEBUFFERNVPROC) (GLuint srcGpu, GLuint dstGpu, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); typedef void (GLAPIENTRY * PFNGLMULTICASTBUFFERSUBDATANVPROC) (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); typedef void (GLAPIENTRY * PFNGLMULTICASTCOPYBUFFERSUBDATANVPROC) (GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -typedef void (GLAPIENTRY * PFNGLMULTICASTCOPYIMAGESUBDATANVPROC) (GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srxY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +typedef void (GLAPIENTRY * PFNGLMULTICASTCOPYIMAGESUBDATANVPROC) (GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); typedef void (GLAPIENTRY * PFNGLMULTICASTFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLuint gpu, GLuint framebuffer, GLuint start, GLsizei count, const GLfloat* v); typedef void (GLAPIENTRY * PFNGLMULTICASTGETQUERYOBJECTI64VNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLint64* params); typedef void (GLAPIENTRY * PFNGLMULTICASTGETQUERYOBJECTIVNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLint* params); @@ -13585,6 +15388,30 @@ typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalf* weight); #endif /* GL_NV_half_float */ +/* -------------------------- GL_NV_image_formats -------------------------- */ + +#ifndef GL_NV_image_formats +#define GL_NV_image_formats 1 + +#define GLEW_NV_image_formats GLEW_GET_VAR(__GLEW_NV_image_formats) + +#endif /* GL_NV_image_formats */ + +/* ------------------------- GL_NV_instanced_arrays ------------------------ */ + +#ifndef GL_NV_instanced_arrays +#define GL_NV_instanced_arrays 1 + +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_NV 0x88FE + +typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBDIVISORNVPROC) (GLuint index, GLuint divisor); + +#define glVertexAttribDivisorNV GLEW_GET_FUN(__glewVertexAttribDivisorNV) + +#define GLEW_NV_instanced_arrays GLEW_GET_VAR(__GLEW_NV_instanced_arrays) + +#endif /* GL_NV_instanced_arrays */ + /* ------------------- GL_NV_internalformat_sample_query ------------------- */ #ifndef GL_NV_internalformat_sample_query @@ -13637,6 +15464,36 @@ typedef void (GLAPIENTRY * PFNGLGETINTERNALFORMATSAMPLEIVNVPROC) (GLenum target, #endif /* GL_NV_multisample_filter_hint */ +/* ----------------------- GL_NV_non_square_matrices ----------------------- */ + +#ifndef GL_NV_non_square_matrices +#define GL_NV_non_square_matrices 1 + +#define GL_FLOAT_MAT2x3_NV 0x8B65 +#define GL_FLOAT_MAT2x4_NV 0x8B66 +#define GL_FLOAT_MAT3x2_NV 0x8B67 +#define GL_FLOAT_MAT3x4_NV 0x8B68 +#define GL_FLOAT_MAT4x2_NV 0x8B69 +#define GL_FLOAT_MAT4x3_NV 0x8B6A + +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2X3FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2X4FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3X2FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3X4FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4X2FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4X3FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); + +#define glUniformMatrix2x3fvNV GLEW_GET_FUN(__glewUniformMatrix2x3fvNV) +#define glUniformMatrix2x4fvNV GLEW_GET_FUN(__glewUniformMatrix2x4fvNV) +#define glUniformMatrix3x2fvNV GLEW_GET_FUN(__glewUniformMatrix3x2fvNV) +#define glUniformMatrix3x4fvNV GLEW_GET_FUN(__glewUniformMatrix3x4fvNV) +#define glUniformMatrix4x2fvNV GLEW_GET_FUN(__glewUniformMatrix4x2fvNV) +#define glUniformMatrix4x3fvNV GLEW_GET_FUN(__glewUniformMatrix4x3fvNV) + +#define GLEW_NV_non_square_matrices GLEW_GET_VAR(__GLEW_NV_non_square_matrices) + +#endif /* GL_NV_non_square_matrices */ + /* ------------------------- GL_NV_occlusion_query ------------------------- */ #ifndef GL_NV_occlusion_query @@ -13667,6 +15524,19 @@ typedef GLboolean (GLAPIENTRY * PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); #endif /* GL_NV_occlusion_query */ +/* -------------------------- GL_NV_pack_subimage -------------------------- */ + +#ifndef GL_NV_pack_subimage +#define GL_NV_pack_subimage 1 + +#define GL_PACK_ROW_LENGTH_NV 0x0D02 +#define GL_PACK_SKIP_ROWS_NV 0x0D03 +#define GL_PACK_SKIP_PIXELS_NV 0x0D04 + +#define GLEW_NV_pack_subimage GLEW_GET_VAR(__GLEW_NV_pack_subimage) + +#endif /* GL_NV_pack_subimage */ + /* ----------------------- GL_NV_packed_depth_stencil ---------------------- */ #ifndef GL_NV_packed_depth_stencil @@ -13679,6 +15549,30 @@ typedef GLboolean (GLAPIENTRY * PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); #endif /* GL_NV_packed_depth_stencil */ +/* --------------------------- GL_NV_packed_float -------------------------- */ + +#ifndef GL_NV_packed_float +#define GL_NV_packed_float 1 + +#define GL_R11F_G11F_B10F_NV 0x8C3A +#define GL_UNSIGNED_INT_10F_11F_11F_REV_NV 0x8C3B + +#define GLEW_NV_packed_float GLEW_GET_VAR(__GLEW_NV_packed_float) + +#endif /* GL_NV_packed_float */ + +/* ----------------------- GL_NV_packed_float_linear ----------------------- */ + +#ifndef GL_NV_packed_float_linear +#define GL_NV_packed_float_linear 1 + +#define GL_R11F_G11F_B10F_NV 0x8C3A +#define GL_UNSIGNED_INT_10F_11F_11F_REV_NV 0x8C3B + +#define GLEW_NV_packed_float_linear GLEW_GET_VAR(__GLEW_NV_packed_float_linear) + +#endif /* GL_NV_packed_float_linear */ + /* --------------------- GL_NV_parameter_buffer_object --------------------- */ #ifndef GL_NV_parameter_buffer_object @@ -14011,6 +15905,20 @@ typedef void (GLAPIENTRY * PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei n #endif /* GL_NV_path_rendering_shared_edge */ +/* ----------------------- GL_NV_pixel_buffer_object ----------------------- */ + +#ifndef GL_NV_pixel_buffer_object +#define GL_NV_pixel_buffer_object 1 + +#define GL_PIXEL_PACK_BUFFER_NV 0x88EB +#define GL_PIXEL_UNPACK_BUFFER_NV 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING_NV 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING_NV 0x88EF + +#define GLEW_NV_pixel_buffer_object GLEW_GET_VAR(__GLEW_NV_pixel_buffer_object) + +#endif /* GL_NV_pixel_buffer_object */ + /* ------------------------- GL_NV_pixel_data_range ------------------------ */ #ifndef GL_NV_pixel_data_range @@ -14033,6 +15941,17 @@ typedef void (GLAPIENTRY * PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei le #endif /* GL_NV_pixel_data_range */ +/* ------------------------- GL_NV_platform_binary ------------------------- */ + +#ifndef GL_NV_platform_binary +#define GL_NV_platform_binary 1 + +#define GL_NVIDIA_PLATFORM_BINARY_NV 0x890B + +#define GLEW_NV_platform_binary GLEW_GET_VAR(__GLEW_NV_platform_binary) + +#endif /* GL_NV_platform_binary */ + /* --------------------------- GL_NV_point_sprite -------------------------- */ #ifndef GL_NV_point_sprite @@ -14052,6 +15971,26 @@ typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLi #endif /* GL_NV_point_sprite */ +/* --------------------------- GL_NV_polygon_mode -------------------------- */ + +#ifndef GL_NV_polygon_mode +#define GL_NV_polygon_mode 1 + +#define GL_POLYGON_MODE_NV 0x0B40 +#define GL_POINT_NV 0x1B00 +#define GL_LINE_NV 0x1B01 +#define GL_FILL_NV 0x1B02 +#define GL_POLYGON_OFFSET_POINT_NV 0x2A01 +#define GL_POLYGON_OFFSET_LINE_NV 0x2A02 + +typedef void (GLAPIENTRY * PFNGLPOLYGONMODENVPROC) (GLenum face, GLenum mode); + +#define glPolygonModeNV GLEW_GET_FUN(__glewPolygonModeNV) + +#define GLEW_NV_polygon_mode GLEW_GET_VAR(__GLEW_NV_polygon_mode) + +#endif /* GL_NV_polygon_mode */ + /* -------------------------- GL_NV_present_video -------------------------- */ #ifndef GL_NV_present_video @@ -14100,6 +16039,33 @@ typedef void (GLAPIENTRY * PFNGLPRIMITIVERESTARTNVPROC) (void); #endif /* GL_NV_primitive_restart */ +/* ---------------------------- GL_NV_read_depth --------------------------- */ + +#ifndef GL_NV_read_depth +#define GL_NV_read_depth 1 + +#define GLEW_NV_read_depth GLEW_GET_VAR(__GLEW_NV_read_depth) + +#endif /* GL_NV_read_depth */ + +/* ------------------------ GL_NV_read_depth_stencil ----------------------- */ + +#ifndef GL_NV_read_depth_stencil +#define GL_NV_read_depth_stencil 1 + +#define GLEW_NV_read_depth_stencil GLEW_GET_VAR(__GLEW_NV_read_depth_stencil) + +#endif /* GL_NV_read_depth_stencil */ + +/* --------------------------- GL_NV_read_stencil -------------------------- */ + +#ifndef GL_NV_read_stencil +#define GL_NV_read_stencil 1 + +#define GLEW_NV_read_stencil GLEW_GET_VAR(__GLEW_NV_read_stencil) + +#endif /* GL_NV_read_stencil */ + /* ------------------------ GL_NV_register_combiners ----------------------- */ #ifndef GL_NV_register_combiners @@ -14218,6 +16184,26 @@ typedef void (GLAPIENTRY * PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage #endif /* GL_NV_robustness_video_memory_purge */ +/* --------------------------- GL_NV_sRGB_formats -------------------------- */ + +#ifndef GL_NV_sRGB_formats +#define GL_NV_sRGB_formats 1 + +#define GL_ETC1_SRGB8_NV 0x88EE +#define GL_SRGB8_NV 0x8C41 +#define GL_SLUMINANCE_ALPHA_NV 0x8C44 +#define GL_SLUMINANCE8_ALPHA8_NV 0x8C45 +#define GL_SLUMINANCE_NV 0x8C46 +#define GL_SLUMINANCE8_NV 0x8C47 +#define GL_COMPRESSED_SRGB_S3TC_DXT1_NV 0x8C4C +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_NV 0x8C4D +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_NV 0x8C4E +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_NV 0x8C4F + +#define GLEW_NV_sRGB_formats GLEW_GET_VAR(__GLEW_NV_sRGB_formats) + +#endif /* GL_NV_sRGB_formats */ + /* ------------------------- GL_NV_sample_locations ------------------------ */ #ifndef GL_NV_sample_locations @@ -14337,6 +16323,15 @@ typedef void (GLAPIENTRY * PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei cou #endif /* GL_NV_shader_buffer_load */ +/* ---------------- GL_NV_shader_noperspective_interpolation --------------- */ + +#ifndef GL_NV_shader_noperspective_interpolation +#define GL_NV_shader_noperspective_interpolation 1 + +#define GLEW_NV_shader_noperspective_interpolation GLEW_GET_VAR(__GLEW_NV_shader_noperspective_interpolation) + +#endif /* GL_NV_shader_noperspective_interpolation */ + /* ------------------- GL_NV_shader_storage_buffer_object ------------------ */ #ifndef GL_NV_shader_storage_buffer_object @@ -14368,6 +16363,28 @@ typedef void (GLAPIENTRY * PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei cou #endif /* GL_NV_shader_thread_shuffle */ +/* ---------------------- GL_NV_shadow_samplers_array ---------------------- */ + +#ifndef GL_NV_shadow_samplers_array +#define GL_NV_shadow_samplers_array 1 + +#define GL_SAMPLER_2D_ARRAY_SHADOW_NV 0x8DC4 + +#define GLEW_NV_shadow_samplers_array GLEW_GET_VAR(__GLEW_NV_shadow_samplers_array) + +#endif /* GL_NV_shadow_samplers_array */ + +/* ----------------------- GL_NV_shadow_samplers_cube ---------------------- */ + +#ifndef GL_NV_shadow_samplers_cube +#define GL_NV_shadow_samplers_cube 1 + +#define GL_SAMPLER_CUBE_SHADOW_NV 0x8DC5 + +#define GLEW_NV_shadow_samplers_cube GLEW_GET_VAR(__GLEW_NV_shadow_samplers_cube) + +#endif /* GL_NV_shadow_samplers_cube */ + /* ---------------------- GL_NV_stereo_view_rendering ---------------------- */ #ifndef GL_NV_stereo_view_rendering @@ -14417,6 +16434,37 @@ typedef void (GLAPIENTRY * PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei cou #endif /* GL_NV_texgen_reflection */ +/* -------------------------- GL_NV_texture_array -------------------------- */ + +#ifndef GL_NV_texture_array +#define GL_NV_texture_array 1 + +#define GL_UNPACK_SKIP_IMAGES_NV 0x806D +#define GL_UNPACK_IMAGE_HEIGHT_NV 0x806E +#define GL_MAX_ARRAY_TEXTURE_LAYERS_NV 0x88FF +#define GL_TEXTURE_2D_ARRAY_NV 0x8C1A +#define GL_TEXTURE_BINDING_2D_ARRAY_NV 0x8C1D +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_NV 0x8CD4 +#define GL_SAMPLER_2D_ARRAY_NV 0x8DC1 + +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE3DNVPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE3DNVPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +typedef void (GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE3DNVPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURELAYERNVPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (GLAPIENTRY * PFNGLTEXIMAGE3DNVPROC) (GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE3DNVPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); + +#define glCompressedTexImage3DNV GLEW_GET_FUN(__glewCompressedTexImage3DNV) +#define glCompressedTexSubImage3DNV GLEW_GET_FUN(__glewCompressedTexSubImage3DNV) +#define glCopyTexSubImage3DNV GLEW_GET_FUN(__glewCopyTexSubImage3DNV) +#define glFramebufferTextureLayerNV GLEW_GET_FUN(__glewFramebufferTextureLayerNV) +#define glTexImage3DNV GLEW_GET_FUN(__glewTexImage3DNV) +#define glTexSubImage3DNV GLEW_GET_FUN(__glewTexSubImage3DNV) + +#define GLEW_NV_texture_array GLEW_GET_VAR(__GLEW_NV_texture_array) + +#endif /* GL_NV_texture_array */ + /* ------------------------- GL_NV_texture_barrier ------------------------- */ #ifndef GL_NV_texture_barrier @@ -14430,6 +16478,55 @@ typedef void (GLAPIENTRY * PFNGLTEXTUREBARRIERNVPROC) (void); #endif /* GL_NV_texture_barrier */ +/* ----------------------- GL_NV_texture_border_clamp ---------------------- */ + +#ifndef GL_NV_texture_border_clamp +#define GL_NV_texture_border_clamp 1 + +#define GL_TEXTURE_BORDER_COLOR_NV 0x1004 +#define GL_CLAMP_TO_BORDER_NV 0x812D + +#define GLEW_NV_texture_border_clamp GLEW_GET_VAR(__GLEW_NV_texture_border_clamp) + +#endif /* GL_NV_texture_border_clamp */ + +/* --------------------- GL_NV_texture_compression_latc -------------------- */ + +#ifndef GL_NV_texture_compression_latc +#define GL_NV_texture_compression_latc 1 + +#define GL_COMPRESSED_LUMINANCE_LATC1_NV 0x8C70 +#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_NV 0x8C71 +#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_NV 0x8C72 +#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_NV 0x8C73 + +#define GLEW_NV_texture_compression_latc GLEW_GET_VAR(__GLEW_NV_texture_compression_latc) + +#endif /* GL_NV_texture_compression_latc */ + +/* --------------------- GL_NV_texture_compression_s3tc -------------------- */ + +#ifndef GL_NV_texture_compression_s3tc +#define GL_NV_texture_compression_s3tc 1 + +#define GL_COMPRESSED_RGB_S3TC_DXT1_NV 0x83F0 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_NV 0x83F1 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_NV 0x83F2 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_NV 0x83F3 + +#define GLEW_NV_texture_compression_s3tc GLEW_GET_VAR(__GLEW_NV_texture_compression_s3tc) + +#endif /* GL_NV_texture_compression_s3tc */ + +/* ----------------- GL_NV_texture_compression_s3tc_update ----------------- */ + +#ifndef GL_NV_texture_compression_s3tc_update +#define GL_NV_texture_compression_s3tc_update 1 + +#define GLEW_NV_texture_compression_s3tc_update GLEW_GET_VAR(__GLEW_NV_texture_compression_s3tc_update) + +#endif /* GL_NV_texture_compression_s3tc_update */ + /* --------------------- GL_NV_texture_compression_vtc --------------------- */ #ifndef GL_NV_texture_compression_vtc @@ -14491,6 +16588,15 @@ typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) (GLuint texture #endif /* GL_NV_texture_multisample */ +/* ---------------------- GL_NV_texture_npot_2D_mipmap --------------------- */ + +#ifndef GL_NV_texture_npot_2D_mipmap +#define GL_NV_texture_npot_2D_mipmap 1 + +#define GLEW_NV_texture_npot_2D_mipmap GLEW_GET_VAR(__GLEW_NV_texture_npot_2D_mipmap) + +#endif /* GL_NV_texture_npot_2D_mipmap */ + /* ------------------------ GL_NV_texture_rectangle ------------------------ */ #ifndef GL_NV_texture_rectangle @@ -14505,6 +16611,15 @@ typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) (GLuint texture #endif /* GL_NV_texture_rectangle */ +/* ------------------- GL_NV_texture_rectangle_compressed ------------------ */ + +#ifndef GL_NV_texture_rectangle_compressed +#define GL_NV_texture_rectangle_compressed 1 + +#define GLEW_NV_texture_rectangle_compressed GLEW_GET_VAR(__GLEW_NV_texture_rectangle_compressed) + +#endif /* GL_NV_texture_rectangle_compressed */ + /* -------------------------- GL_NV_texture_shader ------------------------- */ #ifndef GL_NV_texture_shader @@ -15278,6 +17393,50 @@ typedef void (GLAPIENTRY * PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint vid #endif /* GL_NV_video_capture */ +/* -------------------------- GL_NV_viewport_array ------------------------- */ + +#ifndef GL_NV_viewport_array +#define GL_NV_viewport_array 1 + +#define GL_DEPTH_RANGE 0x0B70 +#define GL_VIEWPORT 0x0BA2 +#define GL_SCISSOR_BOX 0x0C10 +#define GL_SCISSOR_TEST 0x0C11 +#define GL_MAX_VIEWPORTS_NV 0x825B +#define GL_VIEWPORT_SUBPIXEL_BITS_NV 0x825C +#define GL_VIEWPORT_BOUNDS_RANGE_NV 0x825D +#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX_NV 0x825F + +typedef void (GLAPIENTRY * PFNGLDEPTHRANGEARRAYFVNVPROC) (GLuint first, GLsizei count, const GLfloat * v); +typedef void (GLAPIENTRY * PFNGLDEPTHRANGEINDEXEDFNVPROC) (GLuint index, GLfloat n, GLfloat f); +typedef void (GLAPIENTRY * PFNGLDISABLEINVPROC) (GLenum target, GLuint index); +typedef void (GLAPIENTRY * PFNGLENABLEINVPROC) (GLenum target, GLuint index); +typedef void (GLAPIENTRY * PFNGLGETFLOATI_VNVPROC) (GLenum target, GLuint index, GLfloat* data); +typedef GLboolean (GLAPIENTRY * PFNGLISENABLEDINVPROC) (GLenum target, GLuint index); +typedef void (GLAPIENTRY * PFNGLSCISSORARRAYVNVPROC) (GLuint first, GLsizei count, const GLint * v); +typedef void (GLAPIENTRY * PFNGLSCISSORINDEXEDNVPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY * PFNGLSCISSORINDEXEDVNVPROC) (GLuint index, const GLint * v); +typedef void (GLAPIENTRY * PFNGLVIEWPORTARRAYVNVPROC) (GLuint first, GLsizei count, const GLfloat * v); +typedef void (GLAPIENTRY * PFNGLVIEWPORTINDEXEDFNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +typedef void (GLAPIENTRY * PFNGLVIEWPORTINDEXEDFVNVPROC) (GLuint index, const GLfloat * v); + +#define glDepthRangeArrayfvNV GLEW_GET_FUN(__glewDepthRangeArrayfvNV) +#define glDepthRangeIndexedfNV GLEW_GET_FUN(__glewDepthRangeIndexedfNV) +#define glDisableiNV GLEW_GET_FUN(__glewDisableiNV) +#define glEnableiNV GLEW_GET_FUN(__glewEnableiNV) +#define glGetFloati_vNV GLEW_GET_FUN(__glewGetFloati_vNV) +#define glIsEnablediNV GLEW_GET_FUN(__glewIsEnablediNV) +#define glScissorArrayvNV GLEW_GET_FUN(__glewScissorArrayvNV) +#define glScissorIndexedNV GLEW_GET_FUN(__glewScissorIndexedNV) +#define glScissorIndexedvNV GLEW_GET_FUN(__glewScissorIndexedvNV) +#define glViewportArrayvNV GLEW_GET_FUN(__glewViewportArrayvNV) +#define glViewportIndexedfNV GLEW_GET_FUN(__glewViewportIndexedfNV) +#define glViewportIndexedfvNV GLEW_GET_FUN(__glewViewportIndexedfvNV) + +#define GLEW_NV_viewport_array GLEW_GET_VAR(__GLEW_NV_viewport_array) + +#endif /* GL_NV_viewport_array */ + /* ------------------------- GL_NV_viewport_array2 ------------------------- */ #ifndef GL_NV_viewport_array2 @@ -15322,61 +17481,6 @@ typedef void (GLAPIENTRY * PFNGLVIEWPORTSWIZZLENVPROC) (GLuint index, GLenum swi #endif /* GL_OES_byte_coordinates */ -/* ------------------- GL_OES_compressed_paletted_texture ------------------ */ - -#ifndef GL_OES_compressed_paletted_texture -#define GL_OES_compressed_paletted_texture 1 - -#define GL_PALETTE4_RGB8_OES 0x8B90 -#define GL_PALETTE4_RGBA8_OES 0x8B91 -#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 -#define GL_PALETTE4_RGBA4_OES 0x8B93 -#define GL_PALETTE4_RGB5_A1_OES 0x8B94 -#define GL_PALETTE8_RGB8_OES 0x8B95 -#define GL_PALETTE8_RGBA8_OES 0x8B96 -#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 -#define GL_PALETTE8_RGBA4_OES 0x8B98 -#define GL_PALETTE8_RGB5_A1_OES 0x8B99 - -#define GLEW_OES_compressed_paletted_texture GLEW_GET_VAR(__GLEW_OES_compressed_paletted_texture) - -#endif /* GL_OES_compressed_paletted_texture */ - -/* --------------------------- GL_OES_read_format -------------------------- */ - -#ifndef GL_OES_read_format -#define GL_OES_read_format 1 - -#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B - -#define GLEW_OES_read_format GLEW_GET_VAR(__GLEW_OES_read_format) - -#endif /* GL_OES_read_format */ - -/* ------------------------ GL_OES_single_precision ------------------------ */ - -#ifndef GL_OES_single_precision -#define GL_OES_single_precision 1 - -typedef void (GLAPIENTRY * PFNGLCLEARDEPTHFOESPROC) (GLclampf depth); -typedef void (GLAPIENTRY * PFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat* equation); -typedef void (GLAPIENTRY * PFNGLDEPTHRANGEFOESPROC) (GLclampf n, GLclampf f); -typedef void (GLAPIENTRY * PFNGLFRUSTUMFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); -typedef void (GLAPIENTRY * PFNGLGETCLIPPLANEFOESPROC) (GLenum plane, GLfloat* equation); -typedef void (GLAPIENTRY * PFNGLORTHOFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); - -#define glClearDepthfOES GLEW_GET_FUN(__glewClearDepthfOES) -#define glClipPlanefOES GLEW_GET_FUN(__glewClipPlanefOES) -#define glDepthRangefOES GLEW_GET_FUN(__glewDepthRangefOES) -#define glFrustumfOES GLEW_GET_FUN(__glewFrustumfOES) -#define glGetClipPlanefOES GLEW_GET_FUN(__glewGetClipPlanefOES) -#define glOrthofOES GLEW_GET_FUN(__glewOrthofOES) - -#define GLEW_OES_single_precision GLEW_GET_VAR(__GLEW_OES_single_precision) - -#endif /* GL_OES_single_precision */ - /* ---------------------------- GL_OML_interlace --------------------------- */ #ifndef GL_OML_interlace @@ -15444,6 +17548,19 @@ typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC) (GLenum targ #endif /* GL_OVR_multiview2 */ +/* ------------ GL_OVR_multiview_multisampled_render_to_texture ------------ */ + +#ifndef GL_OVR_multiview_multisampled_render_to_texture +#define GL_OVR_multiview_multisampled_render_to_texture 1 + +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREMULTISAMPLEMULTIVIEWOVRPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLsizei samples, GLint baseViewIndex, GLsizei numViews); + +#define glFramebufferTextureMultisampleMultiviewOVR GLEW_GET_FUN(__glewFramebufferTextureMultisampleMultiviewOVR) + +#define GLEW_OVR_multiview_multisampled_render_to_texture GLEW_GET_VAR(__GLEW_OVR_multiview_multisampled_render_to_texture) + +#endif /* GL_OVR_multiview_multisampled_render_to_texture */ + /* --------------------------- GL_PGI_misc_hints --------------------------- */ #ifndef GL_PGI_misc_hints @@ -15506,6 +17623,218 @@ typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC) (GLenum targ #endif /* GL_PGI_vertex_hints */ +/* --------------------------- GL_QCOM_alpha_test -------------------------- */ + +#ifndef GL_QCOM_alpha_test +#define GL_QCOM_alpha_test 1 + +#define GL_ALPHA_TEST_QCOM 0x0BC0 +#define GL_ALPHA_TEST_FUNC_QCOM 0x0BC1 +#define GL_ALPHA_TEST_REF_QCOM 0x0BC2 + +typedef void (GLAPIENTRY * PFNGLALPHAFUNCQCOMPROC) (GLenum func, GLclampf ref); + +#define glAlphaFuncQCOM GLEW_GET_FUN(__glewAlphaFuncQCOM) + +#define GLEW_QCOM_alpha_test GLEW_GET_VAR(__GLEW_QCOM_alpha_test) + +#endif /* GL_QCOM_alpha_test */ + +/* ------------------------ GL_QCOM_binning_control ------------------------ */ + +#ifndef GL_QCOM_binning_control +#define GL_QCOM_binning_control 1 + +#define GL_DONT_CARE 0x1100 +#define GL_BINNING_CONTROL_HINT_QCOM 0x8FB0 +#define GL_CPU_OPTIMIZED_QCOM 0x8FB1 +#define GL_GPU_OPTIMIZED_QCOM 0x8FB2 +#define GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM 0x8FB3 + +#define GLEW_QCOM_binning_control GLEW_GET_VAR(__GLEW_QCOM_binning_control) + +#endif /* GL_QCOM_binning_control */ + +/* ------------------------- GL_QCOM_driver_control ------------------------ */ + +#ifndef GL_QCOM_driver_control +#define GL_QCOM_driver_control 1 + +typedef void (GLAPIENTRY * PFNGLDISABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); +typedef void (GLAPIENTRY * PFNGLENABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); +typedef void (GLAPIENTRY * PFNGLGETDRIVERCONTROLSTRINGQCOMPROC) (GLuint driverControl, GLsizei bufSize, GLsizei* length, GLchar *driverControlString); +typedef void (GLAPIENTRY * PFNGLGETDRIVERCONTROLSQCOMPROC) (GLint* num, GLsizei size, GLuint *driverControls); + +#define glDisableDriverControlQCOM GLEW_GET_FUN(__glewDisableDriverControlQCOM) +#define glEnableDriverControlQCOM GLEW_GET_FUN(__glewEnableDriverControlQCOM) +#define glGetDriverControlStringQCOM GLEW_GET_FUN(__glewGetDriverControlStringQCOM) +#define glGetDriverControlsQCOM GLEW_GET_FUN(__glewGetDriverControlsQCOM) + +#define GLEW_QCOM_driver_control GLEW_GET_VAR(__GLEW_QCOM_driver_control) + +#endif /* GL_QCOM_driver_control */ + +/* -------------------------- GL_QCOM_extended_get ------------------------- */ + +#ifndef GL_QCOM_extended_get +#define GL_QCOM_extended_get 1 + +#define GL_TEXTURE_WIDTH_QCOM 0x8BD2 +#define GL_TEXTURE_HEIGHT_QCOM 0x8BD3 +#define GL_TEXTURE_DEPTH_QCOM 0x8BD4 +#define GL_TEXTURE_INTERNAL_FORMAT_QCOM 0x8BD5 +#define GL_TEXTURE_FORMAT_QCOM 0x8BD6 +#define GL_TEXTURE_TYPE_QCOM 0x8BD7 +#define GL_TEXTURE_IMAGE_VALID_QCOM 0x8BD8 +#define GL_TEXTURE_NUM_LEVELS_QCOM 0x8BD9 +#define GL_TEXTURE_TARGET_QCOM 0x8BDA +#define GL_TEXTURE_OBJECT_VALID_QCOM 0x8BDB +#define GL_STATE_RESTORE 0x8BDC + +typedef void (GLAPIENTRY * PFNGLEXTGETBUFFERPOINTERVQCOMPROC) (GLenum target, void** params); +typedef void (GLAPIENTRY * PFNGLEXTGETBUFFERSQCOMPROC) (GLuint* buffers, GLint maxBuffers, GLint* numBuffers); +typedef void (GLAPIENTRY * PFNGLEXTGETFRAMEBUFFERSQCOMPROC) (GLuint* framebuffers, GLint maxFramebuffers, GLint* numFramebuffers); +typedef void (GLAPIENTRY * PFNGLEXTGETRENDERBUFFERSQCOMPROC) (GLuint* renderbuffers, GLint maxRenderbuffers, GLint* numRenderbuffers); +typedef void (GLAPIENTRY * PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC) (GLuint texture, GLenum face, GLint level, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLEXTGETTEXSUBIMAGEQCOMPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, void *texels); +typedef void (GLAPIENTRY * PFNGLEXTGETTEXTURESQCOMPROC) (GLuint* textures, GLint maxTextures, GLint* numTextures); +typedef void (GLAPIENTRY * PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC) (GLenum target, GLenum pname, GLint param); + +#define glExtGetBufferPointervQCOM GLEW_GET_FUN(__glewExtGetBufferPointervQCOM) +#define glExtGetBuffersQCOM GLEW_GET_FUN(__glewExtGetBuffersQCOM) +#define glExtGetFramebuffersQCOM GLEW_GET_FUN(__glewExtGetFramebuffersQCOM) +#define glExtGetRenderbuffersQCOM GLEW_GET_FUN(__glewExtGetRenderbuffersQCOM) +#define glExtGetTexLevelParameterivQCOM GLEW_GET_FUN(__glewExtGetTexLevelParameterivQCOM) +#define glExtGetTexSubImageQCOM GLEW_GET_FUN(__glewExtGetTexSubImageQCOM) +#define glExtGetTexturesQCOM GLEW_GET_FUN(__glewExtGetTexturesQCOM) +#define glExtTexObjectStateOverrideiQCOM GLEW_GET_FUN(__glewExtTexObjectStateOverrideiQCOM) + +#define GLEW_QCOM_extended_get GLEW_GET_VAR(__GLEW_QCOM_extended_get) + +#endif /* GL_QCOM_extended_get */ + +/* ------------------------- GL_QCOM_extended_get2 ------------------------- */ + +#ifndef GL_QCOM_extended_get2 +#define GL_QCOM_extended_get2 1 + +typedef void (GLAPIENTRY * PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC) (GLuint program, GLenum shadertype, GLchar* source, GLint* length); +typedef void (GLAPIENTRY * PFNGLEXTGETPROGRAMSQCOMPROC) (GLuint* programs, GLint maxPrograms, GLint* numPrograms); +typedef void (GLAPIENTRY * PFNGLEXTGETSHADERSQCOMPROC) (GLuint* shaders, GLint maxShaders, GLint* numShaders); +typedef GLboolean (GLAPIENTRY * PFNGLEXTISPROGRAMBINARYQCOMPROC) (GLuint program); + +#define glExtGetProgramBinarySourceQCOM GLEW_GET_FUN(__glewExtGetProgramBinarySourceQCOM) +#define glExtGetProgramsQCOM GLEW_GET_FUN(__glewExtGetProgramsQCOM) +#define glExtGetShadersQCOM GLEW_GET_FUN(__glewExtGetShadersQCOM) +#define glExtIsProgramBinaryQCOM GLEW_GET_FUN(__glewExtIsProgramBinaryQCOM) + +#define GLEW_QCOM_extended_get2 GLEW_GET_VAR(__GLEW_QCOM_extended_get2) + +#endif /* GL_QCOM_extended_get2 */ + +/* ---------------------- GL_QCOM_framebuffer_foveated --------------------- */ + +#ifndef GL_QCOM_framebuffer_foveated +#define GL_QCOM_framebuffer_foveated 1 + +#define GL_FOVEATION_ENABLE_BIT_QCOM 0x1 +#define GL_FOVEATION_SCALED_BIN_METHOD_BIT_QCOM 0x2 + +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERFOVEATIONCONFIGQCOMPROC) (GLuint fbo, GLuint numLayers, GLuint focalPointsPerLayer, GLuint requestedFeatures, GLuint* providedFeatures); +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERFOVEATIONPARAMETERSQCOMPROC) (GLuint fbo, GLuint layer, GLuint focalPoint, GLfloat focalX, GLfloat focalY, GLfloat gainX, GLfloat gainY, GLfloat foveaArea); + +#define glFramebufferFoveationConfigQCOM GLEW_GET_FUN(__glewFramebufferFoveationConfigQCOM) +#define glFramebufferFoveationParametersQCOM GLEW_GET_FUN(__glewFramebufferFoveationParametersQCOM) + +#define GLEW_QCOM_framebuffer_foveated GLEW_GET_VAR(__GLEW_QCOM_framebuffer_foveated) + +#endif /* GL_QCOM_framebuffer_foveated */ + +/* ---------------------- GL_QCOM_perfmon_global_mode ---------------------- */ + +#ifndef GL_QCOM_perfmon_global_mode +#define GL_QCOM_perfmon_global_mode 1 + +#define GL_PERFMON_GLOBAL_MODE_QCOM 0x8FA0 + +#define GLEW_QCOM_perfmon_global_mode GLEW_GET_VAR(__GLEW_QCOM_perfmon_global_mode) + +#endif /* GL_QCOM_perfmon_global_mode */ + +/* -------------- GL_QCOM_shader_framebuffer_fetch_noncoherent ------------- */ + +#ifndef GL_QCOM_shader_framebuffer_fetch_noncoherent +#define GL_QCOM_shader_framebuffer_fetch_noncoherent 1 + +#define GL_FRAMEBUFFER_FETCH_NONCOHERENT_QCOM 0x96A2 + +typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERFETCHBARRIERQCOMPROC) (void); + +#define glFramebufferFetchBarrierQCOM GLEW_GET_FUN(__glewFramebufferFetchBarrierQCOM) + +#define GLEW_QCOM_shader_framebuffer_fetch_noncoherent GLEW_GET_VAR(__GLEW_QCOM_shader_framebuffer_fetch_noncoherent) + +#endif /* GL_QCOM_shader_framebuffer_fetch_noncoherent */ + +/* ------------------------ GL_QCOM_tiled_rendering ------------------------ */ + +#ifndef GL_QCOM_tiled_rendering +#define GL_QCOM_tiled_rendering 1 + +#define GL_COLOR_BUFFER_BIT0_QCOM 0x00000001 +#define GL_COLOR_BUFFER_BIT1_QCOM 0x00000002 +#define GL_COLOR_BUFFER_BIT2_QCOM 0x00000004 +#define GL_COLOR_BUFFER_BIT3_QCOM 0x00000008 +#define GL_COLOR_BUFFER_BIT4_QCOM 0x00000010 +#define GL_COLOR_BUFFER_BIT5_QCOM 0x00000020 +#define GL_COLOR_BUFFER_BIT6_QCOM 0x00000040 +#define GL_COLOR_BUFFER_BIT7_QCOM 0x00000080 +#define GL_DEPTH_BUFFER_BIT0_QCOM 0x00000100 +#define GL_DEPTH_BUFFER_BIT1_QCOM 0x00000200 +#define GL_DEPTH_BUFFER_BIT2_QCOM 0x00000400 +#define GL_DEPTH_BUFFER_BIT3_QCOM 0x00000800 +#define GL_DEPTH_BUFFER_BIT4_QCOM 0x00001000 +#define GL_DEPTH_BUFFER_BIT5_QCOM 0x00002000 +#define GL_DEPTH_BUFFER_BIT6_QCOM 0x00004000 +#define GL_DEPTH_BUFFER_BIT7_QCOM 0x00008000 +#define GL_STENCIL_BUFFER_BIT0_QCOM 0x00010000 +#define GL_STENCIL_BUFFER_BIT1_QCOM 0x00020000 +#define GL_STENCIL_BUFFER_BIT2_QCOM 0x00040000 +#define GL_STENCIL_BUFFER_BIT3_QCOM 0x00080000 +#define GL_STENCIL_BUFFER_BIT4_QCOM 0x00100000 +#define GL_STENCIL_BUFFER_BIT5_QCOM 0x00200000 +#define GL_STENCIL_BUFFER_BIT6_QCOM 0x00400000 +#define GL_STENCIL_BUFFER_BIT7_QCOM 0x00800000 +#define GL_MULTISAMPLE_BUFFER_BIT0_QCOM 0x01000000 +#define GL_MULTISAMPLE_BUFFER_BIT1_QCOM 0x02000000 +#define GL_MULTISAMPLE_BUFFER_BIT2_QCOM 0x04000000 +#define GL_MULTISAMPLE_BUFFER_BIT3_QCOM 0x08000000 +#define GL_MULTISAMPLE_BUFFER_BIT4_QCOM 0x10000000 +#define GL_MULTISAMPLE_BUFFER_BIT5_QCOM 0x20000000 +#define GL_MULTISAMPLE_BUFFER_BIT6_QCOM 0x40000000 +#define GL_MULTISAMPLE_BUFFER_BIT7_QCOM 0x80000000 + +typedef void (GLAPIENTRY * PFNGLENDTILINGQCOMPROC) (GLbitfield preserveMask); +typedef void (GLAPIENTRY * PFNGLSTARTTILINGQCOMPROC) (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); + +#define glEndTilingQCOM GLEW_GET_FUN(__glewEndTilingQCOM) +#define glStartTilingQCOM GLEW_GET_FUN(__glewStartTilingQCOM) + +#define GLEW_QCOM_tiled_rendering GLEW_GET_VAR(__GLEW_QCOM_tiled_rendering) + +#endif /* GL_QCOM_tiled_rendering */ + +/* ---------------------- GL_QCOM_writeonly_rendering ---------------------- */ + +#ifndef GL_QCOM_writeonly_rendering +#define GL_QCOM_writeonly_rendering 1 + +#define GL_WRITEONLY_RENDERING_QCOM 0x8823 + +#define GLEW_QCOM_writeonly_rendering GLEW_GET_VAR(__GLEW_QCOM_writeonly_rendering) + +#endif /* GL_QCOM_writeonly_rendering */ + /* ---------------------- GL_REGAL_ES1_0_compatibility --------------------- */ #ifndef GL_REGAL_ES1_0_compatibility @@ -15732,6 +18061,15 @@ typedef void * (GLAPIENTRY * PFNGLGETPROCADDRESSREGALPROC) (const GLchar *name); #endif /* GL_S3_s3tc */ +/* ------------------------- GL_SGIS_clip_band_hint ------------------------ */ + +#ifndef GL_SGIS_clip_band_hint +#define GL_SGIS_clip_band_hint 1 + +#define GLEW_SGIS_clip_band_hint GLEW_GET_VAR(__GLEW_SGIS_clip_band_hint) + +#endif /* GL_SGIS_clip_band_hint */ + /* -------------------------- GL_SGIS_color_range -------------------------- */ #ifndef GL_SGIS_color_range @@ -15793,6 +18131,15 @@ typedef void (GLAPIENTRY * PFNGLGETFOGFUNCSGISPROC) (GLfloat* points); #endif /* GL_SGIS_generate_mipmap */ +/* -------------------------- GL_SGIS_line_texgen -------------------------- */ + +#ifndef GL_SGIS_line_texgen +#define GL_SGIS_line_texgen 1 + +#define GLEW_SGIS_line_texgen GLEW_GET_VAR(__GLEW_SGIS_line_texgen) + +#endif /* GL_SGIS_line_texgen */ + /* -------------------------- GL_SGIS_multisample -------------------------- */ #ifndef GL_SGIS_multisample @@ -15825,6 +18172,37 @@ typedef void (GLAPIENTRY * PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); #endif /* GL_SGIS_multisample */ +/* -------------------------- GL_SGIS_multitexture ------------------------- */ + +#ifndef GL_SGIS_multitexture +#define GL_SGIS_multitexture 1 + +#define GL_SELECTED_TEXTURE_SGIS 0x83C0 +#define GL_SELECTED_TEXTURE_COORD_SET_SGIS 0x83C1 +#define GL_SELECTED_TEXTURE_TRANSFORM_SGIS 0x83C2 +#define GL_MAX_TEXTURES_SGIS 0x83C3 +#define GL_MAX_TEXTURE_COORD_SETS_SGIS 0x83C4 +#define GL_TEXTURE_COORD_SET_INTERLEAVE_FACTOR_SGIS 0x83C5 +#define GL_TEXTURE_ENV_COORD_SET_SGIS 0x83C6 +#define GL_TEXTURE0_SGIS 0x83C7 +#define GL_TEXTURE1_SGIS 0x83C8 +#define GL_TEXTURE2_SGIS 0x83C9 +#define GL_TEXTURE3_SGIS 0x83CA + +typedef void (GLAPIENTRY * PFNGLINTERLEAVEDTEXTURECOORDSETSSGISPROC) (GLint factor); +typedef void (GLAPIENTRY * PFNGLSELECTTEXTURECOORDSETSGISPROC) (GLenum target); +typedef void (GLAPIENTRY * PFNGLSELECTTEXTURESGISPROC) (GLenum target); +typedef void (GLAPIENTRY * PFNGLSELECTTEXTURETRANSFORMSGISPROC) (GLenum target); + +#define glInterleavedTextureCoordSetsSGIS GLEW_GET_FUN(__glewInterleavedTextureCoordSetsSGIS) +#define glSelectTextureCoordSetSGIS GLEW_GET_FUN(__glewSelectTextureCoordSetSGIS) +#define glSelectTextureSGIS GLEW_GET_FUN(__glewSelectTextureSGIS) +#define glSelectTextureTransformSGIS GLEW_GET_FUN(__glewSelectTextureTransformSGIS) + +#define GLEW_SGIS_multitexture GLEW_GET_VAR(__GLEW_SGIS_multitexture) + +#endif /* GL_SGIS_multitexture */ + /* ------------------------- GL_SGIS_pixel_texture ------------------------- */ #ifndef GL_SGIS_pixel_texture @@ -15852,6 +18230,19 @@ typedef void (GLAPIENTRY * PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); #endif /* GL_SGIS_point_line_texgen */ +/* ----------------------- GL_SGIS_shared_multisample ---------------------- */ + +#ifndef GL_SGIS_shared_multisample +#define GL_SGIS_shared_multisample 1 + +typedef void (GLAPIENTRY * PFNGLMULTISAMPLESUBRECTPOSSGISPROC) (GLint x, GLint y); + +#define glMultisampleSubRectPosSGIS GLEW_GET_FUN(__glewMultisampleSubRectPosSGIS) + +#define GLEW_SGIS_shared_multisample GLEW_GET_VAR(__GLEW_SGIS_shared_multisample) + +#endif /* GL_SGIS_shared_multisample */ + /* ------------------------ GL_SGIS_sharpen_texture ------------------------ */ #ifndef GL_SGIS_sharpen_texture @@ -15995,6 +18386,42 @@ typedef GLint (GLAPIENTRY * PFNGLPOLLASYNCSGIXPROC) (GLuint* markerp); #endif /* GL_SGIX_async_pixel */ +/* ----------------------- GL_SGIX_bali_g_instruments ---------------------- */ + +#ifndef GL_SGIX_bali_g_instruments +#define GL_SGIX_bali_g_instruments 1 + +#define GL_BALI_NUM_TRIS_CULLED_INSTRUMENT 0x6080 +#define GL_BALI_NUM_PRIMS_CLIPPED_INSTRUMENT 0x6081 +#define GL_BALI_NUM_PRIMS_REJECT_INSTRUMENT 0x6082 +#define GL_BALI_NUM_PRIMS_CLIP_RESULT_INSTRUMENT 0x6083 + +#define GLEW_SGIX_bali_g_instruments GLEW_GET_VAR(__GLEW_SGIX_bali_g_instruments) + +#endif /* GL_SGIX_bali_g_instruments */ + +/* ----------------------- GL_SGIX_bali_r_instruments ---------------------- */ + +#ifndef GL_SGIX_bali_r_instruments +#define GL_SGIX_bali_r_instruments 1 + +#define GL_BALI_FRAGMENTS_GENERATED_INSTRUMENT 0x6090 +#define GL_BALI_DEPTH_PASS_INSTRUMENT 0x6091 +#define GL_BALI_R_CHIP_COUNT 0x6092 + +#define GLEW_SGIX_bali_r_instruments GLEW_GET_VAR(__GLEW_SGIX_bali_r_instruments) + +#endif /* GL_SGIX_bali_r_instruments */ + +/* --------------------- GL_SGIX_bali_timer_instruments -------------------- */ + +#ifndef GL_SGIX_bali_timer_instruments +#define GL_SGIX_bali_timer_instruments 1 + +#define GLEW_SGIX_bali_timer_instruments GLEW_GET_VAR(__GLEW_SGIX_bali_timer_instruments) + +#endif /* GL_SGIX_bali_timer_instruments */ + /* ----------------------- GL_SGIX_blend_alpha_minmax ---------------------- */ #ifndef GL_SGIX_blend_alpha_minmax @@ -16007,6 +18434,37 @@ typedef GLint (GLAPIENTRY * PFNGLPOLLASYNCSGIXPROC) (GLuint* markerp); #endif /* GL_SGIX_blend_alpha_minmax */ +/* --------------------------- GL_SGIX_blend_cadd -------------------------- */ + +#ifndef GL_SGIX_blend_cadd +#define GL_SGIX_blend_cadd 1 + +#define GL_FUNC_COMPLEX_ADD_EXT 0x601C + +#define GLEW_SGIX_blend_cadd GLEW_GET_VAR(__GLEW_SGIX_blend_cadd) + +#endif /* GL_SGIX_blend_cadd */ + +/* ------------------------ GL_SGIX_blend_cmultiply ------------------------ */ + +#ifndef GL_SGIX_blend_cmultiply +#define GL_SGIX_blend_cmultiply 1 + +#define GL_FUNC_COMPLEX_MULTIPLY_EXT 0x601B + +#define GLEW_SGIX_blend_cmultiply GLEW_GET_VAR(__GLEW_SGIX_blend_cmultiply) + +#endif /* GL_SGIX_blend_cmultiply */ + +/* --------------------- GL_SGIX_calligraphic_fragment --------------------- */ + +#ifndef GL_SGIX_calligraphic_fragment +#define GL_SGIX_calligraphic_fragment 1 + +#define GLEW_SGIX_calligraphic_fragment GLEW_GET_VAR(__GLEW_SGIX_calligraphic_fragment) + +#endif /* GL_SGIX_calligraphic_fragment */ + /* ---------------------------- GL_SGIX_clipmap ---------------------------- */ #ifndef GL_SGIX_clipmap @@ -16016,6 +18474,35 @@ typedef GLint (GLAPIENTRY * PFNGLPOLLASYNCSGIXPROC) (GLuint* markerp); #endif /* GL_SGIX_clipmap */ +/* --------------------- GL_SGIX_color_matrix_accuracy --------------------- */ + +#ifndef GL_SGIX_color_matrix_accuracy +#define GL_SGIX_color_matrix_accuracy 1 + +#define GL_COLOR_MATRIX_HINT 0x8317 + +#define GLEW_SGIX_color_matrix_accuracy GLEW_GET_VAR(__GLEW_SGIX_color_matrix_accuracy) + +#endif /* GL_SGIX_color_matrix_accuracy */ + +/* --------------------- GL_SGIX_color_table_index_mode -------------------- */ + +#ifndef GL_SGIX_color_table_index_mode +#define GL_SGIX_color_table_index_mode 1 + +#define GLEW_SGIX_color_table_index_mode GLEW_GET_VAR(__GLEW_SGIX_color_table_index_mode) + +#endif /* GL_SGIX_color_table_index_mode */ + +/* ------------------------- GL_SGIX_complex_polar ------------------------- */ + +#ifndef GL_SGIX_complex_polar +#define GL_SGIX_complex_polar 1 + +#define GLEW_SGIX_complex_polar GLEW_GET_VAR(__GLEW_SGIX_complex_polar) + +#endif /* GL_SGIX_complex_polar */ + /* ---------------------- GL_SGIX_convolution_accuracy --------------------- */ #ifndef GL_SGIX_convolution_accuracy @@ -16027,6 +18514,74 @@ typedef GLint (GLAPIENTRY * PFNGLPOLLASYNCSGIXPROC) (GLuint* markerp); #endif /* GL_SGIX_convolution_accuracy */ +/* ---------------------------- GL_SGIX_cube_map --------------------------- */ + +#ifndef GL_SGIX_cube_map +#define GL_SGIX_cube_map 1 + +#define GL_ENV_MAP_SGIX 0x8340 +#define GL_CUBE_MAP_SGIX 0x8341 +#define GL_CUBE_MAP_ZP_SGIX 0x8342 +#define GL_CUBE_MAP_ZN_SGIX 0x8343 +#define GL_CUBE_MAP_XN_SGIX 0x8344 +#define GL_CUBE_MAP_XP_SGIX 0x8345 +#define GL_CUBE_MAP_YN_SGIX 0x8346 +#define GL_CUBE_MAP_YP_SGIX 0x8347 +#define GL_CUBE_MAP_BINDING_SGIX 0x8348 + +#define GLEW_SGIX_cube_map GLEW_GET_VAR(__GLEW_SGIX_cube_map) + +#endif /* GL_SGIX_cube_map */ + +/* ------------------------ GL_SGIX_cylinder_texgen ------------------------ */ + +#ifndef GL_SGIX_cylinder_texgen +#define GL_SGIX_cylinder_texgen 1 + +#define GLEW_SGIX_cylinder_texgen GLEW_GET_VAR(__GLEW_SGIX_cylinder_texgen) + +#endif /* GL_SGIX_cylinder_texgen */ + +/* ---------------------------- GL_SGIX_datapipe --------------------------- */ + +#ifndef GL_SGIX_datapipe +#define GL_SGIX_datapipe 1 + +#define GL_GEOMETRY_BIT 0x1 +#define GL_IMAGE_BIT 0x2 + +typedef void (GLAPIENTRY * PFNGLADDRESSSPACEPROC) (GLenum space, GLbitfield mask); +typedef GLint (GLAPIENTRY * PFNGLDATAPIPEPROC) (GLenum space); + +#define glAddressSpace GLEW_GET_FUN(__glewAddressSpace) +#define glDataPipe GLEW_GET_FUN(__glewDataPipe) + +#define GLEW_SGIX_datapipe GLEW_GET_VAR(__GLEW_SGIX_datapipe) + +#endif /* GL_SGIX_datapipe */ + +/* --------------------------- GL_SGIX_decimation -------------------------- */ + +#ifndef GL_SGIX_decimation +#define GL_SGIX_decimation 1 + +#define GLEW_SGIX_decimation GLEW_GET_VAR(__GLEW_SGIX_decimation) + +#endif /* GL_SGIX_decimation */ + +/* --------------------- GL_SGIX_depth_pass_instrument --------------------- */ + +#ifndef GL_SGIX_depth_pass_instrument +#define GL_SGIX_depth_pass_instrument 1 + +#define GL_DEPTH_PASS_INSTRUMENT_SGIX 0x8310 +#define GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX 0x8311 +#define GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX 0x8312 + +#define GLEW_SGIX_depth_pass_instrument GLEW_GET_VAR(__GLEW_SGIX_depth_pass_instrument) + +#endif /* GL_SGIX_depth_pass_instrument */ + /* ------------------------- GL_SGIX_depth_texture ------------------------- */ #ifndef GL_SGIX_depth_texture @@ -16040,6 +18595,15 @@ typedef GLint (GLAPIENTRY * PFNGLPOLLASYNCSGIXPROC) (GLuint* markerp); #endif /* GL_SGIX_depth_texture */ +/* ------------------------------ GL_SGIX_dvc ------------------------------ */ + +#ifndef GL_SGIX_dvc +#define GL_SGIX_dvc 1 + +#define GLEW_SGIX_dvc GLEW_GET_VAR(__GLEW_SGIX_dvc) + +#endif /* GL_SGIX_dvc */ + /* -------------------------- GL_SGIX_flush_raster ------------------------- */ #ifndef GL_SGIX_flush_raster @@ -16053,6 +18617,49 @@ typedef void (GLAPIENTRY * PFNGLFLUSHRASTERSGIXPROC) (void); #endif /* GL_SGIX_flush_raster */ +/* --------------------------- GL_SGIX_fog_blend --------------------------- */ + +#ifndef GL_SGIX_fog_blend +#define GL_SGIX_fog_blend 1 + +#define GL_FOG_BLEND_ALPHA_SGIX 0x81FE +#define GL_FOG_BLEND_COLOR_SGIX 0x81FF + +#define GLEW_SGIX_fog_blend GLEW_GET_VAR(__GLEW_SGIX_fog_blend) + +#endif /* GL_SGIX_fog_blend */ + +/* ---------------------- GL_SGIX_fog_factor_to_alpha ---------------------- */ + +#ifndef GL_SGIX_fog_factor_to_alpha +#define GL_SGIX_fog_factor_to_alpha 1 + +#define GLEW_SGIX_fog_factor_to_alpha GLEW_GET_VAR(__GLEW_SGIX_fog_factor_to_alpha) + +#endif /* GL_SGIX_fog_factor_to_alpha */ + +/* --------------------------- GL_SGIX_fog_layers -------------------------- */ + +#ifndef GL_SGIX_fog_layers +#define GL_SGIX_fog_layers 1 + +#define GL_FOG_TYPE_SGIX 0x8323 +#define GL_UNIFORM_SGIX 0x8324 +#define GL_LAYERED_SGIX 0x8325 +#define GL_FOG_GROUND_PLANE_SGIX 0x8326 +#define GL_FOG_LAYERS_POINTS_SGIX 0x8327 +#define GL_MAX_FOG_LAYERS_POINTS_SGIX 0x8328 + +typedef void (GLAPIENTRY * PFNGLFOGLAYERSSGIXPROC) (GLsizei n, const GLfloat* points); +typedef void (GLAPIENTRY * PFNGLGETFOGLAYERSSGIXPROC) (GLfloat* points); + +#define glFogLayersSGIX GLEW_GET_FUN(__glewFogLayersSGIX) +#define glGetFogLayersSGIX GLEW_GET_FUN(__glewGetFogLayersSGIX) + +#define GLEW_SGIX_fog_layers GLEW_GET_VAR(__GLEW_SGIX_fog_layers) + +#endif /* GL_SGIX_fog_layers */ + /* --------------------------- GL_SGIX_fog_offset -------------------------- */ #ifndef GL_SGIX_fog_offset @@ -16065,6 +18672,27 @@ typedef void (GLAPIENTRY * PFNGLFLUSHRASTERSGIXPROC) (void); #endif /* GL_SGIX_fog_offset */ +/* --------------------------- GL_SGIX_fog_patchy -------------------------- */ + +#ifndef GL_SGIX_fog_patchy +#define GL_SGIX_fog_patchy 1 + +#define GLEW_SGIX_fog_patchy GLEW_GET_VAR(__GLEW_SGIX_fog_patchy) + +#endif /* GL_SGIX_fog_patchy */ + +/* --------------------------- GL_SGIX_fog_scale --------------------------- */ + +#ifndef GL_SGIX_fog_scale +#define GL_SGIX_fog_scale 1 + +#define GL_FOG_SCALE_SGIX 0x81FC +#define GL_FOG_SCALE_VALUE_SGIX 0x81FD + +#define GLEW_SGIX_fog_scale GLEW_GET_VAR(__GLEW_SGIX_fog_scale) + +#endif /* GL_SGIX_fog_scale */ + /* -------------------------- GL_SGIX_fog_texture -------------------------- */ #ifndef GL_SGIX_fog_texture @@ -16078,6 +18706,20 @@ typedef void (GLAPIENTRY * PFNGLTEXTUREFOGSGIXPROC) (GLenum pname); #endif /* GL_SGIX_fog_texture */ +/* -------------------- GL_SGIX_fragment_lighting_space -------------------- */ + +#ifndef GL_SGIX_fragment_lighting_space +#define GL_SGIX_fragment_lighting_space 1 + +#define GL_EYE_SPACE_SGIX 0x8436 +#define GL_TANGENT_SPACE_SGIX 0x8437 +#define GL_OBJECT_SPACE_SGIX 0x8438 +#define GL_FRAGMENT_LIGHT_SPACE_SGIX 0x843D + +#define GLEW_SGIX_fragment_lighting_space GLEW_GET_VAR(__GLEW_SGIX_fragment_lighting_space) + +#endif /* GL_SGIX_fragment_lighting_space */ + /* ------------------- GL_SGIX_fragment_specular_lighting ------------------ */ #ifndef GL_SGIX_fragment_specular_lighting @@ -16123,6 +18765,19 @@ typedef void (GLAPIENTRY * PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLe #endif /* GL_SGIX_fragment_specular_lighting */ +/* ---------------------- GL_SGIX_fragments_instrument --------------------- */ + +#ifndef GL_SGIX_fragments_instrument +#define GL_SGIX_fragments_instrument 1 + +#define GL_FRAGMENTS_INSTRUMENT_SGIX 0x8313 +#define GL_FRAGMENTS_INSTRUMENT_COUNTERS_SGIX 0x8314 +#define GL_FRAGMENTS_INSTRUMENT_MAX_SGIX 0x8315 + +#define GLEW_SGIX_fragments_instrument GLEW_GET_VAR(__GLEW_SGIX_fragments_instrument) + +#endif /* GL_SGIX_fragments_instrument */ + /* --------------------------- GL_SGIX_framezoom --------------------------- */ #ifndef GL_SGIX_framezoom @@ -16136,6 +18791,77 @@ typedef void (GLAPIENTRY * PFNGLFRAMEZOOMSGIXPROC) (GLint factor); #endif /* GL_SGIX_framezoom */ +/* -------------------------- GL_SGIX_icc_texture -------------------------- */ + +#ifndef GL_SGIX_icc_texture +#define GL_SGIX_icc_texture 1 + +#define GL_RGB_ICC_SGIX 0x8460 +#define GL_RGBA_ICC_SGIX 0x8461 +#define GL_ALPHA_ICC_SGIX 0x8462 +#define GL_LUMINANCE_ICC_SGIX 0x8463 +#define GL_INTENSITY_ICC_SGIX 0x8464 +#define GL_LUMINANCE_ALPHA_ICC_SGIX 0x8465 +#define GL_R5_G6_B5_ICC_SGIX 0x8466 +#define GL_R5_G6_B5_A8_ICC_SGIX 0x8467 +#define GL_ALPHA16_ICC_SGIX 0x8468 +#define GL_LUMINANCE16_ICC_SGIX 0x8469 +#define GL_INTENSITY16_ICC_SGIX 0x846A +#define GL_LUMINANCE16_ALPHA8_ICC_SGIX 0x846B + +#define GLEW_SGIX_icc_texture GLEW_GET_VAR(__GLEW_SGIX_icc_texture) + +#endif /* GL_SGIX_icc_texture */ + +/* ------------------------ GL_SGIX_igloo_interface ------------------------ */ + +#ifndef GL_SGIX_igloo_interface +#define GL_SGIX_igloo_interface 1 + +#define GL_IGLOO_FULLSCREEN_SGIX 0x819E +#define GL_IGLOO_VIEWPORT_OFFSET_SGIX 0x819F +#define GL_IGLOO_SWAPTMESH_SGIX 0x81A0 +#define GL_IGLOO_COLORNORMAL_SGIX 0x81A1 +#define GL_IGLOO_IRISGL_MODE_SGIX 0x81A2 +#define GL_IGLOO_LMC_COLOR_SGIX 0x81A3 +#define GL_IGLOO_TMESHMODE_SGIX 0x81A4 +#define GL_LIGHT31 0xBEAD + +typedef void (GLAPIENTRY * PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, void *param); + +#define glIglooInterfaceSGIX GLEW_GET_FUN(__glewIglooInterfaceSGIX) + +#define GLEW_SGIX_igloo_interface GLEW_GET_VAR(__GLEW_SGIX_igloo_interface) + +#endif /* GL_SGIX_igloo_interface */ + +/* ----------------------- GL_SGIX_image_compression ----------------------- */ + +#ifndef GL_SGIX_image_compression +#define GL_SGIX_image_compression 1 + +#define GLEW_SGIX_image_compression GLEW_GET_VAR(__GLEW_SGIX_image_compression) + +#endif /* GL_SGIX_image_compression */ + +/* ---------------------- GL_SGIX_impact_pixel_texture --------------------- */ + +#ifndef GL_SGIX_impact_pixel_texture +#define GL_SGIX_impact_pixel_texture 1 + +#define GLEW_SGIX_impact_pixel_texture GLEW_GET_VAR(__GLEW_SGIX_impact_pixel_texture) + +#endif /* GL_SGIX_impact_pixel_texture */ + +/* ------------------------ GL_SGIX_instrument_error ----------------------- */ + +#ifndef GL_SGIX_instrument_error +#define GL_SGIX_instrument_error 1 + +#define GLEW_SGIX_instrument_error GLEW_GET_VAR(__GLEW_SGIX_instrument_error) + +#endif /* GL_SGIX_instrument_error */ + /* --------------------------- GL_SGIX_interlace --------------------------- */ #ifndef GL_SGIX_interlace @@ -16156,6 +18882,17 @@ typedef void (GLAPIENTRY * PFNGLFRAMEZOOMSGIXPROC) (GLint factor); #endif /* GL_SGIX_ir_instrument1 */ +/* ----------------------- GL_SGIX_line_quality_hint ----------------------- */ + +#ifndef GL_SGIX_line_quality_hint +#define GL_SGIX_line_quality_hint 1 + +#define GL_LINE_QUALITY_HINT_SGIX 0x835B + +#define GLEW_SGIX_line_quality_hint GLEW_GET_VAR(__GLEW_SGIX_line_quality_hint) + +#endif /* GL_SGIX_line_quality_hint */ + /* ------------------------- GL_SGIX_list_priority ------------------------- */ #ifndef GL_SGIX_list_priority @@ -16165,6 +18902,117 @@ typedef void (GLAPIENTRY * PFNGLFRAMEZOOMSGIXPROC) (GLint factor); #endif /* GL_SGIX_list_priority */ +/* ----------------------------- GL_SGIX_mpeg1 ----------------------------- */ + +#ifndef GL_SGIX_mpeg1 +#define GL_SGIX_mpeg1 1 + +typedef void (GLAPIENTRY * PFNGLALLOCMPEGPREDICTORSSGIXPROC) (GLsizei width, GLsizei height, GLsizei n, GLuint* predictors); +typedef void (GLAPIENTRY * PFNGLDELETEMPEGPREDICTORSSGIXPROC) (GLsizei n, GLuint* predictors); +typedef void (GLAPIENTRY * PFNGLGENMPEGPREDICTORSSGIXPROC) (GLsizei n, GLuint* predictors); +typedef void (GLAPIENTRY * PFNGLGETMPEGPARAMETERFVSGIXPROC) (GLenum target, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETMPEGPARAMETERIVSGIXPROC) (GLenum target, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLGETMPEGPREDICTORSGIXPROC) (GLenum target, GLenum format, GLenum type, void *pixels); +typedef void (GLAPIENTRY * PFNGLGETMPEGQUANTTABLEUBVPROC) (GLenum target, GLubyte* values); +typedef GLboolean (GLAPIENTRY * PFNGLISMPEGPREDICTORSGIXPROC) (GLuint predictor); +typedef void (GLAPIENTRY * PFNGLMPEGPREDICTORSGIXPROC) (GLenum target, GLenum format, GLenum type, void *pixels); +typedef void (GLAPIENTRY * PFNGLMPEGQUANTTABLEUBVPROC) (GLenum target, GLubyte* values); +typedef void (GLAPIENTRY * PFNGLSWAPMPEGPREDICTORSSGIXPROC) (GLenum target0, GLenum target1); + +#define glAllocMPEGPredictorsSGIX GLEW_GET_FUN(__glewAllocMPEGPredictorsSGIX) +#define glDeleteMPEGPredictorsSGIX GLEW_GET_FUN(__glewDeleteMPEGPredictorsSGIX) +#define glGenMPEGPredictorsSGIX GLEW_GET_FUN(__glewGenMPEGPredictorsSGIX) +#define glGetMPEGParameterfvSGIX GLEW_GET_FUN(__glewGetMPEGParameterfvSGIX) +#define glGetMPEGParameterivSGIX GLEW_GET_FUN(__glewGetMPEGParameterivSGIX) +#define glGetMPEGPredictorSGIX GLEW_GET_FUN(__glewGetMPEGPredictorSGIX) +#define glGetMPEGQuantTableubv GLEW_GET_FUN(__glewGetMPEGQuantTableubv) +#define glIsMPEGPredictorSGIX GLEW_GET_FUN(__glewIsMPEGPredictorSGIX) +#define glMPEGPredictorSGIX GLEW_GET_FUN(__glewMPEGPredictorSGIX) +#define glMPEGQuantTableubv GLEW_GET_FUN(__glewMPEGQuantTableubv) +#define glSwapMPEGPredictorsSGIX GLEW_GET_FUN(__glewSwapMPEGPredictorsSGIX) + +#define GLEW_SGIX_mpeg1 GLEW_GET_VAR(__GLEW_SGIX_mpeg1) + +#endif /* GL_SGIX_mpeg1 */ + +/* ----------------------------- GL_SGIX_mpeg2 ----------------------------- */ + +#ifndef GL_SGIX_mpeg2 +#define GL_SGIX_mpeg2 1 + +#define GLEW_SGIX_mpeg2 GLEW_GET_VAR(__GLEW_SGIX_mpeg2) + +#endif /* GL_SGIX_mpeg2 */ + +/* ------------------ GL_SGIX_nonlinear_lighting_pervertex ----------------- */ + +#ifndef GL_SGIX_nonlinear_lighting_pervertex +#define GL_SGIX_nonlinear_lighting_pervertex 1 + +typedef void (GLAPIENTRY * PFNGLGETNONLINLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLint* terms, GLfloat *data); +typedef void (GLAPIENTRY * PFNGLGETNONLINMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLint* terms, const GLfloat *data); +typedef void (GLAPIENTRY * PFNGLNONLINLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLint terms, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLNONLINMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLint terms, const GLfloat* params); + +#define glGetNonlinLightfvSGIX GLEW_GET_FUN(__glewGetNonlinLightfvSGIX) +#define glGetNonlinMaterialfvSGIX GLEW_GET_FUN(__glewGetNonlinMaterialfvSGIX) +#define glNonlinLightfvSGIX GLEW_GET_FUN(__glewNonlinLightfvSGIX) +#define glNonlinMaterialfvSGIX GLEW_GET_FUN(__glewNonlinMaterialfvSGIX) + +#define GLEW_SGIX_nonlinear_lighting_pervertex GLEW_GET_VAR(__GLEW_SGIX_nonlinear_lighting_pervertex) + +#endif /* GL_SGIX_nonlinear_lighting_pervertex */ + +/* --------------------------- GL_SGIX_nurbs_eval -------------------------- */ + +#ifndef GL_SGIX_nurbs_eval +#define GL_SGIX_nurbs_eval 1 + +#define GL_MAP1_VERTEX_3_NURBS_SGIX 0x81CB +#define GL_MAP1_VERTEX_4_NURBS_SGIX 0x81CC +#define GL_MAP1_INDEX_NURBS_SGIX 0x81CD +#define GL_MAP1_COLOR_4_NURBS_SGIX 0x81CE +#define GL_MAP1_NORMAL_NURBS_SGIX 0x81CF +#define GL_MAP1_TEXTURE_COORD_1_NURBS_SGIX 0x81E0 +#define GL_MAP1_TEXTURE_COORD_2_NURBS_SGIX 0x81E1 +#define GL_MAP1_TEXTURE_COORD_3_NURBS_SGIX 0x81E2 +#define GL_MAP1_TEXTURE_COORD_4_NURBS_SGIX 0x81E3 +#define GL_MAP2_VERTEX_3_NURBS_SGIX 0x81E4 +#define GL_MAP2_VERTEX_4_NURBS_SGIX 0x81E5 +#define GL_MAP2_INDEX_NURBS_SGIX 0x81E6 +#define GL_MAP2_COLOR_4_NURBS_SGIX 0x81E7 +#define GL_MAP2_NORMAL_NURBS_SGIX 0x81E8 +#define GL_MAP2_TEXTURE_COORD_1_NURBS_SGIX 0x81E9 +#define GL_MAP2_TEXTURE_COORD_2_NURBS_SGIX 0x81EA +#define GL_MAP2_TEXTURE_COORD_3_NURBS_SGIX 0x81EB +#define GL_MAP2_TEXTURE_COORD_4_NURBS_SGIX 0x81EC +#define GL_NURBS_KNOT_COUNT_SGIX 0x81ED +#define GL_NURBS_KNOT_VECTOR_SGIX 0x81EE + +#define GLEW_SGIX_nurbs_eval GLEW_GET_VAR(__GLEW_SGIX_nurbs_eval) + +#endif /* GL_SGIX_nurbs_eval */ + +/* ---------------------- GL_SGIX_occlusion_instrument --------------------- */ + +#ifndef GL_SGIX_occlusion_instrument +#define GL_SGIX_occlusion_instrument 1 + +#define GL_OCCLUSION_INSTRUMENT_SGIX 0x6060 + +#define GLEW_SGIX_occlusion_instrument GLEW_GET_VAR(__GLEW_SGIX_occlusion_instrument) + +#endif /* GL_SGIX_occlusion_instrument */ + +/* ------------------------- GL_SGIX_packed_6bytes ------------------------- */ + +#ifndef GL_SGIX_packed_6bytes +#define GL_SGIX_packed_6bytes 1 + +#define GLEW_SGIX_packed_6bytes GLEW_GET_VAR(__GLEW_SGIX_packed_6bytes) + +#endif /* GL_SGIX_packed_6bytes */ + /* ------------------------- GL_SGIX_pixel_texture ------------------------- */ #ifndef GL_SGIX_pixel_texture @@ -16187,6 +19035,57 @@ typedef void (GLAPIENTRY * PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); #endif /* GL_SGIX_pixel_texture_bits */ +/* ----------------------- GL_SGIX_pixel_texture_lod ----------------------- */ + +#ifndef GL_SGIX_pixel_texture_lod +#define GL_SGIX_pixel_texture_lod 1 + +#define GLEW_SGIX_pixel_texture_lod GLEW_GET_VAR(__GLEW_SGIX_pixel_texture_lod) + +#endif /* GL_SGIX_pixel_texture_lod */ + +/* -------------------------- GL_SGIX_pixel_tiles -------------------------- */ + +#ifndef GL_SGIX_pixel_tiles +#define GL_SGIX_pixel_tiles 1 + +#define GLEW_SGIX_pixel_tiles GLEW_GET_VAR(__GLEW_SGIX_pixel_tiles) + +#endif /* GL_SGIX_pixel_tiles */ + +/* ------------------------- GL_SGIX_polynomial_ffd ------------------------ */ + +#ifndef GL_SGIX_polynomial_ffd +#define GL_SGIX_polynomial_ffd 1 + +#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x1 +#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x2 + +typedef void (GLAPIENTRY * PFNGLDEFORMSGIXPROC) (GLbitfield mask); +typedef void (GLAPIENTRY * PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask); + +#define glDeformSGIX GLEW_GET_FUN(__glewDeformSGIX) +#define glLoadIdentityDeformationMapSGIX GLEW_GET_FUN(__glewLoadIdentityDeformationMapSGIX) + +#define GLEW_SGIX_polynomial_ffd GLEW_GET_VAR(__GLEW_SGIX_polynomial_ffd) + +#endif /* GL_SGIX_polynomial_ffd */ + +/* --------------------------- GL_SGIX_quad_mesh --------------------------- */ + +#ifndef GL_SGIX_quad_mesh +#define GL_SGIX_quad_mesh 1 + +typedef void (GLAPIENTRY * PFNGLMESHBREADTHSGIXPROC) (GLint breadth); +typedef void (GLAPIENTRY * PFNGLMESHSTRIDESGIXPROC) (GLint stride); + +#define glMeshBreadthSGIX GLEW_GET_FUN(__glewMeshBreadthSGIX) +#define glMeshStrideSGIX GLEW_GET_FUN(__glewMeshStrideSGIX) + +#define GLEW_SGIX_quad_mesh GLEW_GET_VAR(__GLEW_SGIX_quad_mesh) + +#endif /* GL_SGIX_quad_mesh */ + /* ------------------------ GL_SGIX_reference_plane ------------------------ */ #ifndef GL_SGIX_reference_plane @@ -16215,6 +19114,17 @@ typedef void (GLAPIENTRY * PFNGLREFERENCEPLANESGIXPROC) (const GLdouble* equatio #endif /* GL_SGIX_resample */ +/* ------------------------- GL_SGIX_scalebias_hint ------------------------ */ + +#ifndef GL_SGIX_scalebias_hint +#define GL_SGIX_scalebias_hint 1 + +#define GL_SCALEBIAS_HINT_SGIX 0x8322 + +#define GLEW_SGIX_scalebias_hint GLEW_GET_VAR(__GLEW_SGIX_scalebias_hint) + +#endif /* GL_SGIX_scalebias_hint */ + /* ----------------------------- GL_SGIX_shadow ---------------------------- */ #ifndef GL_SGIX_shadow @@ -16240,6 +19150,31 @@ typedef void (GLAPIENTRY * PFNGLREFERENCEPLANESGIXPROC) (const GLdouble* equatio #endif /* GL_SGIX_shadow_ambient */ +/* ------------------------------ GL_SGIX_slim ----------------------------- */ + +#ifndef GL_SGIX_slim +#define GL_SGIX_slim 1 + +#define GL_PACK_MAX_COMPRESSED_SIZE_SGIX 0x831B +#define GL_SLIM8U_SGIX 0x831D +#define GL_SLIM10U_SGIX 0x831E +#define GL_SLIM12S_SGIX 0x831F + +#define GLEW_SGIX_slim GLEW_GET_VAR(__GLEW_SGIX_slim) + +#endif /* GL_SGIX_slim */ + +/* ------------------------ GL_SGIX_spotlight_cutoff ----------------------- */ + +#ifndef GL_SGIX_spotlight_cutoff +#define GL_SGIX_spotlight_cutoff 1 + +#define GL_SPOT_CUTOFF_DELTA_SGIX 0x8193 + +#define GLEW_SGIX_spotlight_cutoff GLEW_GET_VAR(__GLEW_SGIX_spotlight_cutoff) + +#endif /* GL_SGIX_spotlight_cutoff */ + /* ----------------------------- GL_SGIX_sprite ---------------------------- */ #ifndef GL_SGIX_sprite @@ -16259,6 +19194,30 @@ typedef void (GLAPIENTRY * PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, GLint* #endif /* GL_SGIX_sprite */ +/* -------------------------- GL_SGIX_subdiv_patch ------------------------- */ + +#ifndef GL_SGIX_subdiv_patch +#define GL_SGIX_subdiv_patch 1 + +#define GLEW_SGIX_subdiv_patch GLEW_GET_VAR(__GLEW_SGIX_subdiv_patch) + +#endif /* GL_SGIX_subdiv_patch */ + +/* --------------------------- GL_SGIX_subsample --------------------------- */ + +#ifndef GL_SGIX_subsample +#define GL_SGIX_subsample 1 + +#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 +#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 +#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 +#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 +#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 + +#define GLEW_SGIX_subsample GLEW_GET_VAR(__GLEW_SGIX_subsample) + +#endif /* GL_SGIX_subsample */ + /* ----------------------- GL_SGIX_tag_sample_buffer ----------------------- */ #ifndef GL_SGIX_tag_sample_buffer @@ -16303,6 +19262,18 @@ typedef void (GLAPIENTRY * PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); #endif /* GL_SGIX_texture_lod_bias */ +/* ------------------- GL_SGIX_texture_mipmap_anisotropic ------------------ */ + +#ifndef GL_SGIX_texture_mipmap_anisotropic +#define GL_SGIX_texture_mipmap_anisotropic 1 + +#define GL_TEXTURE_MIPMAP_ANISOTROPY_SGIX 0x832E +#define GL_MAX_MIPMAP_ANISOTROPY_SGIX 0x832F + +#define GLEW_SGIX_texture_mipmap_anisotropic GLEW_GET_VAR(__GLEW_SGIX_texture_mipmap_anisotropic) + +#endif /* GL_SGIX_texture_mipmap_anisotropic */ + /* ---------------------- GL_SGIX_texture_multi_buffer --------------------- */ #ifndef GL_SGIX_texture_multi_buffer @@ -16314,6 +19285,17 @@ typedef void (GLAPIENTRY * PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); #endif /* GL_SGIX_texture_multi_buffer */ +/* ------------------------- GL_SGIX_texture_phase ------------------------- */ + +#ifndef GL_SGIX_texture_phase +#define GL_SGIX_texture_phase 1 + +#define GL_PHASE_SGIX 0x832A + +#define GLEW_SGIX_texture_phase GLEW_GET_VAR(__GLEW_SGIX_texture_phase) + +#endif /* GL_SGIX_texture_phase */ + /* ------------------------- GL_SGIX_texture_range ------------------------- */ #ifndef GL_SGIX_texture_range @@ -16366,6 +19348,53 @@ typedef void (GLAPIENTRY * PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); #endif /* GL_SGIX_texture_scale_bias */ +/* ---------------------- GL_SGIX_texture_supersample ---------------------- */ + +#ifndef GL_SGIX_texture_supersample +#define GL_SGIX_texture_supersample 1 + +#define GLEW_SGIX_texture_supersample GLEW_GET_VAR(__GLEW_SGIX_texture_supersample) + +#endif /* GL_SGIX_texture_supersample */ + +/* --------------------------- GL_SGIX_vector_ops -------------------------- */ + +#ifndef GL_SGIX_vector_ops +#define GL_SGIX_vector_ops 1 + +typedef void (GLAPIENTRY * PFNGLGETVECTOROPERATIONSGIXPROC) (GLenum operation); +typedef void (GLAPIENTRY * PFNGLVECTOROPERATIONSGIXPROC) (GLenum operation); + +#define glGetVectorOperationSGIX GLEW_GET_FUN(__glewGetVectorOperationSGIX) +#define glVectorOperationSGIX GLEW_GET_FUN(__glewVectorOperationSGIX) + +#define GLEW_SGIX_vector_ops GLEW_GET_VAR(__GLEW_SGIX_vector_ops) + +#endif /* GL_SGIX_vector_ops */ + +/* ---------------------- GL_SGIX_vertex_array_object ---------------------- */ + +#ifndef GL_SGIX_vertex_array_object +#define GL_SGIX_vertex_array_object 1 + +typedef GLboolean (GLAPIENTRY * PFNGLAREVERTEXARRAYSRESIDENTSGIXPROC) (GLsizei n, const GLuint* arrays, GLboolean* residences); +typedef void (GLAPIENTRY * PFNGLBINDVERTEXARRAYSGIXPROC) (GLuint array); +typedef void (GLAPIENTRY * PFNGLDELETEVERTEXARRAYSSGIXPROC) (GLsizei n, const GLuint* arrays); +typedef void (GLAPIENTRY * PFNGLGENVERTEXARRAYSSGIXPROC) (GLsizei n, GLuint* arrays); +typedef GLboolean (GLAPIENTRY * PFNGLISVERTEXARRAYSGIXPROC) (GLuint array); +typedef void (GLAPIENTRY * PFNGLPRIORITIZEVERTEXARRAYSSGIXPROC) (GLsizei n, const GLuint* arrays, const GLclampf* priorities); + +#define glAreVertexArraysResidentSGIX GLEW_GET_FUN(__glewAreVertexArraysResidentSGIX) +#define glBindVertexArraySGIX GLEW_GET_FUN(__glewBindVertexArraySGIX) +#define glDeleteVertexArraysSGIX GLEW_GET_FUN(__glewDeleteVertexArraysSGIX) +#define glGenVertexArraysSGIX GLEW_GET_FUN(__glewGenVertexArraysSGIX) +#define glIsVertexArraySGIX GLEW_GET_FUN(__glewIsVertexArraySGIX) +#define glPrioritizeVertexArraysSGIX GLEW_GET_FUN(__glewPrioritizeVertexArraysSGIX) + +#define GLEW_SGIX_vertex_array_object GLEW_GET_VAR(__GLEW_SGIX_vertex_array_object) + +#endif /* GL_SGIX_vertex_array_object */ + /* ------------------------- GL_SGIX_vertex_preclip ------------------------ */ #ifndef GL_SGIX_vertex_preclip @@ -16399,6 +19428,27 @@ typedef void (GLAPIENTRY * PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); #endif /* GL_SGIX_ycrcb */ +/* ------------------------ GL_SGIX_ycrcb_subsample ------------------------ */ + +#ifndef GL_SGIX_ycrcb_subsample +#define GL_SGIX_ycrcb_subsample 1 + +#define GLEW_SGIX_ycrcb_subsample GLEW_GET_VAR(__GLEW_SGIX_ycrcb_subsample) + +#endif /* GL_SGIX_ycrcb_subsample */ + +/* ----------------------------- GL_SGIX_ycrcba ---------------------------- */ + +#ifndef GL_SGIX_ycrcba +#define GL_SGIX_ycrcba 1 + +#define GL_YCRCB_SGIX 0x8318 +#define GL_YCRCBA_SGIX 0x8319 + +#define GLEW_SGIX_ycrcba GLEW_GET_VAR(__GLEW_SGIX_ycrcba) + +#endif /* GL_SGIX_ycrcba */ + /* -------------------------- GL_SGI_color_matrix -------------------------- */ #ifndef GL_SGI_color_matrix @@ -16462,6 +19512,63 @@ typedef void (GLAPIENTRY * PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum for #endif /* GL_SGI_color_table */ +/* ----------------------------- GL_SGI_complex ---------------------------- */ + +#ifndef GL_SGI_complex +#define GL_SGI_complex 1 + +#define GLEW_SGI_complex GLEW_GET_VAR(__GLEW_SGI_complex) + +#endif /* GL_SGI_complex */ + +/* -------------------------- GL_SGI_complex_type -------------------------- */ + +#ifndef GL_SGI_complex_type +#define GL_SGI_complex_type 1 + +#define GL_COMPLEX_UNSIGNED_BYTE_SGI 0x81BD +#define GL_COMPLEX_BYTE_SGI 0x81BE +#define GL_COMPLEX_UNSIGNED_SHORT_SGI 0x81BF +#define GL_COMPLEX_SHORT_SGI 0x81C0 +#define GL_COMPLEX_UNSIGNED_INT_SGI 0x81C1 +#define GL_COMPLEX_INT_SGI 0x81C2 +#define GL_COMPLEX_FLOAT_SGI 0x81C3 + +#define GLEW_SGI_complex_type GLEW_GET_VAR(__GLEW_SGI_complex_type) + +#endif /* GL_SGI_complex_type */ + +/* ------------------------------- GL_SGI_fft ------------------------------ */ + +#ifndef GL_SGI_fft +#define GL_SGI_fft 1 + +#define GL_PIXEL_TRANSFORM_OPERATOR_SGI 0x81C4 +#define GL_CONVOLUTION_SGI 0x81C5 +#define GL_FFT_1D_SGI 0x81C6 +#define GL_PIXEL_TRANSFORM_SGI 0x81C7 +#define GL_MAX_FFT_WIDTH_SGI 0x81C8 + +typedef void (GLAPIENTRY * PFNGLGETPIXELTRANSFORMPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat* params); +typedef void (GLAPIENTRY * PFNGLGETPIXELTRANSFORMPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint* params); +typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERFSGIPROC) (GLenum target, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat* params); +typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERISGIPROC) (GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint* params); +typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMSGIPROC) (GLenum target); + +#define glGetPixelTransformParameterfvSGI GLEW_GET_FUN(__glewGetPixelTransformParameterfvSGI) +#define glGetPixelTransformParameterivSGI GLEW_GET_FUN(__glewGetPixelTransformParameterivSGI) +#define glPixelTransformParameterfSGI GLEW_GET_FUN(__glewPixelTransformParameterfSGI) +#define glPixelTransformParameterfvSGI GLEW_GET_FUN(__glewPixelTransformParameterfvSGI) +#define glPixelTransformParameteriSGI GLEW_GET_FUN(__glewPixelTransformParameteriSGI) +#define glPixelTransformParameterivSGI GLEW_GET_FUN(__glewPixelTransformParameterivSGI) +#define glPixelTransformSGI GLEW_GET_FUN(__glewPixelTransformSGI) + +#define GLEW_SGI_fft GLEW_GET_VAR(__GLEW_SGI_fft) + +#endif /* GL_SGI_fft */ + /* ----------------------- GL_SGI_texture_color_table ---------------------- */ #ifndef GL_SGI_texture_color_table @@ -16713,6 +19820,15 @@ typedef void (GLAPIENTRY * PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat* tc, #endif /* GL_WIN_phong_shading */ +/* ------------------------- GL_WIN_scene_markerXXX ------------------------ */ + +#ifndef GL_WIN_scene_markerXXX +#define GL_WIN_scene_markerXXX 1 + +#define GLEW_WIN_scene_markerXXX GLEW_GET_VAR(__GLEW_WIN_scene_markerXXX) + +#endif /* GL_WIN_scene_markerXXX */ + /* -------------------------- GL_WIN_specular_fog -------------------------- */ #ifndef GL_WIN_specular_fog @@ -17040,6 +20156,10 @@ GLEW_FUN_EXPORT PFNGLGETNCOMPRESSEDTEXIMAGEPROC __glewGetnCompressedTexImage; GLEW_FUN_EXPORT PFNGLGETNTEXIMAGEPROC __glewGetnTexImage; GLEW_FUN_EXPORT PFNGLGETNUNIFORMDVPROC __glewGetnUniformdv; +GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC __glewMultiDrawArraysIndirectCount; +GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC __glewMultiDrawElementsIndirectCount; +GLEW_FUN_EXPORT PFNGLSPECIALIZESHADERPROC __glewSpecializeShader; + GLEW_FUN_EXPORT PFNGLTBUFFERMASK3DFXPROC __glewTbufferMask3DFX; GLEW_FUN_EXPORT PFNGLDEBUGMESSAGECALLBACKAMDPROC __glewDebugMessageCallbackAMD; @@ -17052,6 +20172,11 @@ GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC __glewBlendEquationSepa GLEW_FUN_EXPORT PFNGLBLENDFUNCINDEXEDAMDPROC __glewBlendFuncIndexedAMD; GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC __glewBlendFuncSeparateIndexedAMD; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC __glewFramebufferSamplePositionsfvAMD; +GLEW_FUN_EXPORT PFNGLGETFRAMEBUFFERPARAMETERFVAMDPROC __glewGetFramebufferParameterfvAMD; +GLEW_FUN_EXPORT PFNGLGETNAMEDFRAMEBUFFERPARAMETERFVAMDPROC __glewGetNamedFramebufferParameterfvAMD; +GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC __glewNamedFramebufferSamplePositionsfvAMD; + GLEW_FUN_EXPORT PFNGLVERTEXATTRIBPARAMETERIAMDPROC __glewVertexAttribParameteriAMD; GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC __glewMultiDrawArraysIndirectAMD; @@ -17107,6 +20232,8 @@ GLEW_FUN_EXPORT PFNGLQUERYCOUNTERANGLEPROC __glewQueryCounterANGLE; GLEW_FUN_EXPORT PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC __glewGetTranslatedShaderSourceANGLE; +GLEW_FUN_EXPORT PFNGLCOPYTEXTURELEVELSAPPLEPROC __glewCopyTextureLevelsAPPLE; + GLEW_FUN_EXPORT PFNGLDRAWELEMENTARRAYAPPLEPROC __glewDrawElementArrayAPPLE; GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC __glewDrawRangeElementArrayAPPLE; GLEW_FUN_EXPORT PFNGLELEMENTPOINTERAPPLEPROC __glewElementPointerAPPLE; @@ -17125,10 +20252,21 @@ GLEW_FUN_EXPORT PFNGLTESTOBJECTAPPLEPROC __glewTestObjectAPPLE; GLEW_FUN_EXPORT PFNGLBUFFERPARAMETERIAPPLEPROC __glewBufferParameteriAPPLE; GLEW_FUN_EXPORT PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC __glewFlushMappedBufferRangeAPPLE; +GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC __glewRenderbufferStorageMultisampleAPPLE; +GLEW_FUN_EXPORT PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC __glewResolveMultisampleFramebufferAPPLE; + GLEW_FUN_EXPORT PFNGLGETOBJECTPARAMETERIVAPPLEPROC __glewGetObjectParameterivAPPLE; GLEW_FUN_EXPORT PFNGLOBJECTPURGEABLEAPPLEPROC __glewObjectPurgeableAPPLE; GLEW_FUN_EXPORT PFNGLOBJECTUNPURGEABLEAPPLEPROC __glewObjectUnpurgeableAPPLE; +GLEW_FUN_EXPORT PFNGLCLIENTWAITSYNCAPPLEPROC __glewClientWaitSyncAPPLE; +GLEW_FUN_EXPORT PFNGLDELETESYNCAPPLEPROC __glewDeleteSyncAPPLE; +GLEW_FUN_EXPORT PFNGLFENCESYNCAPPLEPROC __glewFenceSyncAPPLE; +GLEW_FUN_EXPORT PFNGLGETINTEGER64VAPPLEPROC __glewGetInteger64vAPPLE; +GLEW_FUN_EXPORT PFNGLGETSYNCIVAPPLEPROC __glewGetSyncivAPPLE; +GLEW_FUN_EXPORT PFNGLISSYNCAPPLEPROC __glewIsSyncAPPLE; +GLEW_FUN_EXPORT PFNGLWAITSYNCAPPLEPROC __glewWaitSyncAPPLE; + GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC __glewGetTexParameterPointervAPPLE; GLEW_FUN_EXPORT PFNGLTEXTURERANGEAPPLEPROC __glewTextureRangeAPPLE; @@ -17184,7 +20322,6 @@ GLEW_FUN_EXPORT PFNGLBINDFRAGDATALOCATIONINDEXEDPROC __glewBindFragDataLocationI GLEW_FUN_EXPORT PFNGLGETFRAGDATAINDEXPROC __glewGetFragDataIndex; GLEW_FUN_EXPORT PFNGLBUFFERSTORAGEPROC __glewBufferStorage; -GLEW_FUN_EXPORT PFNGLNAMEDBUFFERSTORAGEEXTPROC __glewNamedBufferStorageEXT; GLEW_FUN_EXPORT PFNGLCREATESYNCFROMCLEVENTARBPROC __glewCreateSyncFromCLeventARB; @@ -17544,6 +20681,8 @@ GLEW_FUN_EXPORT PFNGLMAXSHADERCOMPILERTHREADSARBPROC __glewMaxShaderCompilerThre GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFARBPROC __glewPointParameterfARB; GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFVARBPROC __glewPointParameterfvARB; +GLEW_FUN_EXPORT PFNGLPOLYGONOFFSETCLAMPPROC __glewPolygonOffsetClamp; + GLEW_FUN_EXPORT PFNGLGETPROGRAMINTERFACEIVPROC __glewGetProgramInterfaceiv; GLEW_FUN_EXPORT PFNGLGETPROGRAMRESOURCEINDEXPROC __glewGetProgramResourceIndex; GLEW_FUN_EXPORT PFNGLGETPROGRAMRESOURCELOCATIONPROC __glewGetProgramResourceLocation; @@ -17721,7 +20860,6 @@ GLEW_FUN_EXPORT PFNGLNAMEDSTRINGARBPROC __glewNamedStringARB; GLEW_FUN_EXPORT PFNGLBUFFERPAGECOMMITMENTARBPROC __glewBufferPageCommitmentARB; GLEW_FUN_EXPORT PFNGLTEXPAGECOMMITMENTARBPROC __glewTexPageCommitmentARB; -GLEW_FUN_EXPORT PFNGLTEXTUREPAGECOMMITMENTEXTPROC __glewTexturePageCommitmentEXT; GLEW_FUN_EXPORT PFNGLCLIENTWAITSYNCPROC __glewClientWaitSync; GLEW_FUN_EXPORT PFNGLDELETESYNCPROC __glewDeleteSync; @@ -17757,9 +20895,6 @@ GLEW_FUN_EXPORT PFNGLTEXIMAGE3DMULTISAMPLEPROC __glewTexImage3DMultisample; GLEW_FUN_EXPORT PFNGLTEXSTORAGE1DPROC __glewTexStorage1D; GLEW_FUN_EXPORT PFNGLTEXSTORAGE2DPROC __glewTexStorage2D; GLEW_FUN_EXPORT PFNGLTEXSTORAGE3DPROC __glewTexStorage3D; -GLEW_FUN_EXPORT PFNGLTEXTURESTORAGE1DEXTPROC __glewTextureStorage1DEXT; -GLEW_FUN_EXPORT PFNGLTEXTURESTORAGE2DEXTPROC __glewTextureStorage2DEXT; -GLEW_FUN_EXPORT PFNGLTEXTURESTORAGE3DEXTPROC __glewTextureStorage3DEXT; GLEW_FUN_EXPORT PFNGLTEXSTORAGE2DMULTISAMPLEPROC __glewTexStorage2DMultisample; GLEW_FUN_EXPORT PFNGLTEXSTORAGE3DMULTISAMPLEPROC __glewTexStorage3DMultisample; @@ -18088,6 +21223,10 @@ GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4IVATIPROC __glewVertexStream4ivATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4SATIPROC __glewVertexStream4sATI; GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4SVATIPROC __glewVertexStream4svATI; +GLEW_FUN_EXPORT PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEEXTPROC __glewDrawArraysInstancedBaseInstanceEXT; +GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEEXTPROC __glewDrawElementsInstancedBaseInstanceEXT; +GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEEXTPROC __glewDrawElementsInstancedBaseVertexBaseInstanceEXT; + GLEW_FUN_EXPORT PFNGLGETUNIFORMBUFFERSIZEEXTPROC __glewGetUniformBufferSizeEXT; GLEW_FUN_EXPORT PFNGLGETUNIFORMOFFSETEXTPROC __glewGetUniformOffsetEXT; GLEW_FUN_EXPORT PFNGLUNIFORMBUFFEREXTPROC __glewUniformBufferEXT; @@ -18096,10 +21235,20 @@ GLEW_FUN_EXPORT PFNGLBLENDCOLOREXTPROC __glewBlendColorEXT; GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEEXTPROC __glewBlendEquationSeparateEXT; +GLEW_FUN_EXPORT PFNGLBINDFRAGDATALOCATIONINDEXEDEXTPROC __glewBindFragDataLocationIndexedEXT; +GLEW_FUN_EXPORT PFNGLGETFRAGDATAINDEXEXTPROC __glewGetFragDataIndexEXT; +GLEW_FUN_EXPORT PFNGLGETPROGRAMRESOURCELOCATIONINDEXEXTPROC __glewGetProgramResourceLocationIndexEXT; + GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEEXTPROC __glewBlendFuncSeparateEXT; GLEW_FUN_EXPORT PFNGLBLENDEQUATIONEXTPROC __glewBlendEquationEXT; +GLEW_FUN_EXPORT PFNGLBUFFERSTORAGEEXTPROC __glewBufferStorageEXT; +GLEW_FUN_EXPORT PFNGLNAMEDBUFFERSTORAGEEXTPROC __glewNamedBufferStorageEXT; + +GLEW_FUN_EXPORT PFNGLCLEARTEXIMAGEEXTPROC __glewClearTexImageEXT; +GLEW_FUN_EXPORT PFNGLCLEARTEXSUBIMAGEEXTPROC __glewClearTexSubImageEXT; + GLEW_FUN_EXPORT PFNGLCOLORSUBTABLEEXTPROC __glewColorSubTableEXT; GLEW_FUN_EXPORT PFNGLCOPYCOLORSUBTABLEEXTPROC __glewCopyColorSubTableEXT; @@ -18123,6 +21272,8 @@ GLEW_FUN_EXPORT PFNGLSEPARABLEFILTER2DEXTPROC __glewSeparableFilter2DEXT; GLEW_FUN_EXPORT PFNGLBINORMALPOINTEREXTPROC __glewBinormalPointerEXT; GLEW_FUN_EXPORT PFNGLTANGENTPOINTEREXTPROC __glewTangentPointerEXT; +GLEW_FUN_EXPORT PFNGLCOPYIMAGESUBDATAEXTPROC __glewCopyImageSubDataEXT; + GLEW_FUN_EXPORT PFNGLCOPYTEXIMAGE1DEXTPROC __glewCopyTexImage1DEXT; GLEW_FUN_EXPORT PFNGLCOPYTEXIMAGE2DEXTPROC __glewCopyTexImage2DEXT; GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE1DEXTPROC __glewCopyTexSubImage1DEXT; @@ -18356,6 +21507,10 @@ GLEW_FUN_EXPORT PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC __glewVertexArrayVert GLEW_FUN_EXPORT PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC __glewVertexArrayVertexAttribOffsetEXT; GLEW_FUN_EXPORT PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC __glewVertexArrayVertexOffsetEXT; +GLEW_FUN_EXPORT PFNGLDISCARDFRAMEBUFFEREXTPROC __glewDiscardFramebufferEXT; + +GLEW_FUN_EXPORT PFNGLDRAWBUFFERSEXTPROC __glewDrawBuffersEXT; + GLEW_FUN_EXPORT PFNGLCOLORMASKINDEXEDEXTPROC __glewColorMaskIndexedEXT; GLEW_FUN_EXPORT PFNGLDISABLEINDEXEDEXTPROC __glewDisableIndexedEXT; GLEW_FUN_EXPORT PFNGLENABLEINDEXEDEXTPROC __glewEnableIndexedEXT; @@ -18363,11 +21518,28 @@ GLEW_FUN_EXPORT PFNGLGETBOOLEANINDEXEDVEXTPROC __glewGetBooleanIndexedvEXT; GLEW_FUN_EXPORT PFNGLGETINTEGERINDEXEDVEXTPROC __glewGetIntegerIndexedvEXT; GLEW_FUN_EXPORT PFNGLISENABLEDINDEXEDEXTPROC __glewIsEnabledIndexedEXT; +GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEIEXTPROC __glewBlendEquationSeparateiEXT; +GLEW_FUN_EXPORT PFNGLBLENDEQUATIONIEXTPROC __glewBlendEquationiEXT; +GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEIEXTPROC __glewBlendFuncSeparateiEXT; +GLEW_FUN_EXPORT PFNGLBLENDFUNCIEXTPROC __glewBlendFunciEXT; +GLEW_FUN_EXPORT PFNGLCOLORMASKIEXTPROC __glewColorMaskiEXT; +GLEW_FUN_EXPORT PFNGLDISABLEIEXTPROC __glewDisableiEXT; +GLEW_FUN_EXPORT PFNGLENABLEIEXTPROC __glewEnableiEXT; +GLEW_FUN_EXPORT PFNGLISENABLEDIEXTPROC __glewIsEnablediEXT; + +GLEW_FUN_EXPORT PFNGLDRAWELEMENTSBASEVERTEXEXTPROC __glewDrawElementsBaseVertexEXT; +GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXEXTPROC __glewDrawElementsInstancedBaseVertexEXT; +GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTSBASEVERTEXEXTPROC __glewDrawRangeElementsBaseVertexEXT; +GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSBASEVERTEXEXTPROC __glewMultiDrawElementsBaseVertexEXT; + GLEW_FUN_EXPORT PFNGLDRAWARRAYSINSTANCEDEXTPROC __glewDrawArraysInstancedEXT; GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDEXTPROC __glewDrawElementsInstancedEXT; GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTSEXTPROC __glewDrawRangeElementsEXT; +GLEW_FUN_EXPORT PFNGLBUFFERSTORAGEEXTERNALEXTPROC __glewBufferStorageExternalEXT; +GLEW_FUN_EXPORT PFNGLNAMEDBUFFERSTORAGEEXTERNALEXTPROC __glewNamedBufferStorageExternalEXT; + GLEW_FUN_EXPORT PFNGLFOGCOORDPOINTEREXTPROC __glewFogCoordPointerEXT; GLEW_FUN_EXPORT PFNGLFOGCOORDDEXTPROC __glewFogCoorddEXT; GLEW_FUN_EXPORT PFNGLFOGCOORDDVEXTPROC __glewFogCoorddvEXT; @@ -18472,16 +21644,55 @@ GLEW_FUN_EXPORT PFNGLINDEXFUNCEXTPROC __glewIndexFuncEXT; GLEW_FUN_EXPORT PFNGLINDEXMATERIALEXTPROC __glewIndexMaterialEXT; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBDIVISOREXTPROC __glewVertexAttribDivisorEXT; + GLEW_FUN_EXPORT PFNGLAPPLYTEXTUREEXTPROC __glewApplyTextureEXT; GLEW_FUN_EXPORT PFNGLTEXTURELIGHTEXTPROC __glewTextureLightEXT; GLEW_FUN_EXPORT PFNGLTEXTUREMATERIALEXTPROC __glewTextureMaterialEXT; +GLEW_FUN_EXPORT PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC __glewFlushMappedBufferRangeEXT; +GLEW_FUN_EXPORT PFNGLMAPBUFFERRANGEEXTPROC __glewMapBufferRangeEXT; + +GLEW_FUN_EXPORT PFNGLBUFFERSTORAGEMEMEXTPROC __glewBufferStorageMemEXT; +GLEW_FUN_EXPORT PFNGLCREATEMEMORYOBJECTSEXTPROC __glewCreateMemoryObjectsEXT; +GLEW_FUN_EXPORT PFNGLDELETEMEMORYOBJECTSEXTPROC __glewDeleteMemoryObjectsEXT; +GLEW_FUN_EXPORT PFNGLGETMEMORYOBJECTPARAMETERIVEXTPROC __glewGetMemoryObjectParameterivEXT; +GLEW_FUN_EXPORT PFNGLGETUNSIGNEDBYTEI_VEXTPROC __glewGetUnsignedBytei_vEXT; +GLEW_FUN_EXPORT PFNGLGETUNSIGNEDBYTEVEXTPROC __glewGetUnsignedBytevEXT; +GLEW_FUN_EXPORT PFNGLISMEMORYOBJECTEXTPROC __glewIsMemoryObjectEXT; +GLEW_FUN_EXPORT PFNGLMEMORYOBJECTPARAMETERIVEXTPROC __glewMemoryObjectParameterivEXT; +GLEW_FUN_EXPORT PFNGLNAMEDBUFFERSTORAGEMEMEXTPROC __glewNamedBufferStorageMemEXT; +GLEW_FUN_EXPORT PFNGLTEXSTORAGEMEM1DEXTPROC __glewTexStorageMem1DEXT; +GLEW_FUN_EXPORT PFNGLTEXSTORAGEMEM2DEXTPROC __glewTexStorageMem2DEXT; +GLEW_FUN_EXPORT PFNGLTEXSTORAGEMEM2DMULTISAMPLEEXTPROC __glewTexStorageMem2DMultisampleEXT; +GLEW_FUN_EXPORT PFNGLTEXSTORAGEMEM3DEXTPROC __glewTexStorageMem3DEXT; +GLEW_FUN_EXPORT PFNGLTEXSTORAGEMEM3DMULTISAMPLEEXTPROC __glewTexStorageMem3DMultisampleEXT; +GLEW_FUN_EXPORT PFNGLTEXTURESTORAGEMEM1DEXTPROC __glewTextureStorageMem1DEXT; +GLEW_FUN_EXPORT PFNGLTEXTURESTORAGEMEM2DEXTPROC __glewTextureStorageMem2DEXT; +GLEW_FUN_EXPORT PFNGLTEXTURESTORAGEMEM2DMULTISAMPLEEXTPROC __glewTextureStorageMem2DMultisampleEXT; +GLEW_FUN_EXPORT PFNGLTEXTURESTORAGEMEM3DEXTPROC __glewTextureStorageMem3DEXT; +GLEW_FUN_EXPORT PFNGLTEXTURESTORAGEMEM3DMULTISAMPLEEXTPROC __glewTextureStorageMem3DMultisampleEXT; + +GLEW_FUN_EXPORT PFNGLIMPORTMEMORYFDEXTPROC __glewImportMemoryFdEXT; + +GLEW_FUN_EXPORT PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC __glewImportMemoryWin32HandleEXT; +GLEW_FUN_EXPORT PFNGLIMPORTMEMORYWIN32NAMEEXTPROC __glewImportMemoryWin32NameEXT; + GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSEXTPROC __glewMultiDrawArraysEXT; GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSEXTPROC __glewMultiDrawElementsEXT; +GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSINDIRECTEXTPROC __glewMultiDrawArraysIndirectEXT; +GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSINDIRECTEXTPROC __glewMultiDrawElementsIndirectEXT; + GLEW_FUN_EXPORT PFNGLSAMPLEMASKEXTPROC __glewSampleMaskEXT; GLEW_FUN_EXPORT PFNGLSAMPLEPATTERNEXTPROC __glewSamplePatternEXT; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC __glewFramebufferTexture2DMultisampleEXT; + +GLEW_FUN_EXPORT PFNGLDRAWBUFFERSINDEXEDEXTPROC __glewDrawBuffersIndexedEXT; +GLEW_FUN_EXPORT PFNGLGETINTEGERI_VEXTPROC __glewGetIntegeri_vEXT; +GLEW_FUN_EXPORT PFNGLREADBUFFERINDEXEDEXTPROC __glewReadBufferIndexedEXT; + GLEW_FUN_EXPORT PFNGLCOLORTABLEEXTPROC __glewColorTableEXT; GLEW_FUN_EXPORT PFNGLGETCOLORTABLEEXTPROC __glewGetColorTableEXT; GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERFVEXTPROC __glewGetColorTableParameterfvEXT; @@ -18529,6 +21740,19 @@ GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USEXTPROC __glewSecondaryColor3usEXT; GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USVEXTPROC __glewSecondaryColor3usvEXT; GLEW_FUN_EXPORT PFNGLSECONDARYCOLORPOINTEREXTPROC __glewSecondaryColorPointerEXT; +GLEW_FUN_EXPORT PFNGLDELETESEMAPHORESEXTPROC __glewDeleteSemaphoresEXT; +GLEW_FUN_EXPORT PFNGLGENSEMAPHORESEXTPROC __glewGenSemaphoresEXT; +GLEW_FUN_EXPORT PFNGLGETSEMAPHOREPARAMETERUI64VEXTPROC __glewGetSemaphoreParameterui64vEXT; +GLEW_FUN_EXPORT PFNGLISSEMAPHOREEXTPROC __glewIsSemaphoreEXT; +GLEW_FUN_EXPORT PFNGLSEMAPHOREPARAMETERUI64VEXTPROC __glewSemaphoreParameterui64vEXT; +GLEW_FUN_EXPORT PFNGLSIGNALSEMAPHOREEXTPROC __glewSignalSemaphoreEXT; +GLEW_FUN_EXPORT PFNGLWAITSEMAPHOREEXTPROC __glewWaitSemaphoreEXT; + +GLEW_FUN_EXPORT PFNGLIMPORTSEMAPHOREFDEXTPROC __glewImportSemaphoreFdEXT; + +GLEW_FUN_EXPORT PFNGLIMPORTSEMAPHOREWIN32HANDLEEXTPROC __glewImportSemaphoreWin32HandleEXT; +GLEW_FUN_EXPORT PFNGLIMPORTSEMAPHOREWIN32NAMEEXTPROC __glewImportSemaphoreWin32NameEXT; + GLEW_FUN_EXPORT PFNGLACTIVEPROGRAMEXTPROC __glewActiveProgramEXT; GLEW_FUN_EXPORT PFNGLCREATESHADERPROGRAMEXTPROC __glewCreateShaderProgramEXT; GLEW_FUN_EXPORT PFNGLUSESHADERPROGRAMEXTPROC __glewUseShaderProgramEXT; @@ -18536,6 +21760,13 @@ GLEW_FUN_EXPORT PFNGLUSESHADERPROGRAMEXTPROC __glewUseShaderProgramEXT; GLEW_FUN_EXPORT PFNGLBINDIMAGETEXTUREEXTPROC __glewBindImageTextureEXT; GLEW_FUN_EXPORT PFNGLMEMORYBARRIEREXTPROC __glewMemoryBarrierEXT; +GLEW_FUN_EXPORT PFNGLCLEARPIXELLOCALSTORAGEUIEXTPROC __glewClearPixelLocalStorageuiEXT; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERPIXELLOCALSTORAGESIZEEXTPROC __glewFramebufferPixelLocalStorageSizeEXT; +GLEW_FUN_EXPORT PFNGLGETFRAMEBUFFERPIXELLOCALSTORAGESIZEEXTPROC __glewGetFramebufferPixelLocalStorageSizeEXT; + +GLEW_FUN_EXPORT PFNGLTEXPAGECOMMITMENTEXTPROC __glewTexPageCommitmentEXT; +GLEW_FUN_EXPORT PFNGLTEXTUREPAGECOMMITMENTEXTPROC __glewTexturePageCommitmentEXT; + GLEW_FUN_EXPORT PFNGLACTIVESTENCILFACEEXTPROC __glewActiveStencilFaceEXT; GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE1DEXTPROC __glewTexSubImage1DEXT; @@ -18564,6 +21795,15 @@ GLEW_FUN_EXPORT PFNGLPRIORITIZETEXTURESEXTPROC __glewPrioritizeTexturesEXT; GLEW_FUN_EXPORT PFNGLTEXTURENORMALEXTPROC __glewTextureNormalEXT; +GLEW_FUN_EXPORT PFNGLTEXSTORAGE1DEXTPROC __glewTexStorage1DEXT; +GLEW_FUN_EXPORT PFNGLTEXSTORAGE2DEXTPROC __glewTexStorage2DEXT; +GLEW_FUN_EXPORT PFNGLTEXSTORAGE3DEXTPROC __glewTexStorage3DEXT; +GLEW_FUN_EXPORT PFNGLTEXTURESTORAGE1DEXTPROC __glewTextureStorage1DEXT; +GLEW_FUN_EXPORT PFNGLTEXTURESTORAGE2DEXTPROC __glewTextureStorage2DEXT; +GLEW_FUN_EXPORT PFNGLTEXTURESTORAGE3DEXTPROC __glewTextureStorage3DEXT; + +GLEW_FUN_EXPORT PFNGLTEXTUREVIEWEXTPROC __glewTextureViewEXT; + GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTI64VEXTPROC __glewGetQueryObjecti64vEXT; GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUI64VEXTPROC __glewGetQueryObjectui64vEXT; @@ -18584,6 +21824,10 @@ GLEW_FUN_EXPORT PFNGLNORMALPOINTEREXTPROC __glewNormalPointerEXT; GLEW_FUN_EXPORT PFNGLTEXCOORDPOINTEREXTPROC __glewTexCoordPointerEXT; GLEW_FUN_EXPORT PFNGLVERTEXPOINTEREXTPROC __glewVertexPointerEXT; +GLEW_FUN_EXPORT PFNGLBINDARRAYSETEXTPROC __glewBindArraySetEXT; +GLEW_FUN_EXPORT PFNGLCREATEARRAYSETEXTPROC __glewCreateArraySetExt; +GLEW_FUN_EXPORT PFNGLDELETEARRAYSETSEXTPROC __glewDeleteArraySetsEXT; + GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBLDVEXTPROC __glewGetVertexAttribLdvEXT; GLEW_FUN_EXPORT PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC __glewVertexArrayVertexAttribLOffsetEXT; GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1DEXTPROC __glewVertexAttribL1dEXT; @@ -18643,6 +21887,9 @@ GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTPOINTEREXTPROC __glewVertexWeightPointerEXT; GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTFEXTPROC __glewVertexWeightfEXT; GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTFVEXTPROC __glewVertexWeightfvEXT; +GLEW_FUN_EXPORT PFNGLACQUIREKEYEDMUTEXWIN32EXTPROC __glewAcquireKeyedMutexWin32EXT; +GLEW_FUN_EXPORT PFNGLRELEASEKEYEDMUTEXWIN32EXTPROC __glewReleaseKeyedMutexWin32EXT; + GLEW_FUN_EXPORT PFNGLWINDOWRECTANGLESEXTPROC __glewWindowRectanglesEXT; GLEW_FUN_EXPORT PFNGLIMPORTSYNCEXTPROC __glewImportSyncEXT; @@ -18706,6 +21953,8 @@ GLEW_FUN_EXPORT PFNGLOBJECTPTRLABELPROC __glewObjectPtrLabel; GLEW_FUN_EXPORT PFNGLPOPDEBUGGROUPPROC __glewPopDebugGroup; GLEW_FUN_EXPORT PFNGLPUSHDEBUGGROUPPROC __glewPushDebugGroup; +GLEW_FUN_EXPORT PFNGLMAXSHADERCOMPILERTHREADSKHRPROC __glewMaxShaderCompilerThreadsKHR; + GLEW_FUN_EXPORT PFNGLGETNUNIFORMFVPROC __glewGetnUniformfv; GLEW_FUN_EXPORT PFNGLGETNUNIFORMIVPROC __glewGetnUniformiv; GLEW_FUN_EXPORT PFNGLGETNUNIFORMUIVPROC __glewGetnUniformuiv; @@ -18751,6 +22000,9 @@ GLEW_FUN_EXPORT PFNGLLGPUCOPYIMAGESUBDATANVXPROC __glewLGPUCopyImageSubDataNVX; GLEW_FUN_EXPORT PFNGLLGPUINTERLOCKNVXPROC __glewLGPUInterlockNVX; GLEW_FUN_EXPORT PFNGLLGPUNAMEDBUFFERSUBDATANVXPROC __glewLGPUNamedBufferSubDataNVX; +GLEW_FUN_EXPORT PFNGLSTEREOPARAMETERFNVPROC __glewStereoParameterfNV; +GLEW_FUN_EXPORT PFNGLSTEREOPARAMETERINVPROC __glewStereoParameteriNV; + GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC __glewMultiDrawArraysIndirectBindlessNV; GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC __glewMultiDrawElementsIndirectBindlessNV; @@ -18803,12 +22055,19 @@ GLEW_FUN_EXPORT PFNGLCONSERVATIVERASTERPARAMETERFNVPROC __glewConservativeRaster GLEW_FUN_EXPORT PFNGLCONSERVATIVERASTERPARAMETERINVPROC __glewConservativeRasterParameteriNV; +GLEW_FUN_EXPORT PFNGLCOPYBUFFERSUBDATANVPROC __glewCopyBufferSubDataNV; + GLEW_FUN_EXPORT PFNGLCOPYIMAGESUBDATANVPROC __glewCopyImageSubDataNV; GLEW_FUN_EXPORT PFNGLCLEARDEPTHDNVPROC __glewClearDepthdNV; GLEW_FUN_EXPORT PFNGLDEPTHBOUNDSDNVPROC __glewDepthBoundsdNV; GLEW_FUN_EXPORT PFNGLDEPTHRANGEDNVPROC __glewDepthRangedNV; +GLEW_FUN_EXPORT PFNGLDRAWBUFFERSNVPROC __glewDrawBuffersNV; + +GLEW_FUN_EXPORT PFNGLDRAWARRAYSINSTANCEDNVPROC __glewDrawArraysInstancedNV; +GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDNVPROC __glewDrawElementsInstancedNV; + GLEW_FUN_EXPORT PFNGLDRAWTEXTURENVPROC __glewDrawTextureNV; GLEW_FUN_EXPORT PFNGLDRAWVKIMAGENVPROC __glewDrawVkImageNV; @@ -18848,6 +22107,10 @@ GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC __glewProgramNamedParameter4 GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4FNVPROC __glewProgramNamedParameter4fNV; GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC __glewProgramNamedParameter4fvNV; +GLEW_FUN_EXPORT PFNGLBLITFRAMEBUFFERNVPROC __glewBlitFramebufferNV; + +GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEMULTISAMPLENVPROC __glewRenderbufferStorageMultisampleNV; + GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC __glewRenderbufferStorageMultisampleCoverageNV; GLEW_FUN_EXPORT PFNGLPROGRAMVERTEXLIMITNVPROC __glewProgramVertexLimitNV; @@ -18960,8 +22223,17 @@ GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4HVNVPROC __glewVertexAttribs4hvNV; GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTHNVPROC __glewVertexWeighthNV; GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTHVNVPROC __glewVertexWeighthvNV; +GLEW_FUN_EXPORT PFNGLVERTEXATTRIBDIVISORNVPROC __glewVertexAttribDivisorNV; + GLEW_FUN_EXPORT PFNGLGETINTERNALFORMATSAMPLEIVNVPROC __glewGetInternalformatSampleivNV; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2X3FVNVPROC __glewUniformMatrix2x3fvNV; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2X4FVNVPROC __glewUniformMatrix2x4fvNV; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3X2FVNVPROC __glewUniformMatrix3x2fvNV; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3X4FVNVPROC __glewUniformMatrix3x4fvNV; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4X2FVNVPROC __glewUniformMatrix4x2fvNV; +GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4X3FVNVPROC __glewUniformMatrix4x3fvNV; + GLEW_FUN_EXPORT PFNGLBEGINOCCLUSIONQUERYNVPROC __glewBeginOcclusionQueryNV; GLEW_FUN_EXPORT PFNGLDELETEOCCLUSIONQUERIESNVPROC __glewDeleteOcclusionQueriesNV; GLEW_FUN_EXPORT PFNGLENDOCCLUSIONQUERYNVPROC __glewEndOcclusionQueryNV; @@ -19045,6 +22317,8 @@ GLEW_FUN_EXPORT PFNGLPIXELDATARANGENVPROC __glewPixelDataRangeNV; GLEW_FUN_EXPORT PFNGLPOINTPARAMETERINVPROC __glewPointParameteriNV; GLEW_FUN_EXPORT PFNGLPOINTPARAMETERIVNVPROC __glewPointParameterivNV; +GLEW_FUN_EXPORT PFNGLPOLYGONMODENVPROC __glewPolygonModeNV; + GLEW_FUN_EXPORT PFNGLGETVIDEOI64VNVPROC __glewGetVideoi64vNV; GLEW_FUN_EXPORT PFNGLGETVIDEOIVNVPROC __glewGetVideoivNV; GLEW_FUN_EXPORT PFNGLGETVIDEOUI64VNVPROC __glewGetVideoui64vNV; @@ -19089,6 +22363,13 @@ GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMUI64VNVPROC __glewProgramUniformui64vNV; GLEW_FUN_EXPORT PFNGLUNIFORMUI64NVPROC __glewUniformui64NV; GLEW_FUN_EXPORT PFNGLUNIFORMUI64VNVPROC __glewUniformui64vNV; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE3DNVPROC __glewCompressedTexImage3DNV; +GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE3DNVPROC __glewCompressedTexSubImage3DNV; +GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE3DNVPROC __glewCopyTexSubImage3DNV; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURELAYERNVPROC __glewFramebufferTextureLayerNV; +GLEW_FUN_EXPORT PFNGLTEXIMAGE3DNVPROC __glewTexImage3DNV; +GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE3DNVPROC __glewTexSubImage3DNV; + GLEW_FUN_EXPORT PFNGLTEXTUREBARRIERNVPROC __glewTextureBarrierNV; GLEW_FUN_EXPORT PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC __glewTexImage2DMultisampleCoverageNV; @@ -19243,17 +22524,54 @@ GLEW_FUN_EXPORT PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC __glewVideoCaptureStrea GLEW_FUN_EXPORT PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC __glewVideoCaptureStreamParameterfvNV; GLEW_FUN_EXPORT PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC __glewVideoCaptureStreamParameterivNV; +GLEW_FUN_EXPORT PFNGLDEPTHRANGEARRAYFVNVPROC __glewDepthRangeArrayfvNV; +GLEW_FUN_EXPORT PFNGLDEPTHRANGEINDEXEDFNVPROC __glewDepthRangeIndexedfNV; +GLEW_FUN_EXPORT PFNGLDISABLEINVPROC __glewDisableiNV; +GLEW_FUN_EXPORT PFNGLENABLEINVPROC __glewEnableiNV; +GLEW_FUN_EXPORT PFNGLGETFLOATI_VNVPROC __glewGetFloati_vNV; +GLEW_FUN_EXPORT PFNGLISENABLEDINVPROC __glewIsEnablediNV; +GLEW_FUN_EXPORT PFNGLSCISSORARRAYVNVPROC __glewScissorArrayvNV; +GLEW_FUN_EXPORT PFNGLSCISSORINDEXEDNVPROC __glewScissorIndexedNV; +GLEW_FUN_EXPORT PFNGLSCISSORINDEXEDVNVPROC __glewScissorIndexedvNV; +GLEW_FUN_EXPORT PFNGLVIEWPORTARRAYVNVPROC __glewViewportArrayvNV; +GLEW_FUN_EXPORT PFNGLVIEWPORTINDEXEDFNVPROC __glewViewportIndexedfNV; +GLEW_FUN_EXPORT PFNGLVIEWPORTINDEXEDFVNVPROC __glewViewportIndexedfvNV; + GLEW_FUN_EXPORT PFNGLVIEWPORTSWIZZLENVPROC __glewViewportSwizzleNV; -GLEW_FUN_EXPORT PFNGLCLEARDEPTHFOESPROC __glewClearDepthfOES; -GLEW_FUN_EXPORT PFNGLCLIPPLANEFOESPROC __glewClipPlanefOES; -GLEW_FUN_EXPORT PFNGLDEPTHRANGEFOESPROC __glewDepthRangefOES; -GLEW_FUN_EXPORT PFNGLFRUSTUMFOESPROC __glewFrustumfOES; -GLEW_FUN_EXPORT PFNGLGETCLIPPLANEFOESPROC __glewGetClipPlanefOES; -GLEW_FUN_EXPORT PFNGLORTHOFOESPROC __glewOrthofOES; - GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC __glewFramebufferTextureMultiviewOVR; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREMULTISAMPLEMULTIVIEWOVRPROC __glewFramebufferTextureMultisampleMultiviewOVR; + +GLEW_FUN_EXPORT PFNGLALPHAFUNCQCOMPROC __glewAlphaFuncQCOM; + +GLEW_FUN_EXPORT PFNGLDISABLEDRIVERCONTROLQCOMPROC __glewDisableDriverControlQCOM; +GLEW_FUN_EXPORT PFNGLENABLEDRIVERCONTROLQCOMPROC __glewEnableDriverControlQCOM; +GLEW_FUN_EXPORT PFNGLGETDRIVERCONTROLSTRINGQCOMPROC __glewGetDriverControlStringQCOM; +GLEW_FUN_EXPORT PFNGLGETDRIVERCONTROLSQCOMPROC __glewGetDriverControlsQCOM; + +GLEW_FUN_EXPORT PFNGLEXTGETBUFFERPOINTERVQCOMPROC __glewExtGetBufferPointervQCOM; +GLEW_FUN_EXPORT PFNGLEXTGETBUFFERSQCOMPROC __glewExtGetBuffersQCOM; +GLEW_FUN_EXPORT PFNGLEXTGETFRAMEBUFFERSQCOMPROC __glewExtGetFramebuffersQCOM; +GLEW_FUN_EXPORT PFNGLEXTGETRENDERBUFFERSQCOMPROC __glewExtGetRenderbuffersQCOM; +GLEW_FUN_EXPORT PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC __glewExtGetTexLevelParameterivQCOM; +GLEW_FUN_EXPORT PFNGLEXTGETTEXSUBIMAGEQCOMPROC __glewExtGetTexSubImageQCOM; +GLEW_FUN_EXPORT PFNGLEXTGETTEXTURESQCOMPROC __glewExtGetTexturesQCOM; +GLEW_FUN_EXPORT PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC __glewExtTexObjectStateOverrideiQCOM; + +GLEW_FUN_EXPORT PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC __glewExtGetProgramBinarySourceQCOM; +GLEW_FUN_EXPORT PFNGLEXTGETPROGRAMSQCOMPROC __glewExtGetProgramsQCOM; +GLEW_FUN_EXPORT PFNGLEXTGETSHADERSQCOMPROC __glewExtGetShadersQCOM; +GLEW_FUN_EXPORT PFNGLEXTISPROGRAMBINARYQCOMPROC __glewExtIsProgramBinaryQCOM; + +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERFOVEATIONCONFIGQCOMPROC __glewFramebufferFoveationConfigQCOM; +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERFOVEATIONPARAMETERSQCOMPROC __glewFramebufferFoveationParametersQCOM; + +GLEW_FUN_EXPORT PFNGLFRAMEBUFFERFETCHBARRIERQCOMPROC __glewFramebufferFetchBarrierQCOM; + +GLEW_FUN_EXPORT PFNGLENDTILINGQCOMPROC __glewEndTilingQCOM; +GLEW_FUN_EXPORT PFNGLSTARTTILINGQCOMPROC __glewStartTilingQCOM; + GLEW_FUN_EXPORT PFNGLALPHAFUNCXPROC __glewAlphaFuncx; GLEW_FUN_EXPORT PFNGLCLEARCOLORXPROC __glewClearColorx; GLEW_FUN_EXPORT PFNGLCLEARDEPTHXPROC __glewClearDepthx; @@ -19318,6 +22636,13 @@ GLEW_FUN_EXPORT PFNGLGETFOGFUNCSGISPROC __glewGetFogFuncSGIS; GLEW_FUN_EXPORT PFNGLSAMPLEMASKSGISPROC __glewSampleMaskSGIS; GLEW_FUN_EXPORT PFNGLSAMPLEPATTERNSGISPROC __glewSamplePatternSGIS; +GLEW_FUN_EXPORT PFNGLINTERLEAVEDTEXTURECOORDSETSSGISPROC __glewInterleavedTextureCoordSetsSGIS; +GLEW_FUN_EXPORT PFNGLSELECTTEXTURECOORDSETSGISPROC __glewSelectTextureCoordSetSGIS; +GLEW_FUN_EXPORT PFNGLSELECTTEXTURESGISPROC __glewSelectTextureSGIS; +GLEW_FUN_EXPORT PFNGLSELECTTEXTURETRANSFORMSGISPROC __glewSelectTextureTransformSGIS; + +GLEW_FUN_EXPORT PFNGLMULTISAMPLESUBRECTPOSSGISPROC __glewMultisampleSubRectPosSGIS; + GLEW_FUN_EXPORT PFNGLGETSHARPENTEXFUNCSGISPROC __glewGetSharpenTexFuncSGIS; GLEW_FUN_EXPORT PFNGLSHARPENTEXFUNCSGISPROC __glewSharpenTexFuncSGIS; @@ -19334,8 +22659,14 @@ GLEW_FUN_EXPORT PFNGLGENASYNCMARKERSSGIXPROC __glewGenAsyncMarkersSGIX; GLEW_FUN_EXPORT PFNGLISASYNCMARKERSGIXPROC __glewIsAsyncMarkerSGIX; GLEW_FUN_EXPORT PFNGLPOLLASYNCSGIXPROC __glewPollAsyncSGIX; +GLEW_FUN_EXPORT PFNGLADDRESSSPACEPROC __glewAddressSpace; +GLEW_FUN_EXPORT PFNGLDATAPIPEPROC __glewDataPipe; + GLEW_FUN_EXPORT PFNGLFLUSHRASTERSGIXPROC __glewFlushRasterSGIX; +GLEW_FUN_EXPORT PFNGLFOGLAYERSSGIXPROC __glewFogLayersSGIX; +GLEW_FUN_EXPORT PFNGLGETFOGLAYERSSGIXPROC __glewGetFogLayersSGIX; + GLEW_FUN_EXPORT PFNGLTEXTUREFOGSGIXPROC __glewTextureFogSGIX; GLEW_FUN_EXPORT PFNGLFRAGMENTCOLORMATERIALSGIXPROC __glewFragmentColorMaterialSGIX; @@ -19358,8 +22689,33 @@ GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALIVSGIXPROC __glewGetFragmentMaterialivSG GLEW_FUN_EXPORT PFNGLFRAMEZOOMSGIXPROC __glewFrameZoomSGIX; +GLEW_FUN_EXPORT PFNGLIGLOOINTERFACESGIXPROC __glewIglooInterfaceSGIX; + +GLEW_FUN_EXPORT PFNGLALLOCMPEGPREDICTORSSGIXPROC __glewAllocMPEGPredictorsSGIX; +GLEW_FUN_EXPORT PFNGLDELETEMPEGPREDICTORSSGIXPROC __glewDeleteMPEGPredictorsSGIX; +GLEW_FUN_EXPORT PFNGLGENMPEGPREDICTORSSGIXPROC __glewGenMPEGPredictorsSGIX; +GLEW_FUN_EXPORT PFNGLGETMPEGPARAMETERFVSGIXPROC __glewGetMPEGParameterfvSGIX; +GLEW_FUN_EXPORT PFNGLGETMPEGPARAMETERIVSGIXPROC __glewGetMPEGParameterivSGIX; +GLEW_FUN_EXPORT PFNGLGETMPEGPREDICTORSGIXPROC __glewGetMPEGPredictorSGIX; +GLEW_FUN_EXPORT PFNGLGETMPEGQUANTTABLEUBVPROC __glewGetMPEGQuantTableubv; +GLEW_FUN_EXPORT PFNGLISMPEGPREDICTORSGIXPROC __glewIsMPEGPredictorSGIX; +GLEW_FUN_EXPORT PFNGLMPEGPREDICTORSGIXPROC __glewMPEGPredictorSGIX; +GLEW_FUN_EXPORT PFNGLMPEGQUANTTABLEUBVPROC __glewMPEGQuantTableubv; +GLEW_FUN_EXPORT PFNGLSWAPMPEGPREDICTORSSGIXPROC __glewSwapMPEGPredictorsSGIX; + +GLEW_FUN_EXPORT PFNGLGETNONLINLIGHTFVSGIXPROC __glewGetNonlinLightfvSGIX; +GLEW_FUN_EXPORT PFNGLGETNONLINMATERIALFVSGIXPROC __glewGetNonlinMaterialfvSGIX; +GLEW_FUN_EXPORT PFNGLNONLINLIGHTFVSGIXPROC __glewNonlinLightfvSGIX; +GLEW_FUN_EXPORT PFNGLNONLINMATERIALFVSGIXPROC __glewNonlinMaterialfvSGIX; + GLEW_FUN_EXPORT PFNGLPIXELTEXGENSGIXPROC __glewPixelTexGenSGIX; +GLEW_FUN_EXPORT PFNGLDEFORMSGIXPROC __glewDeformSGIX; +GLEW_FUN_EXPORT PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC __glewLoadIdentityDeformationMapSGIX; + +GLEW_FUN_EXPORT PFNGLMESHBREADTHSGIXPROC __glewMeshBreadthSGIX; +GLEW_FUN_EXPORT PFNGLMESHSTRIDESGIXPROC __glewMeshStrideSGIX; + GLEW_FUN_EXPORT PFNGLREFERENCEPLANESGIXPROC __glewReferencePlaneSGIX; GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERFSGIXPROC __glewSpriteParameterfSGIX; @@ -19369,6 +22725,16 @@ GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERIVSGIXPROC __glewSpriteParameterivSGIX; GLEW_FUN_EXPORT PFNGLTAGSAMPLEBUFFERSGIXPROC __glewTagSampleBufferSGIX; +GLEW_FUN_EXPORT PFNGLGETVECTOROPERATIONSGIXPROC __glewGetVectorOperationSGIX; +GLEW_FUN_EXPORT PFNGLVECTOROPERATIONSGIXPROC __glewVectorOperationSGIX; + +GLEW_FUN_EXPORT PFNGLAREVERTEXARRAYSRESIDENTSGIXPROC __glewAreVertexArraysResidentSGIX; +GLEW_FUN_EXPORT PFNGLBINDVERTEXARRAYSGIXPROC __glewBindVertexArraySGIX; +GLEW_FUN_EXPORT PFNGLDELETEVERTEXARRAYSSGIXPROC __glewDeleteVertexArraysSGIX; +GLEW_FUN_EXPORT PFNGLGENVERTEXARRAYSSGIXPROC __glewGenVertexArraysSGIX; +GLEW_FUN_EXPORT PFNGLISVERTEXARRAYSGIXPROC __glewIsVertexArraySGIX; +GLEW_FUN_EXPORT PFNGLPRIORITIZEVERTEXARRAYSSGIXPROC __glewPrioritizeVertexArraysSGIX; + GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERFVSGIPROC __glewColorTableParameterfvSGI; GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERIVSGIPROC __glewColorTableParameterivSGI; GLEW_FUN_EXPORT PFNGLCOLORTABLESGIPROC __glewColorTableSGI; @@ -19377,6 +22743,14 @@ GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERFVSGIPROC __glewGetColorTableParamete GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERIVSGIPROC __glewGetColorTableParameterivSGI; GLEW_FUN_EXPORT PFNGLGETCOLORTABLESGIPROC __glewGetColorTableSGI; +GLEW_FUN_EXPORT PFNGLGETPIXELTRANSFORMPARAMETERFVSGIPROC __glewGetPixelTransformParameterfvSGI; +GLEW_FUN_EXPORT PFNGLGETPIXELTRANSFORMPARAMETERIVSGIPROC __glewGetPixelTransformParameterivSGI; +GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERFSGIPROC __glewPixelTransformParameterfSGI; +GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERFVSGIPROC __glewPixelTransformParameterfvSGI; +GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERISGIPROC __glewPixelTransformParameteriSGI; +GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERIVSGIPROC __glewPixelTransformParameterivSGI; +GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMSGIPROC __glewPixelTransformSGI; + GLEW_FUN_EXPORT PFNGLFINISHTEXTURESUNXPROC __glewFinishTextureSUNX; GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORBSUNPROC __glewGlobalAlphaFactorbSUN; @@ -19458,15 +22832,21 @@ GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_4_2; GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_4_3; GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_4_4; GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_4_5; +GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_4_6; GLEW_VAR_EXPORT GLboolean __GLEW_3DFX_multisample; GLEW_VAR_EXPORT GLboolean __GLEW_3DFX_tbuffer; GLEW_VAR_EXPORT GLboolean __GLEW_3DFX_texture_compression_FXT1; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_blend_minmax_factor; +GLEW_VAR_EXPORT GLboolean __GLEW_AMD_compressed_3DC_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_AMD_compressed_ATC_texture; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_conservative_depth; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_debug_output; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_depth_clamp_separate; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_draw_buffers_blend; +GLEW_VAR_EXPORT GLboolean __GLEW_AMD_framebuffer_sample_positions; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_gcn_shader; +GLEW_VAR_EXPORT GLboolean __GLEW_AMD_gpu_shader_half_float; +GLEW_VAR_EXPORT GLboolean __GLEW_AMD_gpu_shader_int16; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_gpu_shader_int64; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_interleaved_elements; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_multi_draw_indirect; @@ -19474,22 +22854,26 @@ GLEW_VAR_EXPORT GLboolean __GLEW_AMD_name_gen_delete; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_occlusion_query_event; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_performance_monitor; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_pinned_memory; +GLEW_VAR_EXPORT GLboolean __GLEW_AMD_program_binary_Z400; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_query_buffer_object; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_sample_positions; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_seamless_cubemap_per_texture; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_shader_atomic_counter_ops; +GLEW_VAR_EXPORT GLboolean __GLEW_AMD_shader_ballot; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_shader_explicit_vertex_parameter; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_shader_stencil_export; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_shader_stencil_value_export; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_shader_trinary_minmax; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_sparse_texture; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_stencil_operation_extended; +GLEW_VAR_EXPORT GLboolean __GLEW_AMD_texture_gather_bias_lod; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_texture_texture4; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_transform_feedback3_lines_triangles; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_transform_feedback4; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_vertex_shader_layer; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_vertex_shader_tessellator; GLEW_VAR_EXPORT GLboolean __GLEW_AMD_vertex_shader_viewport_index; +GLEW_VAR_EXPORT GLboolean __GLEW_ANDROID_extension_pack_es31a; GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_depth_texture; GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_framebuffer_blit; GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_framebuffer_multisample; @@ -19504,15 +22888,24 @@ GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_timer_query; GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_translated_shader_source; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_aux_depth_stencil; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_client_storage; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_clip_distance; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_color_buffer_packed_float; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_copy_texture_levels; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_element_array; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_fence; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_float_pixels; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_flush_buffer_range; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_framebuffer_multisample; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_object_purgeable; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_pixel_buffer; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_rgb_422; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_row_bytes; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_specular_vector; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_sync; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_texture_2D_limited_npot; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_texture_format_BGRA8888; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_texture_max_level; +GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_texture_packed_float; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_texture_range; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_transform_hint; GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_vertex_array_object; @@ -19594,6 +22987,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_ARB_pipeline_statistics_query; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_pixel_buffer_object; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_point_parameters; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_point_sprite; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_polygon_offset_clamp; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_post_depth_coverage; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_program_interface_query; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_provoking_vertex; @@ -19635,6 +23029,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_ARB_sparse_buffer; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_sparse_texture; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_sparse_texture2; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_sparse_texture_clamp; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_spirv_extensions; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_stencil_texturing; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_sync; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_tessellation_shader; @@ -19652,6 +23047,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_add; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_combine; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_crossbar; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_dot3; +GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_filter_anisotropic; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_filter_minmax; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_float; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_gather; @@ -19688,6 +23084,11 @@ GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_type_10f_11f_11f_rev; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_type_2_10_10_10_rev; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_viewport_array; GLEW_VAR_EXPORT GLboolean __GLEW_ARB_window_pos; +GLEW_VAR_EXPORT GLboolean __GLEW_ARM_mali_program_binary; +GLEW_VAR_EXPORT GLboolean __GLEW_ARM_mali_shader_binary; +GLEW_VAR_EXPORT GLboolean __GLEW_ARM_rgba8; +GLEW_VAR_EXPORT GLboolean __GLEW_ARM_shader_framebuffer_fetch; +GLEW_VAR_EXPORT GLboolean __GLEW_ARM_shader_framebuffer_fetch_depth_stencil; GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_point_sprites; GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_texture_env_combine3; GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_texture_env_route; @@ -19709,52 +23110,86 @@ GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_mirror_once; GLEW_VAR_EXPORT GLboolean __GLEW_ATI_vertex_array_object; GLEW_VAR_EXPORT GLboolean __GLEW_ATI_vertex_attrib_array_object; GLEW_VAR_EXPORT GLboolean __GLEW_ATI_vertex_streams; +GLEW_VAR_EXPORT GLboolean __GLEW_EGL_KHR_context_flush_control; GLEW_VAR_EXPORT GLboolean __GLEW_EGL_NV_robustness_video_memory_purge; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_422_pixels; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_Cg_shader; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_EGL_image_array; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_YUV_target; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_abgr; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_base_instance; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_bgra; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_bindable_uniform; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_color; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_equation_separate; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_func_extended; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_func_separate; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_logic_op; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_minmax; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_subtract; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_buffer_storage; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_clear_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_clip_cull_distance; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_clip_volume_hint; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_cmyka; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_color_buffer_float; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_color_buffer_half_float; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_color_subtable; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_compiled_vertex_array; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_compressed_ETC1_RGB8_sub_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_conservative_depth; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_convolution; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_coordinate_frame; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_copy_image; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_copy_texture; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_cull_vertex; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_debug_label; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_debug_marker; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_depth_bounds_test; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_direct_state_access; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_discard_framebuffer; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_draw_buffers; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_draw_buffers2; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_draw_buffers_indexed; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_draw_elements_base_vertex; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_draw_instanced; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_draw_range_elements; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_external_buffer; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_float_blend; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_fog_coord; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_frag_depth; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_fragment_lighting; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_blit; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_multisample; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_multisample_blit_scaled; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_object; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_sRGB; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_geometry_point_size; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_geometry_shader; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_geometry_shader4; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_gpu_program_parameters; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_gpu_shader4; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_gpu_shader5; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_histogram; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_array_formats; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_func; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_material; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_instanced_arrays; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_light_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_map_buffer_range; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_memory_object; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_memory_object_fd; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_memory_object_win32; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_misc_attribute; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_multi_draw_arrays; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_multi_draw_indirect; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_multiple_textures; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_multisample; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_multisample_compatibility; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_multisampled_render_to_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_multisampled_render_to_texture2; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_multiview_draw_buffers; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_packed_depth_stencil; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_packed_float; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_packed_pixels; @@ -19767,17 +23202,35 @@ GLEW_VAR_EXPORT GLboolean __GLEW_EXT_polygon_offset; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_polygon_offset_clamp; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_post_depth_coverage; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_provoking_vertex; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_pvrtc_sRGB; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_raster_multisample; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_read_format_bgra; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_render_snorm; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_rescale_normal; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_sRGB; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_sRGB_write_control; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_scene_marker; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_secondary_color; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_semaphore; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_semaphore_fd; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_semaphore_win32; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_separate_shader_objects; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_separate_specular_color; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shader_framebuffer_fetch; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shader_group_vote; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shader_image_load_formatted; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shader_image_load_store; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shader_implicit_conversions; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shader_integer_mix; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shader_io_blocks; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shader_non_constant_global_initializers; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shader_pixel_local_storage; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shader_pixel_local_storage2; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shader_texture_lod; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shadow_funcs; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shadow_samplers; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shared_texture_palette; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_sparse_texture; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_sparse_texture2; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_stencil_clear_tag; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_stencil_two_side; @@ -19787,11 +23240,15 @@ GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture3D; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_array; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_buffer_object; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_astc_decode_mode; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_astc_decode_mode_rgb9e5; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_bptc; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_dxt1; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_latc; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_rgtc; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_s3tc; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_cube_map; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_cube_map_array; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_edge_clamp; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env_add; @@ -19799,24 +23256,35 @@ GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env_combine; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env_dot3; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_filter_anisotropic; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_filter_minmax; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_format_BGRA8888; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_integer; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_lod_bias; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_mirror_clamp; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_norm16; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_object; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_perturb_normal; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_rectangle; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_rg; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_sRGB; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_sRGB_R8; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_sRGB_RG8; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_sRGB_decode; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_shared_exponent; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_snorm; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_storage; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_swizzle; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_type_2_10_10_10_REV; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_view; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_timer_query; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_transform_feedback; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_unpack_subimage; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_array; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_array_bgra; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_array_setXXX; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_attrib_64bit; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_shader; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_weighting; +GLEW_VAR_EXPORT GLboolean __GLEW_EXT_win32_keyed_mutex; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_window_rectangles; GLEW_VAR_EXPORT GLboolean __GLEW_EXT_x11_sync_object; GLEW_VAR_EXPORT GLboolean __GLEW_GREMEDY_frame_terminator; @@ -19845,6 +23313,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_KHR_blend_equation_advanced_coherent; GLEW_VAR_EXPORT GLboolean __GLEW_KHR_context_flush_control; GLEW_VAR_EXPORT GLboolean __GLEW_KHR_debug; GLEW_VAR_EXPORT GLboolean __GLEW_KHR_no_error; +GLEW_VAR_EXPORT GLboolean __GLEW_KHR_parallel_shader_compile; GLEW_VAR_EXPORT GLboolean __GLEW_KHR_robust_buffer_access_behavior; GLEW_VAR_EXPORT GLboolean __GLEW_KHR_robustness; GLEW_VAR_EXPORT GLboolean __GLEW_KHR_texture_compression_astc_hdr; @@ -19861,11 +23330,16 @@ GLEW_VAR_EXPORT GLboolean __GLEW_NVX_blend_equation_advanced_multi_draw_buffers; GLEW_VAR_EXPORT GLboolean __GLEW_NVX_conditional_render; GLEW_VAR_EXPORT GLboolean __GLEW_NVX_gpu_memory_info; GLEW_VAR_EXPORT GLboolean __GLEW_NVX_linked_gpu_multicast; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_3dvision_settings; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_EGL_stream_consumer_external; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_alpha_to_coverage_dither_control; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_bgr; GLEW_VAR_EXPORT GLboolean __GLEW_NV_bindless_multi_draw_indirect; GLEW_VAR_EXPORT GLboolean __GLEW_NV_bindless_multi_draw_indirect_count; GLEW_VAR_EXPORT GLboolean __GLEW_NV_bindless_texture; GLEW_VAR_EXPORT GLboolean __GLEW_NV_blend_equation_advanced; GLEW_VAR_EXPORT GLboolean __GLEW_NV_blend_equation_advanced_coherent; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_blend_minmax_factor; GLEW_VAR_EXPORT GLboolean __GLEW_NV_blend_square; GLEW_VAR_EXPORT GLboolean __GLEW_NV_clip_space_w_scaling; GLEW_VAR_EXPORT GLboolean __GLEW_NV_command_list; @@ -19874,16 +23348,21 @@ GLEW_VAR_EXPORT GLboolean __GLEW_NV_conditional_render; GLEW_VAR_EXPORT GLboolean __GLEW_NV_conservative_raster; GLEW_VAR_EXPORT GLboolean __GLEW_NV_conservative_raster_dilate; GLEW_VAR_EXPORT GLboolean __GLEW_NV_conservative_raster_pre_snap_triangles; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_copy_buffer; GLEW_VAR_EXPORT GLboolean __GLEW_NV_copy_depth_to_color; GLEW_VAR_EXPORT GLboolean __GLEW_NV_copy_image; GLEW_VAR_EXPORT GLboolean __GLEW_NV_deep_texture3D; GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_buffer_float; GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_clamp; GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_range_unclamped; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_draw_buffers; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_draw_instanced; GLEW_VAR_EXPORT GLboolean __GLEW_NV_draw_texture; GLEW_VAR_EXPORT GLboolean __GLEW_NV_draw_vulkan_image; GLEW_VAR_EXPORT GLboolean __GLEW_NV_evaluators; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_explicit_attrib_location; GLEW_VAR_EXPORT GLboolean __GLEW_NV_explicit_multisample; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_fbo_color_attachments; GLEW_VAR_EXPORT GLboolean __GLEW_NV_fence; GLEW_VAR_EXPORT GLboolean __GLEW_NV_fill_rectangle; GLEW_VAR_EXPORT GLboolean __GLEW_NV_float_buffer; @@ -19894,8 +23373,11 @@ GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program2; GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program4; GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program_option; GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_shader_interlock; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_framebuffer_blit; GLEW_VAR_EXPORT GLboolean __GLEW_NV_framebuffer_mixed_samples; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_framebuffer_multisample; GLEW_VAR_EXPORT GLboolean __GLEW_NV_framebuffer_multisample_coverage; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_generate_mipmap_sRGB; GLEW_VAR_EXPORT GLboolean __GLEW_NV_geometry_program4; GLEW_VAR_EXPORT GLboolean __GLEW_NV_geometry_shader4; GLEW_VAR_EXPORT GLboolean __GLEW_NV_geometry_shader_passthrough; @@ -19906,23 +23388,36 @@ GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_program5_mem_extended; GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_program_fp64; GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_shader5; GLEW_VAR_EXPORT GLboolean __GLEW_NV_half_float; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_image_formats; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_instanced_arrays; GLEW_VAR_EXPORT GLboolean __GLEW_NV_internalformat_sample_query; GLEW_VAR_EXPORT GLboolean __GLEW_NV_light_max_exponent; GLEW_VAR_EXPORT GLboolean __GLEW_NV_multisample_coverage; GLEW_VAR_EXPORT GLboolean __GLEW_NV_multisample_filter_hint; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_non_square_matrices; GLEW_VAR_EXPORT GLboolean __GLEW_NV_occlusion_query; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_pack_subimage; GLEW_VAR_EXPORT GLboolean __GLEW_NV_packed_depth_stencil; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_packed_float; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_packed_float_linear; GLEW_VAR_EXPORT GLboolean __GLEW_NV_parameter_buffer_object; GLEW_VAR_EXPORT GLboolean __GLEW_NV_parameter_buffer_object2; GLEW_VAR_EXPORT GLboolean __GLEW_NV_path_rendering; GLEW_VAR_EXPORT GLboolean __GLEW_NV_path_rendering_shared_edge; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_pixel_buffer_object; GLEW_VAR_EXPORT GLboolean __GLEW_NV_pixel_data_range; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_platform_binary; GLEW_VAR_EXPORT GLboolean __GLEW_NV_point_sprite; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_polygon_mode; GLEW_VAR_EXPORT GLboolean __GLEW_NV_present_video; GLEW_VAR_EXPORT GLboolean __GLEW_NV_primitive_restart; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_read_depth; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_read_depth_stencil; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_read_stencil; GLEW_VAR_EXPORT GLboolean __GLEW_NV_register_combiners; GLEW_VAR_EXPORT GLboolean __GLEW_NV_register_combiners2; GLEW_VAR_EXPORT GLboolean __GLEW_NV_robustness_video_memory_purge; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_sRGB_formats; GLEW_VAR_EXPORT GLboolean __GLEW_NV_sample_locations; GLEW_VAR_EXPORT GLboolean __GLEW_NV_sample_mask_override_coverage; GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_atomic_counters; @@ -19931,19 +23426,29 @@ GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_atomic_float64; GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_atomic_fp16_vector; GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_atomic_int64; GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_buffer_load; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_noperspective_interpolation; GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_storage_buffer_object; GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_thread_group; GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_thread_shuffle; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_shadow_samplers_array; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_shadow_samplers_cube; GLEW_VAR_EXPORT GLboolean __GLEW_NV_stereo_view_rendering; GLEW_VAR_EXPORT GLboolean __GLEW_NV_tessellation_program5; GLEW_VAR_EXPORT GLboolean __GLEW_NV_texgen_emboss; GLEW_VAR_EXPORT GLboolean __GLEW_NV_texgen_reflection; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_array; GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_barrier; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_border_clamp; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_compression_latc; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_compression_s3tc; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_compression_s3tc_update; GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_compression_vtc; GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_env_combine4; GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_expand_normal; GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_multisample; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_npot_2D_mipmap; GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_rectangle; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_rectangle_compressed; GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_shader; GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_shader2; GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_shader3; @@ -19962,19 +23467,28 @@ GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program2_option; GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program3; GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program4; GLEW_VAR_EXPORT GLboolean __GLEW_NV_video_capture; +GLEW_VAR_EXPORT GLboolean __GLEW_NV_viewport_array; GLEW_VAR_EXPORT GLboolean __GLEW_NV_viewport_array2; GLEW_VAR_EXPORT GLboolean __GLEW_NV_viewport_swizzle; GLEW_VAR_EXPORT GLboolean __GLEW_OES_byte_coordinates; -GLEW_VAR_EXPORT GLboolean __GLEW_OES_compressed_paletted_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_OES_read_format; -GLEW_VAR_EXPORT GLboolean __GLEW_OES_single_precision; GLEW_VAR_EXPORT GLboolean __GLEW_OML_interlace; GLEW_VAR_EXPORT GLboolean __GLEW_OML_resample; GLEW_VAR_EXPORT GLboolean __GLEW_OML_subsample; GLEW_VAR_EXPORT GLboolean __GLEW_OVR_multiview; GLEW_VAR_EXPORT GLboolean __GLEW_OVR_multiview2; +GLEW_VAR_EXPORT GLboolean __GLEW_OVR_multiview_multisampled_render_to_texture; GLEW_VAR_EXPORT GLboolean __GLEW_PGI_misc_hints; GLEW_VAR_EXPORT GLboolean __GLEW_PGI_vertex_hints; +GLEW_VAR_EXPORT GLboolean __GLEW_QCOM_alpha_test; +GLEW_VAR_EXPORT GLboolean __GLEW_QCOM_binning_control; +GLEW_VAR_EXPORT GLboolean __GLEW_QCOM_driver_control; +GLEW_VAR_EXPORT GLboolean __GLEW_QCOM_extended_get; +GLEW_VAR_EXPORT GLboolean __GLEW_QCOM_extended_get2; +GLEW_VAR_EXPORT GLboolean __GLEW_QCOM_framebuffer_foveated; +GLEW_VAR_EXPORT GLboolean __GLEW_QCOM_perfmon_global_mode; +GLEW_VAR_EXPORT GLboolean __GLEW_QCOM_shader_framebuffer_fetch_noncoherent; +GLEW_VAR_EXPORT GLboolean __GLEW_QCOM_tiled_rendering; +GLEW_VAR_EXPORT GLboolean __GLEW_QCOM_writeonly_rendering; GLEW_VAR_EXPORT GLboolean __GLEW_REGAL_ES1_0_compatibility; GLEW_VAR_EXPORT GLboolean __GLEW_REGAL_ES1_1_compatibility; GLEW_VAR_EXPORT GLboolean __GLEW_REGAL_enable; @@ -19984,13 +23498,17 @@ GLEW_VAR_EXPORT GLboolean __GLEW_REGAL_log; GLEW_VAR_EXPORT GLboolean __GLEW_REGAL_proc_address; GLEW_VAR_EXPORT GLboolean __GLEW_REND_screen_coordinates; GLEW_VAR_EXPORT GLboolean __GLEW_S3_s3tc; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_clip_band_hint; GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_color_range; GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_detail_texture; GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_fog_function; GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_generate_mipmap; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_line_texgen; GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_multisample; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_multitexture; GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_pixel_texture; GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_point_line_texgen; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_shared_multisample; GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_sharpen_texture; GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture4D; GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_border_clamp; @@ -20001,37 +23519,90 @@ GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_select; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_async; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_async_histogram; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_async_pixel; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_bali_g_instruments; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_bali_r_instruments; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_bali_timer_instruments; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_blend_alpha_minmax; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_blend_cadd; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_blend_cmultiply; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_calligraphic_fragment; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_clipmap; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_color_matrix_accuracy; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_color_table_index_mode; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_complex_polar; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_convolution_accuracy; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_cube_map; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_cylinder_texgen; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_datapipe; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_decimation; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_depth_pass_instrument; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_depth_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_dvc; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_flush_raster; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fog_blend; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fog_factor_to_alpha; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fog_layers; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fog_offset; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fog_patchy; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fog_scale; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fog_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fragment_lighting_space; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fragment_specular_lighting; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fragments_instrument; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_framezoom; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_icc_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_igloo_interface; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_image_compression; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_impact_pixel_texture; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_instrument_error; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_interlace; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_ir_instrument1; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_line_quality_hint; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_list_priority; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_mpeg1; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_mpeg2; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_nonlinear_lighting_pervertex; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_nurbs_eval; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_occlusion_instrument; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_packed_6bytes; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_pixel_texture; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_pixel_texture_bits; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_pixel_texture_lod; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_pixel_tiles; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_polynomial_ffd; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_quad_mesh; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_reference_plane; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_resample; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_scalebias_hint; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_shadow; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_shadow_ambient; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_slim; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_spotlight_cutoff; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_sprite; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_subdiv_patch; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_subsample; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_tag_sample_buffer; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_add_env; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_coordinate_clamp; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_lod_bias; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_mipmap_anisotropic; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_multi_buffer; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_phase; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_range; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_scale_bias; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_supersample; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_vector_ops; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_vertex_array_object; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_vertex_preclip; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_vertex_preclip_hint; GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_ycrcb; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_ycrcb_subsample; +GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_ycrcba; GLEW_VAR_EXPORT GLboolean __GLEW_SGI_color_matrix; GLEW_VAR_EXPORT GLboolean __GLEW_SGI_color_table; +GLEW_VAR_EXPORT GLboolean __GLEW_SGI_complex; +GLEW_VAR_EXPORT GLboolean __GLEW_SGI_complex_type; +GLEW_VAR_EXPORT GLboolean __GLEW_SGI_fft; GLEW_VAR_EXPORT GLboolean __GLEW_SGI_texture_color_table; GLEW_VAR_EXPORT GLboolean __GLEW_SUNX_constant_data; GLEW_VAR_EXPORT GLboolean __GLEW_SUN_convolution_border_modes; @@ -20042,6 +23613,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_SUN_slice_accum; GLEW_VAR_EXPORT GLboolean __GLEW_SUN_triangle_list; GLEW_VAR_EXPORT GLboolean __GLEW_SUN_vertex; GLEW_VAR_EXPORT GLboolean __GLEW_WIN_phong_shading; +GLEW_VAR_EXPORT GLboolean __GLEW_WIN_scene_markerXXX; GLEW_VAR_EXPORT GLboolean __GLEW_WIN_specular_fog; GLEW_VAR_EXPORT GLboolean __GLEW_WIN_swap_hint; /* ------------------------------------------------------------------------- */ @@ -20052,6 +23624,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_WIN_swap_hint; #define GLEW_ERROR_NO_GL_VERSION 1 /* missing GL version */ #define GLEW_ERROR_GL_VERSION_10_ONLY 2 /* Need at least OpenGL 1.1 */ #define GLEW_ERROR_GLX_VERSION_11_ONLY 3 /* Need at least GLX 1.2 */ +#define GLEW_ERROR_NO_GLX_DISPLAY 4 /* Need GLX display for GLX support */ /* string codes */ #define GLEW_VERSION 1 @@ -20064,9 +23637,9 @@ GLEW_VAR_EXPORT GLboolean __GLEW_WIN_swap_hint; /* GLEW version info */ /* -VERSION 2.0.0 +VERSION 2.1.0 VERSION_MAJOR 2 -VERSION_MINOR 0 +VERSION_MINOR 1 VERSION_MICRO 0 */ diff --git a/ref/glew/include/GL/glxew.h b/ref/glew/include/GL/glxew.h index 1e2596d6..7e39c2fd 100644 --- a/ref/glew/include/GL/glxew.h +++ b/ref/glew/include/GL/glxew.h @@ -1,6 +1,6 @@ /* ** The OpenGL Extension Wrangler Library -** Copyright (C) 2008-2015, Nigel Stewart +** Copyright (C) 2008-2017, Nigel Stewart ** Copyright (C) 2002-2008, Milan Ikits ** Copyright (C) 2002-2008, Marcelo E. Magallon ** Copyright (C) 2002, Lev Povalahev @@ -392,10 +392,6 @@ typedef Bool ( * PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC) (GLXContext ctx); #ifndef GLX_ARB_context_flush_control #define GLX_ARB_context_flush_control 1 -#define GLX_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB 0x0000 -#define GLX_CONTEXT_RELEASE_BEHAVIOR_ARB 0x2097 -#define GLX_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB 0x2098 - #define GLXEW_ARB_context_flush_control GLXEW_GET_VAR(__GLXEW_ARB_context_flush_control) #endif /* GLX_ARB_context_flush_control */ @@ -419,6 +415,15 @@ typedef GLXContext ( * PFNGLXCREATECONTEXTATTRIBSARBPROC) (Display* dpy, GLXFBCo #endif /* GLX_ARB_create_context */ +/* -------------------- GLX_ARB_create_context_no_error -------------------- */ + +#ifndef GLX_ARB_create_context_no_error +#define GLX_ARB_create_context_no_error 1 + +#define GLXEW_ARB_create_context_no_error GLXEW_GET_VAR(__GLXEW_ARB_create_context_no_error) + +#endif /* GLX_ARB_create_context_no_error */ + /* --------------------- GLX_ARB_create_context_profile -------------------- */ #ifndef GLX_ARB_create_context_profile @@ -1684,6 +1689,7 @@ GLXEW_VAR_EXPORT GLboolean __GLXEW_3DFX_multisample; GLXEW_VAR_EXPORT GLboolean __GLXEW_AMD_gpu_association; GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_context_flush_control; GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_create_context; +GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_create_context_no_error; GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_create_context_profile; GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_create_context_robustness; GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_fbconfig_float; diff --git a/ref/glew/include/GL/wglew.h b/ref/glew/include/GL/wglew.h index 71ee0f30..2097c0f0 100644 --- a/ref/glew/include/GL/wglew.h +++ b/ref/glew/include/GL/wglew.h @@ -1,6 +1,6 @@ /* ** The OpenGL Extension Wrangler Library -** Copyright (C) 2008-2015, Nigel Stewart +** Copyright (C) 2008-2017, Nigel Stewart ** Copyright (C) 2002-2008, Milan Ikits ** Copyright (C) 2002-2008, Marcelo E. Magallon ** Copyright (C) 2002, Lev Povalahev @@ -188,10 +188,6 @@ typedef BOOL (WINAPI * PFNWGLSAVEBUFFERREGIONARBPROC) (HANDLE hRegion, int x, in #ifndef WGL_ARB_context_flush_control #define WGL_ARB_context_flush_control 1 -#define WGL_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB 0x0000 -#define WGL_CONTEXT_RELEASE_BEHAVIOR_ARB 0x2097 -#define WGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB 0x2098 - #define WGLEW_ARB_context_flush_control WGLEW_GET_VAR(__WGLEW_ARB_context_flush_control) #endif /* WGL_ARB_context_flush_control */ @@ -218,6 +214,15 @@ typedef HGLRC (WINAPI * PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShar #endif /* WGL_ARB_create_context */ +/* -------------------- WGL_ARB_create_context_no_error -------------------- */ + +#ifndef WGL_ARB_create_context_no_error +#define WGL_ARB_create_context_no_error 1 + +#define WGLEW_ARB_create_context_no_error WGLEW_GET_VAR(__WGLEW_ARB_create_context_no_error) + +#endif /* WGL_ARB_create_context_no_error */ + /* --------------------- WGL_ARB_create_context_profile -------------------- */ #ifndef WGL_ARB_create_context_profile @@ -506,6 +511,19 @@ typedef BOOL (WINAPI * PFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, con #endif /* WGL_ATI_render_texture_rectangle */ +/* --------------------------- WGL_EXT_colorspace -------------------------- */ + +#ifndef WGL_EXT_colorspace +#define WGL_EXT_colorspace 1 + +#define WGL_COLORSPACE_SRGB_EXT 0x3089 +#define WGL_COLORSPACE_LINEAR_EXT 0x308A +#define WGL_COLORSPACE_EXT 0x309D + +#define WGLEW_EXT_colorspace WGLEW_GET_VAR(__WGLEW_EXT_colorspace) + +#endif /* WGL_EXT_colorspace */ + /* ------------------- WGL_EXT_create_context_es2_profile ------------------ */ #ifndef WGL_EXT_create_context_es2_profile @@ -1355,6 +1373,7 @@ WGLEW_VAR_EXPORT GLboolean __WGLEW_AMD_gpu_association; WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_buffer_region; WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_context_flush_control; WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_create_context; +WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_create_context_no_error; WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_create_context_profile; WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_create_context_robustness; WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_extensions_string; @@ -1369,6 +1388,7 @@ WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_robustness_application_isolation; WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_robustness_share_group_isolation; WGLEW_VAR_EXPORT GLboolean __WGLEW_ATI_pixel_format_float; WGLEW_VAR_EXPORT GLboolean __WGLEW_ATI_render_texture_rectangle; +WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_colorspace; WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_create_context_es2_profile; WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_create_context_es_profile; WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_depth_float; diff --git a/ref/glew/version.txt b/ref/glew/version.txt index a7f61efd..e29d0623 100644 --- a/ref/glew/version.txt +++ b/ref/glew/version.txt @@ -1 +1 @@ -glew-2.0.0 \ No newline at end of file +glew-2.1.0 \ No newline at end of file diff --git a/ref/glfw/docs/html/annotated.html b/ref/glfw/docs/html/annotated.html deleted file mode 100644 index de24b3a1..00000000 --- a/ref/glfw/docs/html/annotated.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - -GLFW: Data Structures - - - - - - - - - - - -
- - - - - - -
- -
-
- - -
- -
- -
-
-
Data Structures
-
-
-
Here are the data structures with brief descriptions:
- - - - -
 CGLFWgammarampGamma ramp
 CGLFWimageImage data
 CGLFWvidmodeVideo mode type
-
-
- - - diff --git a/ref/glfw/docs/html/arrowdown.png b/ref/glfw/docs/html/arrowdown.png deleted file mode 100644 index 0b63f6d3..00000000 Binary files a/ref/glfw/docs/html/arrowdown.png and /dev/null differ diff --git a/ref/glfw/docs/html/arrowright.png b/ref/glfw/docs/html/arrowright.png deleted file mode 100644 index c6ee22f9..00000000 Binary files a/ref/glfw/docs/html/arrowright.png and /dev/null differ diff --git a/ref/glfw/docs/html/bug.html b/ref/glfw/docs/html/bug.html index 8f296a94..321b5145 100644 --- a/ref/glfw/docs/html/bug.html +++ b/ref/glfw/docs/html/bug.html @@ -3,7 +3,7 @@ - + GLFW: Bug List @@ -11,9 +11,6 @@ - @@ -21,45 +18,31 @@
- + - + + + +
-
+
Bug List
-
Page Window guide
-
On some Linux systems, creating contexts via both the native and EGL APIs in a single process will cause the application to segfault. Stick to one API or the other on Linux for now.
+
Page Window guide
+
On some Linux systems, creating contexts via both the native and EGL APIs in a single process will cause the application to segfault. Stick to one API or the other on Linux for now.
-
+
+
diff --git a/ref/glfw/docs/html/build_8dox.html b/ref/glfw/docs/html/build_8dox.html index 3b7e1146..74abbdb4 100644 --- a/ref/glfw/docs/html/build_8dox.html +++ b/ref/glfw/docs/html/build_8dox.html @@ -3,7 +3,7 @@ - + GLFW: build.dox File Reference @@ -11,9 +11,6 @@ - @@ -21,51 +18,31 @@
- + - - + + + +
diff --git a/ref/glfw/docs/html/build_guide.html b/ref/glfw/docs/html/build_guide.html index 984e6392..dd093b88 100644 --- a/ref/glfw/docs/html/build_guide.html +++ b/ref/glfw/docs/html/build_guide.html @@ -3,7 +3,7 @@ - + GLFW: Building applications @@ -11,9 +11,6 @@ - @@ -21,45 +18,31 @@
- + - + + + +
-
+
Building applications
@@ -88,8 +71,8 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  • With CMake and GLFW source
  • With CMake and installed GLFW binaries
  • With makefiles and pkg-config on Unix
  • -
  • With Xcode on OS X
  • -
  • With command-line on OS X
  • +
  • With Xcode on macOS
  • +
  • With command-line on macOS
  • @@ -98,90 +81,96 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');

    This is not a tutorial on compilation or linking. It assumes basic understanding of how to compile and link a C program as well as how to use the specific compiler of your chosen development environment. The compilation and linking process should be explained in your C programming material and in the documentation for your development environment.

    Including the GLFW header file

    -

    In the source files of your application where you use OpenGL or GLFW, you should include the GLFW header file, i.e.:

    -
    #include <GLFW/glfw3.h>

    The GLFW header declares the GLFW API and by default also includes the OpenGL header of your development environment, which in turn defines all the constants, types and function prototypes of the OpenGL API.

    -

    The GLFW header also defines everything necessary for your OpenGL header to function. For example, under Windows you are normally required to include windows.h before the OpenGL header, which would pollute your code namespace with the entire Win32 API.

    -

    Instead, the GLFW header takes care of this for you, not by including windows.h, but by duplicating only the very few necessary parts of it. It does this only when needed, so if windows.h is included, the GLFW header does not try to redefine those symbols. The reverse is not true, i.e. windows.h cannot cope if any of its symbols have already been defined.

    +

    You should include the GLFW header in the source files where you use OpenGL or GLFW.

    +
    #include <GLFW/glfw3.h>

    This header declares the GLFW API and by default also includes the OpenGL header from your development environment. See below for how to control this.

    +

    The GLFW header also defines any platform-specific macros needed by your OpenGL header, so it can be included without needing any window system headers.

    +

    For example, under Windows you are normally required to include windows.h before the OpenGL header, which would bring in the whole Win32 API. The GLFW header duplicates the small number of macros needed.

    +

    It does this only when needed, so if windows.h is included, the GLFW header does not try to redefine those symbols. The reverse is not true, i.e. windows.h cannot cope if any of its symbols have already been defined.

    In other words:

    • Do not include the OpenGL headers yourself, as GLFW does this for you
    • Do not include windows.h or other platform-specific headers unless you plan on using those APIs directly
    • If you do need to include such headers, do it before including the GLFW header and it will handle this
    -

    If you are using an OpenGL extension loading library such as glad, the extension loader header should either be included before the GLFW one, or the GLFW_INCLUDE_NONE macro (described below) should be defined.

    -

    +

    If you are using an OpenGL extension loading library such as glad, the extension loader header should be included before the GLFW one.

    +
    #include <glad/gl.h>
    #include <GLFW/glfw3.h>

    Alternatively the GLFW_INCLUDE_NONE macro (described below) can be used to prevent the GLFW header from including the OpenGL header.

    +
    #define GLFW_INCLUDE_NONE
    #include <GLFW/glfw3.h>
    #include <glad/gl.h>

    GLFW header option macros

    These macros may be defined before the inclusion of the GLFW header and affect its behavior.

    -

    GLFW_DLL is required on Windows when using the GLFW DLL, to tell the compiler that the GLFW functions are defined in a DLL.

    +

    GLFW_DLL is required on Windows when using the GLFW DLL, to tell the compiler that the GLFW functions are defined in a DLL.

    The following macros control which OpenGL or OpenGL ES API header is included. Only one of these may be defined at a time.

    -

    GLFW_INCLUDE_GLCOREARB makes the GLFW header include the modern GL/glcorearb.h header (OpenGL/gl3.h on OS X) instead of the regular OpenGL header.

    -

    GLFW_INCLUDE_ES1 makes the GLFW header include the OpenGL ES 1.x GLES/gl.h header instead of the regular OpenGL header.

    -

    GLFW_INCLUDE_ES2 makes the GLFW header include the OpenGL ES 2.0 GLES2/gl2.h header instead of the regular OpenGL header.

    -

    GLFW_INCLUDE_ES3 makes the GLFW header include the OpenGL ES 3.0 GLES3/gl3.h header instead of the regular OpenGL header.

    -

    GLFW_INCLUDE_ES31 makes the GLFW header include the OpenGL ES 3.1 GLES3/gl31.h header instead of the regular OpenGL header.

    -

    GLFW_INCLUDE_VULKAN makes the GLFW header include the Vulkan vulkan/vulkan.h header instead of the regular OpenGL header.

    -

    GLFW_INCLUDE_NONE makes the GLFW header not include any OpenGL or OpenGL ES API header. This is useful in combination with an extension loading library.

    -

    If none of the above inclusion macros are defined, the standard OpenGL GL/gl.h header (OpenGL/gl.h on OS X) is included.

    +

    GLFW_INCLUDE_GLCOREARB makes the GLFW header include the modern GL/glcorearb.h header (OpenGL/gl3.h on macOS) instead of the regular OpenGL header.

    +

    GLFW_INCLUDE_ES1 makes the GLFW header include the OpenGL ES 1.x GLES/gl.h header instead of the regular OpenGL header.

    +

    GLFW_INCLUDE_ES2 makes the GLFW header include the OpenGL ES 2.0 GLES2/gl2.h header instead of the regular OpenGL header.

    +

    GLFW_INCLUDE_ES3 makes the GLFW header include the OpenGL ES 3.0 GLES3/gl3.h header instead of the regular OpenGL header.

    +

    GLFW_INCLUDE_ES31 makes the GLFW header include the OpenGL ES 3.1 GLES3/gl31.h header instead of the regular OpenGL header.

    +

    GLFW_INCLUDE_ES31 makes the GLFW header include the OpenGL ES 3.2 GLES3/gl32.h header instead of the regular OpenGL header.

    +

    GLFW_INCLUDE_NONE makes the GLFW header not include any OpenGL or OpenGL ES API header. This is useful in combination with an extension loading library.

    +

    If none of the above inclusion macros are defined, the standard OpenGL GL/gl.h header (OpenGL/gl.h on macOS) is included.

    The following macros control the inclusion of additional API headers. Any number of these may be defined simultaneously, and/or together with one of the above macros.

    -

    GLFW_INCLUDE_GLEXT makes the GLFW header include the appropriate extension header for the OpenGL or OpenGL ES header selected above after and in addition to that header.

    -

    GLFW_INCLUDE_GLU makes the header include the GLU header in addition to the header selected above. This should only be used with the standard OpenGL header and only for compatibility with legacy code. GLU has been deprecated and should not be used in new code.

    +

    GLFW_INCLUDE_VULKAN makes the GLFW header include the Vulkan vulkan/vulkan.h header in addition to any selected OpenGL or OpenGL ES header.

    +

    GLFW_INCLUDE_GLEXT makes the GLFW header include the appropriate extension header for the OpenGL or OpenGL ES header selected above after and in addition to that header.

    +

    GLFW_INCLUDE_GLU makes the header include the GLU header in addition to the header selected above. This should only be used with the standard OpenGL header and only for compatibility with legacy code. GLU has been deprecated and should not be used in new code.

    Note
    GLFW does not provide any of the API headers mentioned above. They must be provided by your development environment or your OpenGL, OpenGL ES or Vulkan SDK.
    None of these macros may be defined during the compilation of GLFW itself. If your build includes GLFW and you define any these in your build files, make sure they are not applied to the GLFW sources.

    Link with the right libraries

    GLFW is essentially a wrapper of various platform-specific APIs and therefore needs to link against many different system libraries. If you are using GLFW as a shared library / dynamic library / DLL then it takes care of these links. However, if you are using GLFW as a static library then your executable will need to link against these libraries.

    -

    On Windows and OS X, the list of system libraries is static and can be hard-coded into your build environment. See the section for your development environment below. On Linux and other Unix-like operating systems, the list varies but can be retrieved in various ways as described below.

    -

    A good general introduction to linking is Beginner's Guide to Linkers by David Drysdale.

    +

    On Windows and macOS, the list of system libraries is static and can be hard-coded into your build environment. See the section for your development environment below. On Linux and other Unix-like operating systems, the list varies but can be retrieved in various ways as described below.

    +

    A good general introduction to linking is Beginner's Guide to Linkers by David Drysdale.

    With MinGW or Visual C++ on Windows

    The static version of the GLFW library is named glfw3. When using this version, it is also necessary to link with some libraries that GLFW uses.

    -

    When linking an application under Windows that uses the static version of GLFW, you must link with opengl32. On some versions of MinGW, you must also explicitly link with gdi32, while other versions of MinGW include it in the set of default libraries along with other dependencies like user32 and kernel32. If you are using GLU, you must also link with glu32.

    -

    The link library for the GLFW DLL is named glfw3dll. When compiling an application that uses the DLL version of GLFW, you need to define the GLFW_DLL macro before any inclusion of the GLFW header. This can be done either with a compiler switch or by defining it in your source code.

    -

    An application using the GLFW DLL does not need to link against any of its dependencies, but you still have to link against opengl32 if your application uses OpenGL and glu32 if it uses GLU.

    +

    When using MinGW to link an application with the static version of GLFW, you must also explicitly link with gdi32. Other toolchains including MinGW-w64 include it in the set of default libraries along with other dependencies like user32 and kernel32.

    +

    If you are using GLU, you must also link with glu32.

    +

    The link library for the GLFW DLL is named glfw3dll. When compiling an application that uses the DLL version of GLFW, you need to define the GLFW_DLL macro before any inclusion of the GLFW header. This can be done either with a compiler switch or by defining it in your source code.

    +

    An application using the GLFW DLL does not need to link against any of its dependencies, but you still have to link against glu32 if it uses GLU.

    With CMake and GLFW source

    This section is about using CMake to compile and link GLFW along with your application. If you want to use an installed binary instead, see With CMake and installed GLFW binaries.

    -

    With just a few changes to your CMakeLists.txt you can have the GLFW source tree built along with your application.

    +

    With a few changes to your CMakeLists.txt you can have the GLFW source tree built along with your application.

    When including GLFW as part of your build, you probably don't want to build the GLFW tests, examples and documentation. To disable these, set the corresponding cache variables before adding the GLFW source tree.

    -
    set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
    set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
    set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)

    Then add the root directory of the GLFW source tree to your project. This will add the glfw target and the necessary cache variables to your project.

    -
    1 add_subdirectory(path/to/glfw)

    Once GLFW has been added to the project, link against it with the glfw target. This adds all link-time dependencies of GLFW as it is currently configured, the include directory for the GLFW header and, when applicable, the GLFW_DLL macro.

    -
    1 target_link_libraries(myapp glfw)

    Note that the dependencies do not include OpenGL or GLU, as GLFW loads any OpenGL, OpenGL ES or Vulkan libraries it needs at runtime and does not use GLU. If your application calls OpenGL directly, instead of using a modern extension loader library you can find it by requiring the OpenGL package.

    -
    1 find_package(OpenGL REQUIRED)

    If OpenGL is found, the OPENGL_FOUND variable is true and the OPENGL_INCLUDE_DIR and OPENGL_gl_LIBRARY cache variables can be used.

    -
    1 target_include_directories(myapp ${OPENGL_INCLUDE_DIR})
    2 target_link_libraries(myapp ${OPENGL_gl_LIBRARY})

    The OpenGL CMake package also looks for GLU. If GLU is found, the OPENGL_GLU_FOUND variable is true and the OPENGL_INCLUDE_DIR and OPENGL_glu_LIBRARY cache variables can be used.

    -
    1 target_link_libraries(myapp ${OPENGL_glu_LIBRARY})
    Note
    GLU has been deprecated and should not be used in new code, but some legacy code requires it.
    +
    set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
    set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
    set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)

    Then add the root directory of the GLFW source tree to your project. This will add the glfw target and the necessary cache variables to your project.

    +
    add_subdirectory(path/to/glfw)

    Once GLFW has been added to the project, link against it with the glfw target. This adds all link-time dependencies of GLFW as it is currently configured, the include directory for the GLFW header and, when applicable, the GLFW_DLL macro.

    +
    target_link_libraries(myapp glfw)

    Note that the dependencies do not include OpenGL or GLU, as GLFW loads any OpenGL, OpenGL ES or Vulkan libraries it needs at runtime and does not use GLU. If your application calls OpenGL directly, instead of using a modern extension loader library you can find it by requiring the OpenGL package.

    +
    find_package(OpenGL REQUIRED)

    If OpenGL is found, the OPENGL_FOUND variable is true and the OPENGL_INCLUDE_DIR and OPENGL_gl_LIBRARY cache variables can be used.

    +
    target_include_directories(myapp PUBLIC ${OPENGL_INCLUDE_DIR})
    target_link_libraries(myapp ${OPENGL_gl_LIBRARY})

    The OpenGL CMake package also looks for GLU. If GLU is found, the OPENGL_GLU_FOUND variable is true and the OPENGL_INCLUDE_DIR and OPENGL_glu_LIBRARY cache variables can be used.

    +
    target_link_libraries(myapp ${OPENGL_glu_LIBRARY})
    Note
    GLU has been deprecated and should not be used in new code, but some legacy code requires it. See the section on GLU in the transition guide for suggested replacements.

    With CMake and installed GLFW binaries

    This section is about using CMake to link GLFW after it has been built and installed. If you want to build it along with your application instead, see With CMake and GLFW source.

    -

    With just a few changes to your CMakeLists.txt, you can locate the package and target files generated when GLFW is installed.

    -
    1 find_package(glfw3 3.2 REQUIRED)

    Note that the dependencies do not include OpenGL or GLU, as GLFW loads any OpenGL, OpenGL ES or Vulkan libraries it needs at runtime and does not use GLU. If your application calls OpenGL directly, instead of using a modern extension loader library you can find it by requiring the OpenGL package.

    -
    1 find_package(OpenGL REQUIRED)

    If OpenGL is found, the OPENGL_FOUND variable is true and the OPENGL_INCLUDE_DIR and OPENGL_gl_LIBRARY cache variables can be used.

    -
    1 target_include_directories(myapp ${OPENGL_INCLUDE_DIR})
    2 target_link_libraries(myapp ${OPENGL_gl_LIBRARY})

    The OpenGL CMake package also looks for GLU. If GLU is found, the OPENGL_GLU_FOUND variable is true and the OPENGL_INCLUDE_DIR and OPENGL_glu_LIBRARY cache variables can be used.

    -
    1 target_link_libraries(myapp ${OPENGL_glu_LIBRARY})
    Note
    GLU has been deprecated and should not be used in new code, but some legacy code requires it.
    +

    With a few changes to your CMakeLists.txt you can locate the package and target files generated when GLFW is installed.

    +
    find_package(glfw3 3.3 REQUIRED)

    Once GLFW has been added to the project, link against it with the glfw target. This adds all link-time dependencies of GLFW as it is currently configured, the include directory for the GLFW header and, when applicable, the GLFW_DLL macro.

    +
    target_link_libraries(myapp glfw)

    Note that the dependencies do not include OpenGL or GLU, as GLFW loads any OpenGL, OpenGL ES or Vulkan libraries it needs at runtime and does not use GLU. If your application calls OpenGL directly, instead of using a modern extension loader library you can find it by requiring the OpenGL package.

    +
    find_package(OpenGL REQUIRED)

    If OpenGL is found, the OPENGL_FOUND variable is true and the OPENGL_INCLUDE_DIR and OPENGL_gl_LIBRARY cache variables can be used.

    +
    target_include_directories(myapp PUBLIC ${OPENGL_INCLUDE_DIR})
    target_link_libraries(myapp ${OPENGL_gl_LIBRARY})

    The OpenGL CMake package also looks for GLU. If GLU is found, the OPENGL_GLU_FOUND variable is true and the OPENGL_INCLUDE_DIR and OPENGL_glu_LIBRARY cache variables can be used.

    +
    target_link_libraries(myapp ${OPENGL_glu_LIBRARY})
    Note
    GLU has been deprecated and should not be used in new code, but some legacy code requires it. See the section on GLU in the transition guide for suggested replacements.

    With makefiles and pkg-config on Unix

    -

    GLFW supports pkg-config, and the glfw3.pc pkg-config file is generated when the GLFW library is built and is installed along with it. A pkg-config file describes all necessary compile-time and link-time flags and dependencies needed to use a library. When they are updated or if they differ between systems, you will get the correct ones automatically.

    +

    GLFW supports pkg-config, and the glfw3.pc pkg-config file is generated when the GLFW library is built and is installed along with it. A pkg-config file describes all necessary compile-time and link-time flags and dependencies needed to use a library. When they are updated or if they differ between systems, you will get the correct ones automatically.

    A typical compile and link command-line when using the static version of the GLFW library may look like this:

    -
    1 cc `pkg-config --cflags glfw3` -o myprog myprog.c `pkg-config --static --libs glfw3`

    If you are using the shared version of the GLFW library, simply omit the --static flag.

    -
    1 cc `pkg-config --cflags glfw3` -o myprog myprog.c `pkg-config --libs glfw3`

    You can also use the glfw3.pc file without installing it first, by using the PKG_CONFIG_PATH environment variable.

    -
    1 env PKG_CONFIG_PATH=path/to/glfw/src cc `pkg-config --cflags glfw3` -o myprog myprog.c `pkg-config --libs glfw3`

    The dependencies do not include OpenGL or GLU, as GLFW loads any OpenGL, OpenGL ES or Vulkan libraries it needs at runtime and does not use GLU. On OS X, GLU is built into the OpenGL framework, so if you need GLU you don't need to do anything extra. If you need GLU and are using Linux or BSD, you should add the glu pkg-config package.

    -
    1 cc `pkg-config --cflags glfw3 glu` -o myprog myprog.c `pkg-config --libs glfw3 glu`
    Note
    GLU has been deprecated and should not be used in new code, but some legacy code requires it.
    +
    cc `pkg-config --cflags glfw3` -o myprog myprog.c `pkg-config --static --libs glfw3`

    If you are using the shared version of the GLFW library, omit the --static flag.

    +
    cc `pkg-config --cflags glfw3` -o myprog myprog.c `pkg-config --libs glfw3`

    You can also use the glfw3.pc file without installing it first, by using the PKG_CONFIG_PATH environment variable.

    +
    env PKG_CONFIG_PATH=path/to/glfw/src cc `pkg-config --cflags glfw3` -o myprog myprog.c `pkg-config --libs glfw3`

    The dependencies do not include OpenGL or GLU, as GLFW loads any OpenGL, OpenGL ES or Vulkan libraries it needs at runtime and does not use GLU. On macOS, GLU is built into the OpenGL framework, so if you need GLU you don't need to do anything extra. If you need GLU and are using Linux or BSD, you should add the glu pkg-config package.

    +
    cc `pkg-config --cflags glfw3 glu` -o myprog myprog.c `pkg-config --libs glfw3 glu`
    Note
    GLU has been deprecated and should not be used in new code, but some legacy code requires it. See the section on GLU in the transition guide for suggested replacements.

    If you are using the static version of the GLFW library, make sure you don't link statically against GLU.

    -
    1 cc `pkg-config --cflags glfw3 glu` -o myprog myprog.c `pkg-config --static --libs glfw3` `pkg-config --libs glu`

    -With Xcode on OS X

    -

    If you are using the dynamic library version of GLFW, simply add it to the project dependencies.

    +
    cc `pkg-config --cflags glfw3 glu` -o myprog myprog.c `pkg-config --static --libs glfw3` `pkg-config --libs glu`

    +With Xcode on macOS

    +

    If you are using the dynamic library version of GLFW, add it to the project dependencies.

    If you are using the static library version of GLFW, add it and the Cocoa, OpenGL, IOKit and CoreVideo frameworks to the project as dependencies. They can all be found in /System/Library/Frameworks.

    -With command-line on OS X

    -

    It is recommended that you use pkg-config when building from the command line on OS X. That way you will get any new dependencies added automatically. If you still wish to build manually, you need to add the required frameworks and libraries to your command-line yourself using the -l and -framework switches.

    +With command-line on macOS +

    It is recommended that you use pkg-config when building from the command line on macOS. That way you will get any new dependencies added automatically. If you still wish to build manually, you need to add the required frameworks and libraries to your command-line yourself using the -l and -framework switches.

    If you are using the dynamic GLFW library, which is named libglfw.3.dylib, do:

    -
    1 cc -o myprog myprog.c -lglfw -framework Cocoa -framework OpenGL -framework IOKit -framework CoreVideo

    If you are using the static library, named libglfw3.a, substitute -lglfw3 for -lglfw.

    +
    cc -o myprog myprog.c -lglfw -framework Cocoa -framework OpenGL -framework IOKit -framework CoreVideo

    If you are using the static library, named libglfw3.a, substitute -lglfw3 for -lglfw.

    Note that you do not add the .framework extension to a framework when linking against it from the command-line.

    -

    The OpenGL framework contains both the OpenGL and GLU APIs, so there is nothing special to do when using GLU. Also note that even though your machine may have libGL-style OpenGL libraries, they are for use with the X Window System and will not work with the OS X native version of GLFW.

    -
    +

    The OpenGL framework contains both the OpenGL and GLU APIs, so there is nothing special to do when using GLU. Also note that even though your machine may have libGL-style OpenGL libraries, they are for use with the X Window System and will not work with the macOS native version of GLFW.

    +
    +
    diff --git a/ref/glfw/docs/html/classes.html b/ref/glfw/docs/html/classes.html deleted file mode 100644 index 19c81fa3..00000000 --- a/ref/glfw/docs/html/classes.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - -GLFW: Data Structure Index - - - - - - - - - - - -
    - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    -
    Data Structure Index
    -
    -
    - - - - - - -
      G  
    -
    GLFWimage   GLFWvidmode   
    GLFWgammaramp   
    - -
    - - - diff --git a/ref/glfw/docs/html/compat_8dox.html b/ref/glfw/docs/html/compat_8dox.html index ae2c8dc0..3b19cb16 100644 --- a/ref/glfw/docs/html/compat_8dox.html +++ b/ref/glfw/docs/html/compat_8dox.html @@ -3,7 +3,7 @@ - + GLFW: compat.dox File Reference @@ -11,9 +11,6 @@ - @@ -21,51 +18,31 @@
    - + - - + + + +
    diff --git a/ref/glfw/docs/html/compat_guide.html b/ref/glfw/docs/html/compat_guide.html index 21abb715..ff4f8b53 100644 --- a/ref/glfw/docs/html/compat_guide.html +++ b/ref/glfw/docs/html/compat_guide.html @@ -3,7 +3,7 @@ - + GLFW: Standards conformance @@ -11,9 +11,6 @@ - @@ -21,45 +18,31 @@
    - + - + + + +
    -
    +
    Standards conformance

    Table of Contents

    @@ -93,17 +77,27 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');

    The information in this guide is not a part of GLFW API, but merely preconditions for some parts of the library to function on a given machine. Any part of this information may change in future versions of GLFW and that will not be considered a breaking API change.

    X11 extensions, protocols and IPC standards

    -

    As GLFW uses Xlib directly, without any intervening toolkit library, it has sole responsibility for interacting well with the many and varied window managers in use on Unix-like systems. In order for applications and window managers to work well together, a number of standards and conventions have been developed that regulate behavior outside the scope of the X11 API; most importantly the Inter-Client Communication Conventions Manual (ICCCM) and Extended Window Manager Hints (EWMH) standards.

    +

    As GLFW uses Xlib directly, without any intervening toolkit library, it has sole responsibility for interacting well with the many and varied window managers in use on Unix-like systems. In order for applications and window managers to work well together, a number of standards and conventions have been developed that regulate behavior outside the scope of the X11 API; most importantly the Inter-Client Communication Conventions Manual (ICCCM) and Extended Window Manager Hints (EWMH) standards.

    GLFW uses the _MOTIF_WM_HINTS window property to support borderless windows. If the running window manager does not support this property, the GLFW_DECORATED hint will have no effect.

    GLFW uses the ICCCM WM_DELETE_WINDOW protocol to intercept the user attempting to close the GLFW window. If the running window manager does not support this protocol, the close callback will never be called.

    GLFW uses the EWMH _NET_WM_PING protocol, allowing the window manager notify the user when the application has stopped responding, i.e. when it has ceased to process events. If the running window manager does not support this protocol, the user will not be notified if the application locks up.

    GLFW uses the EWMH _NET_WM_STATE_FULLSCREEN window state to tell the window manager to make the GLFW window full screen. If the running window manager does not support this state, full screen windows may not work properly. GLFW has a fallback code path in case this state is unavailable, but every window manager behaves slightly differently in this regard.

    GLFW uses the EWMH _NET_WM_BYPASS_COMPOSITOR window property to tell a compositing window manager to un-redirect full screen GLFW windows. If the running window manager uses compositing but does not support this property then additional copying may be performed for each buffer swap of full screen windows.

    -

    GLFW uses the clipboard manager protocol to push a clipboard string (i.e. selection) owned by a GLFW window about to be destroyed to the clipboard manager. If there is no running clipboard manager, the clipboard string will be unavailable once the window has been destroyed.

    -

    GLFW uses the X drag-and-drop protocol to provide file drop events. If the application originating the drag does not support this protocol, drag and drop will not work.

    +

    GLFW uses the clipboard manager protocol to push a clipboard string (i.e. selection) owned by a GLFW window about to be destroyed to the clipboard manager. If there is no running clipboard manager, the clipboard string will be unavailable once the window has been destroyed.

    +

    GLFW uses the X drag-and-drop protocol to provide file drop events. If the application originating the drag does not support this protocol, drag and drop will not work.

    GLFW uses the XRandR 1.3 extension to provide multi-monitor support. If the running X server does not support this version of this extension, multi-monitor support will not function and only a single, desktop-spanning monitor will be reported.

    GLFW uses the XRandR 1.3 and Xf86vidmode extensions to provide gamma ramp support. If the running X server does not support either or both of these extensions, gamma ramp support will not function.

    GLFW uses the Xkb extension and detectable auto-repeat to provide keyboard input. If the running X server does not support this extension, a non-Xkb fallback path is used.

    +

    GLFW uses the XInput2 extension to provide raw, non-accelerated mouse motion when the cursor is disabled. If the running X server does not support this extension, regular accelerated mouse motion will be used.

    +

    GLFW uses both the XRender extension and the compositing manager to support transparent window framebuffers. If the running X server does not support this extension or there is no running compositing manager, the GLFW_TRANSPARENT_FRAMEBUFFER framebuffer hint will have no effect.

    +

    +Wayland protocols and IPC standards

    +

    As GLFW uses libwayland directly, without any intervening toolkit library, it has sole responsibility for interacting well with every compositor in use on Unix-like systems. Most of the features are provided by the core protocol, while cursor support is provided by the libwayland-cursor helper library, EGL integration by libwayland-egl, and keyboard handling by libxkbcommon. In addition, GLFW uses some protocols from wayland-protocols to provide additional features if the compositor supports them.

    +

    GLFW uses xkbcommon 0.5.0 to provide compose key support. When it has been built against an older xkbcommon, the compose key will be disabled even if it has been configured in the compositor.

    +

    GLFW uses the xdg-shell protocol to provide better window management. This protocol is part of wayland-protocols 1.12, and mandatory at build time. If the running compositor does not support this protocol, the older wl_shell interface will be used instead. This will result in a worse integration with the desktop, especially on tiling compositors.

    +

    GLFW uses the relative pointer protocol alongside the pointer constraints protocol to implement disabled cursor. These two protocols are part of wayland-protocols 1.1, and mandatory at build time. If the running compositor does not support both of these protocols, disabling the cursor will have no effect.

    +

    GLFW uses the idle inhibit protocol to prohibit the screensaver from starting. This protocol is part of wayland-protocols 1.6, and mandatory at build time. If the running compositor does not support this protocol, the screensaver may start even for full screen windows.

    +

    GLFW uses the xdg-decoration protocol to request decorations to be drawn around its windows. This protocol is part of wayland-protocols 1.15, and mandatory at build time. If the running compositor does not support this protocol, a very simple frame will be drawn by GLFW itself, using the viewporter protocol alongside subsurfaces. This protocol is part of wayland-protocols 1.4, and mandatory at build time. If the running compositor does not support this protocol either, no decorations will be drawn around windows.

    GLX extensions

    The GLX API is the default API used to create OpenGL contexts on Unix-like systems using the X Window System.

    @@ -125,25 +119,25 @@ WGL extensions

    GLFW uses the WGL_ARB_context_flush_control extension to provide control over whether a context is flushed when it is released (made non-current). Where this extension is unavailable, the GLFW_CONTEXT_RELEASE_BEHAVIOR hint will have no effect and the context will always be flushed when released.

    GLFW uses the WGL_ARB_framebuffer_sRGB and WGL_EXT_framebuffer_sRGB extensions to provide support for sRGB framebuffers. Where both of these extension are unavailable, the GLFW_SRGB_CAPABLE hint will have no effect.

    -OpenGL 3.2 and later on OS X

    -

    Support for OpenGL 3.2 and above was introduced with OS X 10.7 and even then only forward-compatible, core profile contexts are supported. Support for OpenGL 4.1 was introduced with OS X 10.9, also limited to forward-compatible, core profile contexts. There is also still no mechanism for requesting debug contexts. Versions of Mac OS X earlier than 10.7 support at most OpenGL version 2.1.

    -

    Because of this, on OS X 10.7 and later, the GLFW_CONTEXT_VERSION_MAJOR and GLFW_CONTEXT_VERSION_MINOR hints will cause glfwCreateWindow to fail if given version 3.0 or 3.1, the GLFW_OPENGL_FORWARD_COMPAT hint must be set to GLFW_TRUE and the GLFW_OPENGL_PROFILE hint must be set to GLFW_OPENGL_CORE_PROFILE when creating OpenGL 3.2 and later contexts and the GLFW_OPENGL_DEBUG_CONTEXT hint is ignored.

    +OpenGL on macOS +

    Support for OpenGL 3.2 and above was introduced with OS X 10.7 and even then only forward-compatible, core profile contexts are supported. Support for OpenGL 4.1 was introduced with OS X 10.9, also limited to forward-compatible, core profile contexts. There is also still no mechanism for requesting debug contexts or no-error contexts. Versions of Mac OS X earlier than 10.7 support at most OpenGL version 2.1.

    +

    Because of this, on OS X 10.7 and later, the GLFW_CONTEXT_VERSION_MAJOR and GLFW_CONTEXT_VERSION_MINOR hints will cause glfwCreateWindow to fail if given version 3.0 or 3.1. The GLFW_OPENGL_FORWARD_COMPAT hint must be set to GLFW_TRUE and the GLFW_OPENGL_PROFILE hint must be set to GLFW_OPENGL_CORE_PROFILE when creating OpenGL 3.2 and later contexts. The GLFW_OPENGL_DEBUG_CONTEXT and GLFW_CONTEXT_NO_ERROR hints are ignored.

    Also, on Mac OS X 10.6 and below, the GLFW_CONTEXT_VERSION_MAJOR and GLFW_CONTEXT_VERSION_MINOR hints will fail if given a version above 2.1, setting the GLFW_OPENGL_PROFILE or GLFW_OPENGL_FORWARD_COMPAT hints to a non-default value will cause glfwCreateWindow to fail and the GLFW_OPENGL_DEBUG_CONTEXT hint is ignored.

    Vulkan loader and API

    -

    GLFW uses the standard system-wide Vulkan loader to access the Vulkan API. This should be installed by graphics drivers and Vulkan SDKs. If this is not available, glfwVulkanSupported will return GLFW_FALSE and all other Vulkan-related functions will fail with an GLFW_API_UNAVAILABLE error.

    +

    By default, GLFW uses the standard system-wide Vulkan loader to access the Vulkan API on all platforms except macOS. This is installed by both graphics drivers and Vulkan SDKs. If either the loader or at least one minimally functional ICD is missing, glfwVulkanSupported will return GLFW_FALSE and all other Vulkan-related functions will fail with an GLFW_API_UNAVAILABLE error.

    Vulkan WSI extensions

    The Vulkan WSI extensions are used to create Vulkan surfaces for GLFW windows on all supported platforms.

    GLFW uses the VK_KHR_surface and VK_KHR_win32_surface extensions to create surfaces on Microsoft Windows. If any of these extensions are not available, glfwGetRequiredInstanceExtensions will return an empty list and window surface creation will fail.

    +

    GLFW uses the VK_KHR_surface and VK_MVK_macos_surface extensions to create surfaces on macOS. If any of these extensions are not available, glfwGetRequiredInstanceExtensions will return an empty list and window surface creation will fail.

    GLFW uses the VK_KHR_surface and either the VK_KHR_xlib_surface or VK_KHR_xcb_surface extensions to create surfaces on X11. If VK_KHR_surface or both VK_KHR_xlib_surface and VK_KHR_xcb_surface are not available, glfwGetRequiredInstanceExtensions will return an empty list and window surface creation will fail.

    -

    GLFW uses the VK_KHR_surface and VK_KHR_wayland_surface extensions to create surfaces on Wayland. If any of these extensions are not available, glfwGetRequiredInstanceExtensions will return an empty list and window surface creation will fail.

    -

    GLFW uses the VK_KHR_surface and VK_KHR_mir_surface extensions to create surfaces on Mir. If any of these extensions are not available, glfwGetRequiredInstanceExtensions will return an empty list and window surface creation will fail.

    -

    GLFW does not support any extensions for window surface creation on OS X, meaningglfwGetRequiredInstanceExtensions will return an empty list and window surface creation will fail.

    -
    +

    GLFW uses the VK_KHR_surface and VK_KHR_wayland_surface extensions to create surfaces on Wayland. If any of these extensions are not available, glfwGetRequiredInstanceExtensions will return an empty list and window surface creation will fail.

    +
    +
    diff --git a/ref/glfw/docs/html/compile_8dox.html b/ref/glfw/docs/html/compile_8dox.html index be24242e..f08d4283 100644 --- a/ref/glfw/docs/html/compile_8dox.html +++ b/ref/glfw/docs/html/compile_8dox.html @@ -3,7 +3,7 @@ - + GLFW: compile.dox File Reference @@ -11,9 +11,6 @@ - @@ -21,51 +18,31 @@
    - + - - + + + +
    diff --git a/ref/glfw/docs/html/compile_guide.html b/ref/glfw/docs/html/compile_guide.html index d75ebaf4..160dcf74 100644 --- a/ref/glfw/docs/html/compile_guide.html +++ b/ref/glfw/docs/html/compile_guide.html @@ -3,7 +3,7 @@ - + GLFW: Compiling GLFW @@ -11,9 +11,6 @@ - @@ -21,45 +18,31 @@
    - + - + + + +
    -
    +
    Compiling GLFW
    @@ -84,17 +67,18 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
    • Using CMake
      • Dependencies
      • +
      • Dependencies for Linux and OSMesa
      • Generating build files with CMake
      • Compiling the library
      • CMake options
      • @@ -106,32 +90,40 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');

        This is about compiling the GLFW library itself. For information on how to build applications that use GLFW, see Building applications.

        Using CMake

        -

        GLFW uses CMake to generate project files or makefiles for a particular development environment. If you are on a Unix-like system such as Linux or FreeBSD or have a package system like Fink, MacPorts, Cygwin or Homebrew, you can simply install its CMake package. If not, you can download installers for Windows and OS X from the CMake website.

        +

        GLFW uses CMake to generate project files or makefiles for a particular development environment. If you are on a Unix-like system such as Linux or FreeBSD or have a package system like Fink, MacPorts, Cygwin or Homebrew, you can install its CMake package. If not, you can download installers for Windows and macOS from the CMake website.

        Note
        CMake only generates project files or makefiles. It does not compile the actual GLFW library. To compile GLFW, first generate these files for your chosen development environment and then use them to compile the actual GLFW library.

        Dependencies

        Once you have installed CMake, make sure that all other dependencies are available. On some platforms, GLFW needs a few additional packages to be installed. See the section for your chosen platform and development environment below.

        Dependencies for Visual C++ on Windows

        -

        The Microsoft Platform SDK that is installed along with Visual C++ already contains all the necessary headers, link libraries and tools except for CMake. Move on to Generating build files with CMake.

        +

        The Windows SDK bundled with Visual C++ already contains all the necessary headers, link libraries and tools except for CMake. Move on to Generating build files with CMake.

        Dependencies for MinGW or MinGW-w64 on Windows

        Both the MinGW and the MinGW-w64 packages already contain all the necessary headers, link libraries and tools except for CMake. Move on to Generating build files with CMake.

        Dependencies for MinGW or MinGW-w64 cross-compilation

        Both Cygwin and many Linux distributions have MinGW or MinGW-w64 packages. For example, Cygwin has the mingw64-i686-gcc and mingw64-x86_64-gcc packages for 32- and 64-bit version of MinGW-w64, while Debian GNU/Linux and derivatives like Ubuntu have the mingw-w64 package for both.

        -

        GLFW has CMake toolchain files in the CMake/ directory that allow for easy cross-compilation of Windows binaries. To use these files you need to add a special parameter when generating the project files or makefiles:

        -
        1 cmake -DCMAKE_TOOLCHAIN_FILE=<toolchain-file> .

        The exact toolchain file to use depends on the prefix used by the MinGW or MinGW-w64 binaries on your system. You can usually see this in the /usr directory. For example, both the Debian/Ubuntu and Cygwin MinGW-w64 packages have /usr/x86_64-w64-mingw32 for the 64-bit compilers, so the correct invocation would be:

        -
        1 cmake -DCMAKE_TOOLCHAIN_FILE=CMake/x86_64-w64-mingw32.cmake .

        For more details see the article CMake Cross Compiling on the CMake wiki.

        +

        GLFW has CMake toolchain files in the CMake/ directory that set up cross-compilation of Windows binaries. To use these files you add an option when running cmake to generate the project files or makefiles:

        +
        cmake -DCMAKE_TOOLCHAIN_FILE=<toolchain-file> .

        The exact toolchain file to use depends on the prefix used by the MinGW or MinGW-w64 binaries on your system. You can usually see this in the /usr directory. For example, both the Debian/Ubuntu and Cygwin MinGW-w64 packages have /usr/x86_64-w64-mingw32 for the 64-bit compilers, so the correct invocation would be:

        +
        cmake -DCMAKE_TOOLCHAIN_FILE=CMake/x86_64-w64-mingw32.cmake .

        For more details see the article CMake Cross Compiling on the CMake wiki.

        Once you have this set up, move on to Generating build files with CMake.

        -Dependencies for Xcode on OS X

        -

        Xcode comes with all necessary tools except for CMake. The required headers and libraries are included in the core OS X frameworks. Xcode can be downloaded from the Mac App Store or from the ADC Member Center.

        +Dependencies for Xcode on macOS +

        Xcode comes with all necessary tools except for CMake. The required headers and libraries are included in the core macOS frameworks. Xcode can be downloaded from the Mac App Store or from the ADC Member Center.

        Once you have Xcode installed, move on to Generating build files with CMake.

        Dependencies for Linux and X11

        To compile GLFW for X11, you need to have the X11 packages installed, as well as the basic development tools like GCC and make. For example, on Ubuntu and other distributions based on Debian GNU/Linux, you need to install the xorg-dev package, which pulls in all X.org header packages.

        Once you have installed the necessary packages, move on to Generating build files with CMake.

        +

        +Dependencies for Linux and Wayland

        +

        To compile GLFW for Wayland, you need to have the Wayland packages installed, as well as the basic development tools like GCC and make. For example, on Ubuntu and other distributions based on Debian GNU/Linux, you need to install the libwayland-dev package, which contains all Wayland headers and pulls in wayland-scanner, as well as the wayland-protocols and extra-cmake-modules packages.

        +

        Once you have installed the necessary packages, move on to Generating build files with CMake.

        +

        +Dependencies for Linux and OSMesa

        +

        To compile GLFW for OSMesa, you need to install the OSMesa library and header packages. For example, on Ubuntu and other distributions based on Debian GNU/Linux, you need to install the libosmesa6-dev package. The OSMesa library is required at runtime for context creation and is loaded on demand.

        +

        Once you have installed the necessary packages, move on to Generating build files with CMake.

        Generating build files with CMake

        Once you have all necessary dependencies it is time to generate the project files or makefiles for your development environment. CMake needs to know two paths for this: the path to the root directory of the GLFW source tree (i.e. not the src subdirectory) and the target path for the generated files and compiled binaries. If these are the same, it is called an in-tree build, otherwise it is called an out-of-tree build.

        @@ -140,8 +132,8 @@ Generating build files with CMake

        Generating files with the CMake command-line tool

        To make an in-tree build, enter the root directory of the GLFW source tree (i.e. not the src subdirectory) and run CMake. The current directory is used as target path, while the path provided as an argument is used to find the source tree.

        -
        1 cd <glfw-root-dir>
        2 cmake .

        To make an out-of-tree build, make a directory outside of the source tree, enter it and run CMake with the (relative or absolute) path to the root of the source tree as an argument.

        -
        1 mkdir glfw-build
        2 cd glfw-build
        3 cmake <glfw-root-dir>

        Once you have generated the project files or makefiles for your chosen development environment, move on to Compiling the library.

        +
        cd <glfw-root-dir>
        cmake .

        To make an out-of-tree build, make a directory outside of the source tree, enter it and run CMake with the (relative or absolute) path to the root of the source tree as an argument.

        +
        mkdir glfw-build
        cd glfw-build
        cmake <glfw-root-dir>

        Once you have generated the project files or makefiles for your chosen development environment, move on to Compiling the library.

        Generating files with the CMake GUI

        If you are using the GUI version, choose the root of the GLFW source tree as source location and the same directory or another, empty directory as the destination for binaries. Choose Configure, change any options you wish to, Configure again to let the changes take effect and then Generate.

        @@ -155,56 +147,42 @@ CMake options

        The CMake files for GLFW provide a number of options, although not all are available on all supported platforms. Some of these are de facto standards among projects using CMake and so have no GLFW_ prefix.

        If you are using the GUI version of CMake, these are listed and can be changed from there. If you are using the command-line version of CMake you can use the ccmake ncurses GUI to set options. Some package systems like Ubuntu and other distributions based on Debian GNU/Linux have this tool in a separate cmake-curses-gui package.

        Finally, if you don't want to use any GUI, you can set options from the cmake command-line with the -D flag.

        -
        1 cmake -DBUILD_SHARED_LIBS=ON .

        +
        cmake -DBUILD_SHARED_LIBS=ON .

        Shared CMake options

        -

        BUILD_SHARED_LIBS determines whether GLFW is built as a static library or as a DLL / shared library / dynamic library.

        -

        LIB_SUFFIX affects where the GLFW shared /dynamic library is installed. If it is empty, it is installed to ${CMAKE_INSTALL_PREFIX}/lib. If it is set to 64, it is installed to ${CMAKE_INSTALL_PREFIX}/lib64.

        -

        GLFW_BUILD_EXAMPLES determines whether the GLFW examples are built along with the library.

        -

        GLFW_BUILD_TESTS determines whether the GLFW test programs are built along with the library.

        -

        GLFW_BUILD_DOCS determines whether the GLFW documentation is built along with the library.

        -

        GLFW_VULKAN_STATIC determines whether to use the Vulkan loader linked statically into the application.

        -

        -OS X specific CMake options

        -

        GLFW_USE_CHDIR determines whether glfwInit changes the current directory of bundled applications to the Contents/Resources directory.

        -

        GLFW_USE_MENUBAR determines whether the first call to glfwCreateWindow sets up a minimal menu bar.

        -

        GLFW_USE_RETINA determines whether windows will use the full resolution of Retina displays.

        +

        BUILD_SHARED_LIBS determines whether GLFW is built as a static library or as a DLL / shared library / dynamic library.

        +

        GLFW_BUILD_EXAMPLES determines whether the GLFW examples are built along with the library.

        +

        GLFW_BUILD_TESTS determines whether the GLFW test programs are built along with the library.

        +

        GLFW_BUILD_DOCS determines whether the GLFW documentation is built along with the library.

        +

        GLFW_VULKAN_STATIC determines whether to use the Vulkan loader linked directly with the application.

        Windows specific CMake options

        -

        USE_MSVC_RUNTIME_LIBRARY_DLL determines whether to use the DLL version or the static library version of the Visual C++ runtime library. If set to ON, the DLL version of the Visual C++ library is used.

        -

        GLFW_USE_HYBRID_HPG determines whether to export the NvOptimusEnablement and AmdPowerXpressRequestHighPerformance symbols, which force the use of the high-performance GPU on Nvidia Optimus and AMD PowerXpress systems. These symbols need to be exported by the EXE to be detected by the driver, so the override will not work if GLFW is built as a DLL.

        +

        USE_MSVC_RUNTIME_LIBRARY_DLL determines whether to use the DLL version or the static library version of the Visual C++ runtime library. If set to ON, the DLL version of the Visual C++ library is used.

        +

        GLFW_USE_HYBRID_HPG determines whether to export the NvOptimusEnablement and AmdPowerXpressRequestHighPerformance symbols, which force the use of the high-performance GPU on Nvidia Optimus and AMD PowerXpress systems. These symbols need to be exported by the EXE to be detected by the driver, so the override will not work if GLFW is built as a DLL.

        Compiling GLFW manually

        If you wish to compile GLFW without its CMake build environment then you will have to do at least some of the platform detection yourself. GLFW needs a configuration macro to be defined in order to know what window system it's being compiled for and also has optional, platform-specific ones for various features.

        -

        When building with CMake, the glfw_config.h configuration header is generated based on the current platform and CMake options. The GLFW CMake environment defines _GLFW_USE_CONFIG_H, which causes this header to be included by internal.h. Without this macro, GLFW will expect the necessary configuration macros to be defined on the command-line.

        +

        When building with CMake, the glfw_config.h configuration header is generated based on the current platform and CMake options. The GLFW CMake environment defines GLFW_USE_CONFIG_H, which causes this header to be included by internal.h. Without this macro, GLFW will expect the necessary configuration macros to be defined on the command-line.

        The window creation API is used to create windows, handle input, monitors, gamma ramps and clipboard. The options are:

          -
        • _GLFW_COCOA to use the Cocoa frameworks
        • -
        • _GLFW_WIN32 to use the Win32 API
        • -
        • _GLFW_X11 to use the X Window System
        • -
        • _GLFW_WAYLAND to use the Wayland API (experimental and incomplete)
        • -
        • _GLFW_MIR to use the Mir API (experimental and incomplete)
        • +
        • _GLFW_COCOA to use the Cocoa frameworks
        • +
        • _GLFW_WIN32 to use the Win32 API
        • +
        • _GLFW_X11 to use the X Window System
        • +
        • _GLFW_WAYLAND to use the Wayland API (experimental and incomplete)
        • +
        • _GLFW_OSMESA to use the OSMesa API (headless and non-interactive)
        -

        If you are building GLFW as a shared library / dynamic library / DLL then you must also define _GLFW_BUILD_DLL. Otherwise, you must not define it.

        -

        If you are linking the Vulkan loader statically into your application then you must also define _GLFW_VULKAN_STATIC. Otherwise, GLFW will attempt to use the external version.

        +

        If you are building GLFW as a shared library / dynamic library / DLL then you must also define _GLFW_BUILD_DLL. Otherwise, you must not define it.

        +

        If you are linking the Vulkan loader directly with your application then you must also define _GLFW_VULKAN_STATIC. Otherwise, GLFW will attempt to use the external version.

        +

        If you are using a custom name for the Vulkan, EGL, GLX, OSMesa, OpenGL, GLESv1 or GLESv2 library, you can override the default names by defining those you need of _GLFW_VULKAN_LIBRARY, _GLFW_EGL_LIBRARY, _GLFW_GLX_LIBRARY, _GLFW_OSMESA_LIBRARY, _GLFW_OPENGL_LIBRARY, _GLFW_GLESV1_LIBRARY and _GLFW_GLESV2_LIBRARY. Otherwise, GLFW will use the built-in default names.

        For the EGL context creation API, the following options are available:

          -
        • _GLFW_USE_EGLPLATFORM_H to use EGL/eglplatform.h for native handle definitions (fallback)
        • -
        -

        If you are using the X11 window creation API, support for the following X11 extensions can be enabled:

        -
          -
        • _GLFW_HAS_XF86VM to use Xxf86vm as a fallback when RandR gamma is broken (recommended)
        • -
        -

        If you are using the Cocoa window creation API, the following options are available:

        -
          -
        • _GLFW_USE_CHDIR to chdir to the Resources subdirectory of the application bundle during glfwInit (recommended)
        • -
        • _GLFW_USE_MENUBAR to create and populate the menu bar when the first window is created (recommended)
        • -
        • _GLFW_USE_RETINA to have windows use the full resolution of Retina displays (recommended)
        • +
        • _GLFW_USE_EGLPLATFORM_H to use an existing EGL/eglplatform.h header file for native handle types (fallback)
        Note
        None of the GLFW header option macros may be defined during the compilation of GLFW. If you define any of these in your build files, make sure they are not applied to the GLFW sources.
        -
    +
    +
    diff --git a/ref/glfw/docs/html/context_8dox.html b/ref/glfw/docs/html/context_8dox.html index d9bfbe46..e1c68092 100644 --- a/ref/glfw/docs/html/context_8dox.html +++ b/ref/glfw/docs/html/context_8dox.html @@ -3,7 +3,7 @@ - + GLFW: context.dox File Reference @@ -11,9 +11,6 @@ - @@ -21,51 +18,31 @@
    - + - - + + + +
    diff --git a/ref/glfw/docs/html/context_guide.html b/ref/glfw/docs/html/context_guide.html index 149c0494..5caa1738 100644 --- a/ref/glfw/docs/html/context_guide.html +++ b/ref/glfw/docs/html/context_guide.html @@ -3,7 +3,7 @@ - + GLFW: Context guide @@ -11,9 +11,6 @@ - @@ -21,45 +18,31 @@
    - + - + + + +
    -
    +
    Context guide
    @@ -112,7 +95,7 @@ Context objects

    A window object encapsulates both a top-level window and an OpenGL or OpenGL ES context. It is created with glfwCreateWindow and destroyed with glfwDestroyWindow or glfwTerminate. See Window creation for more information.

    As the window and context are inseparably linked, the window object also serves as the context handle.

    To test the creation of various kinds of contexts and see their properties, run the glfwinfo test program.

    -
    Note
    Vulkan does not have a context and the Vulkan instance is created via the Vulkan API itself. If you will be using Vulkan to render to a window, disable context creation by setting the GLFW_CLIENT_API hint to GLFW_NO_API. For more information, see the Vulkan guide.
    +
    Note
    Vulkan does not have a context and the Vulkan instance is created via the Vulkan API itself. If you will be using Vulkan to render to a window, disable context creation by setting the GLFW_CLIENT_API hint to GLFW_NO_API. For more information, see the Vulkan guide.

    Context creation hints

    There are a number of hints, specified using glfwWindowHint, related to what kind of context is created. See context related hints in the window guide.

    @@ -120,20 +103,21 @@ Context creation hints Context object sharing

    When creating a window and its OpenGL or OpenGL ES context with glfwCreateWindow, you can specify another window whose context the new one should share its objects (textures, vertex and element buffers, etc.) with.

    GLFWwindow* second_window = glfwCreateWindow(640, 480, "Second Window", NULL, first_window);

    Object sharing is implemented by the operating system and graphics driver. On platforms where it is possible to choose which types of objects are shared, GLFW requests that all types are shared.

    -

    See the relevant chapter of the OpenGL or OpenGL ES reference documents for more information. The name and number of this chapter unfortunately varies between versions and APIs, but has at times been named Shared Objects and Multiple Contexts.

    -

    GLFW comes with a simple object sharing test program called sharing.

    +

    See the relevant chapter of the OpenGL or OpenGL ES reference documents for more information. The name and number of this chapter unfortunately varies between versions and APIs, but has at times been named Shared Objects and Multiple Contexts.

    +

    GLFW comes with a barebones object sharing example program called sharing.

    Offscreen contexts

    -

    GLFW doesn't support creating contexts without an associated window. However, contexts with hidden windows can be created with the GLFW_VISIBLE window hint.

    -
    GLFWwindow* offscreen_context = glfwCreateWindow(640, 480, "", NULL, NULL);

    The window never needs to be shown and its context can be used as a plain offscreen context. Depending on the window manager, the size of a hidden window's framebuffer may not be usable or modifiable, so framebuffer objects are recommended for rendering with such contexts.

    +

    GLFW doesn't support creating contexts without an associated window. However, contexts with hidden windows can be created with the GLFW_VISIBLE window hint.

    +
    GLFWwindow* offscreen_context = glfwCreateWindow(640, 480, "", NULL, NULL);

    The window never needs to be shown and its context can be used as a plain offscreen context. Depending on the window manager, the size of a hidden window's framebuffer may not be usable or modifiable, so framebuffer objects are recommended for rendering with such contexts.

    You should still process events as long as you have at least one window, even if none of them are visible.

    -

    OS X: The first time a window is created the menu bar is populated with common commands like Hide, Quit and About. This is not desirable for example when writing a command-line only application. The menu bar setup can be disabled with a compile-time option.

    +

    macOS: The first time a window is created the menu bar is created. This is not desirable for example when writing a command-line only application. Menu bar creation can be disabled with the GLFW_COCOA_MENUBAR init hint.

    Windows without contexts

    -

    You can disable context creation by setting the GLFW_CLIENT_API hint to GLFW_NO_API. Windows without contexts must not be passed to glfwMakeContextCurrent or glfwSwapBuffers.

    +

    You can disable context creation by setting the GLFW_CLIENT_API hint to GLFW_NO_API. Windows without contexts must not be passed to glfwMakeContextCurrent or glfwSwapBuffers.

    Current context

    Before you can make OpenGL or OpenGL ES calls, you need to have a current context of the correct type. A context can only be current for a single thread at a time, and a thread can only have a single context current at a time.

    +

    When moving a context between threads, you must make it non-current on the old thread before making it current on the new one.

    The context of a window is made current with glfwMakeContextCurrent.

    The window of the current context is returned by glfwGetCurrentContext.

    The following GLFW functions require a context to be current. Calling any these functions without a current context will generate a GLFW_NO_CURRENT_CONTEXT error.

    @@ -144,7 +128,7 @@ Current context

    Buffer swapping

    -

    Buffer swapping is part of the window and framebuffer, not the context. See Buffer swapping.

    +

    See Buffer swapping in the window guide.

    OpenGL and OpenGL ES extensions

    One of the benefits of OpenGL and OpenGL ES is their extensibility. Hardware vendors may include extensions in their implementations that extend the API before that functionality is included in a new version of the OpenGL or OpenGL ES specification, and some extensions are never included and remain as extensions until they become obsolete.

    @@ -154,13 +138,13 @@ OpenGL and OpenGL ES extensions
  • New OpenGL tokens (e.g. GL_DEBUG_SEVERITY_HIGH_ARB)
  • New OpenGL functions (e.g. glGetDebugMessageLogARB)
  • -

    Note the ARB affix, which stands for Architecture Review Board and is used for official extensions. The extension above was created by the ARB, but there are many different affixes, like NV for Nvidia and AMD for, well, AMD. Any group may also use the generic EXT affix. Lists of extensions, together with their specifications, can be found at the OpenGL Registry and OpenGL ES Registry.

    +

    Note the ARB affix, which stands for Architecture Review Board and is used for official extensions. The extension above was created by the ARB, but there are many different affixes, like NV for Nvidia and AMD for, well, AMD. Any group may also use the generic EXT affix. Lists of extensions, together with their specifications, can be found at the OpenGL Registry and OpenGL ES Registry.

    Loading extension with a loader library

    An extension loader library is the easiest and best way to access both OpenGL and OpenGL ES extensions and modern versions of the core OpenGL or OpenGL ES APIs. They will take care of all the details of declaring and loading everything you need. One such library is glad and there are several others.

    The following example will use glad but all extension loader libraries work similarly.

    First you need to generate the source files using the glad Python script. This example generates a loader for any version of OpenGL, which is the default for both GLFW and glad, but loaders for OpenGL ES, as well as loaders for specific API versions and extension sets can be generated. The generated files are written to the output directory.

    -
    1 python main.py --generator c --no-loader --out-path output

    The --no-loader option is added because GLFW already provides a function for loading OpenGL and OpenGL ES function pointers, one that automatically uses the selected context creation API, and glad can call this instead of having to implement its own. There are several other command-line options as well. See the glad documentation for details.

    +
    python main.py --generator c --no-loader --out-path output

    The --no-loader option is added because GLFW already provides a function for loading OpenGL and OpenGL ES function pointers, one that automatically uses the selected context creation API, and glad can call this instead of having to implement its own. There are several other command-line options as well. See the glad documentation for details.

    Add the generated output/src/glad.c, output/include/glad/glad.h and output/include/KHR/khrplatform.h files to your build. Then you need to include the glad header file, which will replace the OpenGL header of your development environment. By including the glad header before the GLFW header, it suppresses the development environment's OpenGL or OpenGL ES header.

    #include <glad/glad.h>
    #include <GLFW/glfw3.h>

    Finally you need to initialize glad once you have a suitable current context.

    window = glfwCreateWindow(640, 480, "My Window", NULL, NULL);
    if (!window)
    {
    ...
    }
    gladLoadGLLoader((GLADloadproc) glfwGetProcAddress);

    Once glad has been loaded, you have access to all OpenGL core and extension functions supported by both the context you created and the glad loader you generated and you are ready to start rendering.

    @@ -173,9 +157,9 @@ Loading extensions manually

    This section will demonstrate manual loading of OpenGL extensions. The loading of OpenGL ES extensions is identical except for the name of the extension header.

    The glext.h header

    -

    The glext.h extension header is a continually updated file that defines the interfaces for all OpenGL extensions. The latest version of this can always be found at the OpenGL Registry. There are also extension headers for the various versions of OpenGL ES at the OpenGL ES Registry. It it strongly recommended that you use your own copy of the extension header, as the one included in your development environment may be several years out of date and may not include the extensions you wish to use.

    +

    The glext.h extension header is a continually updated file that defines the interfaces for all OpenGL extensions. The latest version of this can always be found at the OpenGL Registry. There are also extension headers for the various versions of OpenGL ES at the OpenGL ES Registry. It it strongly recommended that you use your own copy of the extension header, as the one included in your development environment may be several years out of date and may not include the extensions you wish to use.

    The header defines function pointer types for all functions of all extensions it supports. These have names like PFNGLGETDEBUGMESSAGELOGARBPROC (for glGetDebugMessageLogARB), i.e. the name is made uppercase and PFN (pointer to function) and PROC (procedure) are added to the ends.

    -

    To include the extension header, define GLFW_INCLUDE_GLEXT before including the GLFW header.

    +

    To include the extension header, define GLFW_INCLUDE_GLEXT before including the GLFW header.

    #define GLFW_INCLUDE_GLEXT
    #include <GLFW/glfw3.h>

    Checking for extensions

    A given machine may not actually support the extension (it may have older drivers or a graphics card that lacks the necessary hardware features), so it is necessary to check at run-time whether the context supports the extension. This is done with glfwExtensionSupported.

    @@ -185,10 +169,11 @@ Fetching function pointers

    Many extensions, though not all, require the use of new OpenGL functions. These functions often do not have entry points in the client API libraries of your operating system, making it necessary to fetch them at run time. You can retrieve pointers to these functions with glfwGetProcAddress.

    PFNGLGETDEBUGMESSAGELOGARBPROC pfnGetDebugMessageLog = glfwGetProcAddress("glGetDebugMessageLogARB");

    In general, you should avoid giving the function pointer variables the (exact) same name as the function, as this may confuse your linker. Instead, you can use a different prefix, like above, or some other naming scheme.

    Now that all the pieces have been introduced, here is what they might look like when used together.

    -
    #define GLFW_INCLUDE_GLEXT
    #include <GLFW/glfw3.h>
    #define glGetDebugMessageLogARB pfnGetDebugMessageLog
    PFNGLGETDEBUGMESSAGELOGARBPROC pfnGetDebugMessageLog;
    // Flag indicating whether the extension is supported
    int has_ARB_debug_output = 0;
    void load_extensions(void)
    {
    if (glfwExtensionSupported("GL_ARB_debug_output"))
    {
    pfnGetDebugMessageLog = (PFNGLGETDEBUGMESSAGELOGARBPROC)
    glfwGetProcAddress("glGetDebugMessageLogARB");
    has_ARB_debug_output = 1;
    }
    }
    void some_function(void)
    {
    if (has_ARB_debug_output)
    {
    // Now the extension function can be called as usual
    glGetDebugMessageLogARB(...);
    }
    }
    +
    #define GLFW_INCLUDE_GLEXT
    #include <GLFW/glfw3.h>
    #define glGetDebugMessageLogARB pfnGetDebugMessageLog
    PFNGLGETDEBUGMESSAGELOGARBPROC pfnGetDebugMessageLog;
    // Flag indicating whether the extension is supported
    int has_ARB_debug_output = 0;
    void load_extensions(void)
    {
    if (glfwExtensionSupported("GL_ARB_debug_output"))
    {
    pfnGetDebugMessageLog = (PFNGLGETDEBUGMESSAGELOGARBPROC)
    glfwGetProcAddress("glGetDebugMessageLogARB");
    has_ARB_debug_output = 1;
    }
    }
    void some_function(void)
    {
    if (has_ARB_debug_output)
    {
    // Now the extension function can be called as usual
    glGetDebugMessageLogARB(...);
    }
    }
    +
    diff --git a/ref/glfw/docs/html/dir_1f12d41534b9d9c99a183e145b58d6f3.html b/ref/glfw/docs/html/dir_1f12d41534b9d9c99a183e145b58d6f3.html deleted file mode 100644 index 9eae028d..00000000 --- a/ref/glfw/docs/html/dir_1f12d41534b9d9c99a183e145b58d6f3.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - -GLFW: include Directory Reference - - - - - - - - - - - -
    - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    include Directory Reference
    -
    -
    - - - - -

    -Directories

    directory  GLFW
     
    -
    - - - diff --git a/ref/glfw/docs/html/dir_351f617146de9499414a6c099ebbe0ca.html b/ref/glfw/docs/html/dir_351f617146de9499414a6c099ebbe0ca.html deleted file mode 100644 index 9538ec4d..00000000 --- a/ref/glfw/docs/html/dir_351f617146de9499414a6c099ebbe0ca.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - -GLFW: glfw-3.2.1 Directory Reference - - - - - - - - - - - -
    - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    glfw-3.2.1 Directory Reference
    -
    -
    - - - - -

    -Directories

    directory  include
     
    -
    - - - diff --git a/ref/glfw/docs/html/dir_4bcf8e981abe5adb811ce4f57d70c9af.html b/ref/glfw/docs/html/dir_4bcf8e981abe5adb811ce4f57d70c9af.html deleted file mode 100644 index dd9e64e2..00000000 --- a/ref/glfw/docs/html/dir_4bcf8e981abe5adb811ce4f57d70c9af.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - -GLFW: GLFW Directory Reference - - - - - - - - - - - -
    - - - - - - - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    GLFW Directory Reference
    -
    -
    - - - - - - - - -

    -Files

    file  glfw3.h [code]
     The header of the GLFW 3 API.
     
    file  glfw3native.h [code]
     The header of the native access functions.
     
    -
    - - - diff --git a/ref/glfw/docs/html/doxygen.css b/ref/glfw/docs/html/doxygen.css index 1425ec53..e2515926 100644 --- a/ref/glfw/docs/html/doxygen.css +++ b/ref/glfw/docs/html/doxygen.css @@ -1,9 +1,13 @@ -/* The standard CSS for doxygen 1.8.11 */ +/* The standard CSS for doxygen 1.8.15 */ body, table, div, p, dl { font: 400 14px/22px Roboto,sans-serif; } +p.reference, p.definition { + font: 400 14px/22px Roboto,sans-serif; +} + /* @group Heading Levels */ h1.groupheader { @@ -76,6 +80,15 @@ p.endtd { margin-bottom: 2px; } +p.interli { +} + +p.interdd { +} + +p.intertd { +} + /* @end */ caption { @@ -130,12 +143,12 @@ a.qindex { a.qindexHL { font-weight: bold; background-color: #9CAFD4; - color: #ffffff; + color: #FFFFFF; border: 1px double #869DCA; } .contents a.qindexHL:visited { - color: #ffffff; + color: #FFFFFF; } a.el { @@ -159,6 +172,25 @@ dl.el { margin-left: -1cm; } +ul { + overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + pre.fragment { border: 1px solid #C4CFE5; background-color: #FBFCFD; @@ -173,8 +205,8 @@ pre.fragment { } div.fragment { - padding: 4px 6px; - margin: 4px 8px 4px 2px; + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; background-color: #FBFCFD; border: 1px solid #C4CFE5; } @@ -232,10 +264,19 @@ span.lineno a:hover { background-color: #C8C8C8; } +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + div.ah, span.ah { background-color: black; font-weight: bold; - color: #ffffff; + color: #FFFFFF; margin-bottom: 3px; margin-top: 3px; padding: 0.2em; @@ -311,7 +352,7 @@ img.formulaDsp { } -img.formulaInl { +img.formulaInl, img.inline { vertical-align: middle; } @@ -389,6 +430,13 @@ blockquote { padding: 0 12px 0 16px; } +blockquote.DocNodeRTL { + border-left: 0; + border-right: 2px solid #9CAFD4; + margin: 0 4px 0 24px; + padding: 0 16px 0 12px; +} + /* @end */ /* @@ -501,6 +549,29 @@ table.memberdecls { /* Styles for detailed member documentation */ +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + .memtemplate { font-size: 80%; color: #4665A2; @@ -539,7 +610,7 @@ table.memberdecls { } .memname { - font-weight: bold; + font-weight: 400; margin-left: 6px; } @@ -555,24 +626,24 @@ table.memberdecls { color: #253555; font-weight: bold; text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - background-image:url('nav_f.png'); - background-repeat:repeat-x; - background-color: #E2E8F2; + background-color: #DFE5F1; /* opera specific markup */ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); border-top-right-radius: 4px; - border-top-left-radius: 4px; /* firefox specific markup */ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; -moz-border-radius-topright: 4px; - -moz-border-radius-topleft: 4px; /* webkit specific markup */ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -webkit-border-top-right-radius: 4px; - -webkit-border-top-left-radius: 4px; } +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; +} + .memdoc, dl.reflist dd { border-bottom: 1px solid #A8B8D9; border-left: 1px solid #A8B8D9; @@ -630,17 +701,17 @@ dl.reflist dd { padding-left: 0px; } -.params .paramname, .retval .paramname { +.params .paramname, .retval .paramname, .tparams .paramname { font-weight: bold; vertical-align: top; } -.params .paramtype { +.params .paramtype, .tparams .paramtype { font-style: italic; vertical-align: top; } -.params .paramdir { +.params .paramdir, .tparams .paramdir { font-family: "courier new",courier,monospace; vertical-align: top; } @@ -914,6 +985,7 @@ table.fieldtable { padding-bottom: 4px; padding-top: 5px; text-align:left; + font-weight: 400; -moz-border-radius-topleft: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-left-radius: 4px; @@ -1044,72 +1116,143 @@ div.headertitle padding: 5px 5px 5px 10px; } -dl -{ - padding: 0 0 0 10px; +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; } -/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ -dl.section -{ +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { margin-left: 0px; padding-left: 0px; } -dl.note -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #D0C000; +dl.section.DocNodeRTL { + margin-right: 0px; + padding-right: 0px; } -dl.warning, dl.attention -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #FF0000; +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; } -dl.pre, dl.post, dl.invariant -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #00D000; +dl.note.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #D0C000; } -dl.deprecated -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #505050; +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; } -dl.todo -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #00C0E0; +dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #FF0000; } -dl.test -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #3030E0; +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; } -dl.bug -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #C08050; +dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.deprecated.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.todo.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.test.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.bug.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #C08050; } dl.section dd { @@ -1178,6 +1321,11 @@ dl.section dd { text-align: center; } +.plantumlgraph +{ + text-align: center; +} + .diagraph { text-align: center; @@ -1221,6 +1369,11 @@ div.toc { width: 200px; } +.PageDocRTL-title div.toc { + float: left !important; + text-align: right; +} + div.toc li { background: url("bdwn.png") no-repeat scroll 0 5px transparent; font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; @@ -1229,6 +1382,12 @@ div.toc li { padding-top: 2px; } +.PageDocRTL-title div.toc li { + background-position-x: right !important; + padding-left: 0 !important; + padding-right: 10px; +} + div.toc h3 { font: bold 12px/1.2 Arial,FreeSans,sans-serif; color: #4665A2; @@ -1258,6 +1417,26 @@ div.toc li.level4 { margin-left: 45px; } +.PageDocRTL-title div.toc li.level1 { + margin-left: 0 !important; + margin-right: 0; +} + +.PageDocRTL-title div.toc li.level2 { + margin-left: 0 !important; + margin-right: 15px; +} + +.PageDocRTL-title div.toc li.level3 { + margin-left: 0 !important; + margin-right: 30px; +} + +.PageDocRTL-title div.toc li.level4 { + margin-left: 0 !important; + margin-right: 45px; +} + .inherit_header { font-weight: bold; color: gray; @@ -1371,7 +1550,7 @@ tr.heading h2 { } #powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { - border-top-color: #ffffff; + border-top-color: #FFFFFF; border-width: 10px; margin: 0px -10px; } @@ -1399,7 +1578,7 @@ tr.heading h2 { } #powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { - border-bottom-color: #ffffff; + border-bottom-color: #FFFFFF; border-width: 10px; margin: 0px -10px; } @@ -1426,7 +1605,7 @@ tr.heading h2 { left: 100%; } #powerTip.e:after { - border-left-color: #ffffff; + border-left-color: #FFFFFF; border-width: 10px; top: 50%; margin-top: -10px; @@ -1442,7 +1621,7 @@ tr.heading h2 { right: 100%; } #powerTip.w:after { - border-right-color: #ffffff; + border-right-color: #FFFFFF; border-width: 10px; top: 50%; margin-top: -10px; @@ -1473,3 +1652,113 @@ tr.heading h2 { } } +/* @group Markdown */ + +/* +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTableHead tr { +} + +table.markdownTableBodyLeft td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft { + text-align: left +} + +th.markdownTableHeadRight { + text-align: right +} + +th.markdownTableHeadCenter { + text-align: center +} +*/ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +.DocNodeRTL { + text-align: right; + direction: rtl; +} + +.DocNodeLTR { + text-align: left; + direction: ltr; +} + +table.DocNodeRTL { + width: auto; + margin-right: 0; + margin-left: auto; +} + +table.DocNodeLTR { + width: auto; + margin-right: auto; + margin-left: 0; +} + +tt, code, kbd, samp +{ + display: inline-block; + direction:ltr; +} +/* @end */ + +u { + text-decoration: underline; +} + diff --git a/ref/glfw/docs/html/dynsections.js b/ref/glfw/docs/html/dynsections.js index 85e18369..ea0a7b39 100644 --- a/ref/glfw/docs/html/dynsections.js +++ b/ref/glfw/docs/html/dynsections.js @@ -1,3 +1,26 @@ +/* + @licstart The following is the entire license notice for the + JavaScript code in this file. + + Copyright (C) 1997-2017 by Dimitri van Heesch + + This program 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; either version 2 of the License, or + (at your option) any later version. + + This program 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 this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + @licend The above is the entire license notice + for the JavaScript code in this file + */ function toggleVisibility(linkObj) { var base = $(linkObj).attr('id'); @@ -15,7 +38,7 @@ function toggleVisibility(linkObj) summary.hide(); $(linkObj).removeClass('closed').addClass('opened'); $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); - } + } return false; } @@ -94,4 +117,4 @@ function toggleInherit(id) $(img).attr('src',src.substring(0,src.length-10)+'open.png'); } } - +/* @license-end */ diff --git a/ref/glfw/docs/html/extra.css b/ref/glfw/docs/html/extra.css index e9896fae..03a7f259 100644 --- a/ref/glfw/docs/html/extra.css +++ b/ref/glfw/docs/html/extra.css @@ -1 +1 @@ -#navrow1,#navrow2,#navrow3,#navrow4,.tablist a,.tablist a:visited,.tablist a:hover,.tablist li,.tablist li.current a,.memdoc,dl.reflist dd,div.toc li,.ah,span.lineno,span.lineno a,span.lineno a:hover,.note code,.pre code,.post code,.invariant code,.warning code,.attention code,.deprecated code,.bug code,.todo code,.test code,.doxtable code{background:none}#titlearea,.footer,.contents,div.header,.memdoc,table.doxtable td,table.doxtable th,hr,.memSeparator{border:none}.tablist a,.tablist a:visited,.tablist a:hover,.tablist li,.tablist li.current a,.reflist dt a.el,.levels span,.directory .levels span{text-shadow:none}.memdoc,dl.reflist dd{box-shadow:none}div.headertitle,.note code,.pre code,.post code,.invariant code,.warning code,.attention code,.deprecated code,.bug code,.todo code,.test code,table.doxtable code{padding:0}#nav-path,.directory .levels,span.lineno{display:none}html,#titlearea,.footer,tr.even,.directory tr.even,.doxtable tr:nth-child(even),.mdescLeft,.mdescRight,.memItemLeft,.memItemRight,code{background:#f2f2f2}body{color:#4d4d4d}h1,h2,h2.groupheader,h3,div.toc h3,h4,h5,h6,strong,em{color:#1a1a1a;border-bottom:none}h1{padding-top:0.5em;font-size:180%}h2{padding-top:0.5em;margin-bottom:0;font-size:140%}h3{padding-top:0.5em;margin-bottom:0;font-size:110%}.glfwheader{font-size:16px;height:64px;max-width:920px;min-width:800px;padding:0 32px;margin:0 auto}#glfwhome{line-height:64px;padding-right:48px;color:#666;font-size:2.5em;background:url("http://www.glfw.org/css/arrow.png") no-repeat right}.glfwnavbar{list-style-type:none;margin:0 auto;float:right}#glfwhome,.glfwnavbar li{float:left}.glfwnavbar a,.glfwnavbar a:visited{line-height:64px;margin-left:2em;display:block;color:#666}#glfwhome,.glfwnavbar a,.glfwnavbar a:visited{transition:.35s ease}#titlearea,.footer{color:#666}address.footer{text-align:center;padding:2em;margin-top:3em}#top{background:#666}#navrow1,#navrow2,#navrow3,#navrow4{max-width:920px;min-width:800px;margin:0 auto;font-size:13px}.tablist{height:36px;display:block;position:relative}.tablist a,.tablist a:visited,.tablist a:hover,.tablist li,.tablist li.current a{color:#f2f2f2}.tablist li.current a{background:linear-gradient(to bottom, #ffa733 0, #f60 100%);box-shadow:inset 0 0 32px #f60;text-shadow:0 -1px 1px #b34700;color:#fff}.contents{min-height:590px}div.contents,div.header{max-width:920px;margin:0 auto;padding:0 32px;background:#fff none}table.doxtable th,dl.reflist dt{background:linear-gradient(to bottom, #ffa733 0, #f60 100%);box-shadow:inset 0 0 32px #f60;text-shadow:0 -1px 1px #b34700;color:#fff}dl.reflist dt a.el{color:#f60;padding:.2em;border-radius:4px;background-color:#ffe0cc}div.toc{float:none;width:auto}div.toc h3{font-size:1.17em}div.toc ul{padding-left:1.5em}div.toc li{font-size:1em;padding-left:0;list-style-type:disc}div.toc,.memproto,div.qindex,div.ah{background:linear-gradient(to bottom, #f2f2f2 0, #e6e6e6 100%);box-shadow:inset 0 0 32px #e6e6e6;text-shadow:0 1px 1px #fff;color:#1a1a1a;border:2px solid #e6e6e6;border-radius:4px}.paramname{color:#803300}dl.reflist dt{border:2px solid #f60;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom:none}dl.reflist dd{border:2px solid #f60;border-bottom-right-radius:4px;border-bottom-left-radius:4px;border-top:none}table.doxtable{border-collapse:inherit;border-spacing:0;border:2px solid #f60;border-radius:4px}a,a:hover,a:visited,a:visited:hover,.contents a:visited,.el,a.el:visited,#glfwhome:hover,.tablist a:hover,span.lineno a:hover{color:#f60;text-decoration:none}div.directory{border-collapse:inherit;border-spacing:0;border:2px solid #f60;border-radius:4px}hr,.memSeparator{height:2px;background:linear-gradient(to right, #f2f2f2 0, #d9d9d9 50%, #f2f2f2 100%)}dl.note,dl.pre,dl.post,dl.invariant{background:linear-gradient(to bottom, #ddfad1 0, #cbf7ba 100%);box-shadow:inset 0 0 32px #baf5a3;color:#1e5309;border:2px solid #afe599}dl.warning,dl.attention{background:linear-gradient(to bottom, #fae8d1 0, #f7ddba 100%);box-shadow:inset 0 0 32px #f5d1a3;color:#533309;border:2px solid #e5c499}dl.deprecated,dl.bug{background:linear-gradient(to bottom, #fad1e3 0, #f7bad6 100%);box-shadow:inset 0 0 32px #f5a3c8;color:#53092a;border:2px solid #e599bb}dl.todo,dl.test{background:linear-gradient(to bottom, #d1ecfa 0, #bae3f7 100%);box-shadow:inset 0 0 32px #a3daf5;color:#093a53;border:2px solid #99cce5}dl.note,dl.pre,dl.post,dl.invariant,dl.warning,dl.attention,dl.deprecated,dl.bug,dl.todo,dl.test{border-radius:4px;padding:1em;text-shadow:0 1px 1px #fff;margin:1em 0}.note a,.pre a,.post a,.invariant a,.warning a,.attention a,.deprecated a,.bug a,.todo a,.test a,.note a:visited,.pre a:visited,.post a:visited,.invariant a:visited,.warning a:visited,.attention a:visited,.deprecated a:visited,.bug a:visited,.todo a:visited,.test a:visited{color:inherit}div.line{line-height:inherit}div.fragment,pre.fragment{background:#f2f2f2;border-radius:4px;border:none;padding:1em;overflow:auto;border-left:4px solid #ccc;margin:1em 0}.lineno a,.lineno a:visited,.line,pre.fragment{color:#4d4d4d}span.preprocessor,span.comment{color:#007899}a.code,a.code:visited{color:#e64500}span.keyword,span.keywordtype,span.keywordflow{color:#404040;font-weight:bold}span.stringliteral{color:#360099}code{padding:.1em;border-radius:4px} +.sm-dox,.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted,.sm-dox ul a:hover{background:none;text-shadow:none}.sm-dox a span.sub-arrow{border-color:#f2f2f2 transparent transparent transparent}.sm-dox a span.sub-arrow:active,.sm-dox a span.sub-arrow:focus,.sm-dox a span.sub-arrow:hover,.sm-dox a:hover span.sub-arrow{border-color:#f60 transparent transparent transparent}.sm-dox ul a span.sub-arrow:active,.sm-dox ul a span.sub-arrow:focus,.sm-dox ul a span.sub-arrow:hover,.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #f60}.sm-dox ul a:hover{background:#666;text-shadow:none}.sm-dox ul.sm-nowrap a{color:#4d4d4d;text-shadow:none}#main-nav,#main-menu,#main-menu a,#main-menu a:visited,#main-menu a:hover,#main-menu li,.memdoc,dl.reflist dd,div.toc li,.ah,span.lineno,span.lineno a,span.lineno a:hover,.note code,.pre code,.post code,.invariant code,.warning code,.attention code,.deprecated code,.bug code,.todo code,.test code,.doxtable code,.markdownTable code{background:none}#titlearea,.footer,.contents,div.header,.memdoc,table.doxtable td,table.doxtable th,table.markdownTable td,table.markdownTable th,hr,.memSeparator{border:none}#main-menu a,#main-menu a:visited,#main-menu a:hover,#main-menu li,.reflist dt a.el,.levels span,.directory .levels span{text-shadow:none}.memdoc,dl.reflist dd{box-shadow:none}div.headertitle,.note code,.pre code,.post code,.invariant code,.warning code,.attention code,.deprecated code,.bug code,.todo code,.test code,table.doxtable code,table.markdownTable code{padding:0}#nav-path,.directory .levels,span.lineno{display:none}html,#titlearea,.footer,tr.even,.directory tr.even,.doxtable tr:nth-child(even),tr.markdownTableBody:nth-child(even),.mdescLeft,.mdescRight,.memItemLeft,.memItemRight,code,.markdownTableRowEven{background:#f2f2f2}body{color:#4d4d4d}h1,h2,h2.groupheader,h3,div.toc h3,h4,h5,h6,strong,em{color:#1a1a1a;border-bottom:none}h1{padding-top:0.5em;font-size:180%}h2{padding-top:0.5em;margin-bottom:0;font-size:140%}h3{padding-top:0.5em;margin-bottom:0;font-size:110%}.glfwheader{font-size:16px;height:64px;max-width:920px;min-width:800px;padding:0 32px;margin:0 auto}#glfwhome{line-height:64px;padding-right:48px;color:#666;font-size:2.5em;background:url("https://www.glfw.org/css/arrow.png") no-repeat right}.glfwnavbar{list-style-type:none;margin:0 auto;float:right}#glfwhome,.glfwnavbar li{float:left}.glfwnavbar a,.glfwnavbar a:visited{line-height:64px;margin-left:2em;display:block;color:#666}#glfwhome,.glfwnavbar a,.glfwnavbar a:visited{transition:.35s ease}#titlearea,.footer{color:#666}address.footer{text-align:center;padding:2em;margin-top:3em}#top{background:#666}#main-nav{max-width:960px;min-width:800px;margin:0 auto;font-size:13px}#main-menu{max-width:920px;min-width:800px;margin:0 auto;font-size:13px}.memtitle{display:none}.memproto,.memname{font-weight:bold;text-shadow:none}#main-menu{height:36px;display:block;position:relative}#main-menu a,#main-menu a:visited,#main-menu a:hover,#main-menu li{color:#f2f2f2}#main-menu li ul.sm-nowrap li a{color:#4d4d4d}#main-menu li ul.sm-nowrap li a:hover{color:#f60}.contents{min-height:590px}div.contents,div.header{max-width:920px;margin:0 auto;padding:0 32px;background:#fff none}table.doxtable th,table.markdownTable th,dl.reflist dt{background:linear-gradient(to bottom, #ffa733 0, #f60 100%);box-shadow:inset 0 0 32px #f60;text-shadow:0 -1px 1px #b34700;text-align:left;color:#fff}dl.reflist dt a.el{color:#f60;padding:.2em;border-radius:4px;background-color:#ffe0cc}div.toc{float:none;width:auto}div.toc h3{font-size:1.17em}div.toc ul{padding-left:1.5em}div.toc li{font-size:1em;padding-left:0;list-style-type:disc}div.toc,.memproto,div.qindex,div.ah{background:linear-gradient(to bottom, #f2f2f2 0, #e6e6e6 100%);box-shadow:inset 0 0 32px #e6e6e6;text-shadow:0 1px 1px #fff;color:#1a1a1a;border:2px solid #e6e6e6;border-radius:4px}.paramname{color:#803300}dl.reflist dt{border:2px solid #f60;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom:none}dl.reflist dd{border:2px solid #f60;border-bottom-right-radius:4px;border-bottom-left-radius:4px;border-top:none}table.doxtable,table.markdownTable{border-collapse:inherit;border-spacing:0;border:2px solid #f60;border-radius:4px}a,a:hover,a:visited,a:visited:hover,.contents a:visited,.el,a.el:visited,#glfwhome:hover,#main-menu a:hover,span.lineno a:hover{color:#f60;text-decoration:none}div.directory{border-collapse:inherit;border-spacing:0;border:2px solid #f60;border-radius:4px}hr,.memSeparator{height:2px;background:linear-gradient(to right, #f2f2f2 0, #d9d9d9 50%, #f2f2f2 100%)}dl.note,dl.pre,dl.post,dl.invariant{background:linear-gradient(to bottom, #ddfad1 0, #cbf7ba 100%);box-shadow:inset 0 0 32px #baf5a3;color:#1e5309;border:2px solid #afe599}dl.warning,dl.attention{background:linear-gradient(to bottom, #fae8d1 0, #f7ddba 100%);box-shadow:inset 0 0 32px #f5d1a3;color:#533309;border:2px solid #e5c499}dl.deprecated,dl.bug{background:linear-gradient(to bottom, #fad1e3 0, #f7bad6 100%);box-shadow:inset 0 0 32px #f5a3c8;color:#53092a;border:2px solid #e599bb}dl.todo,dl.test{background:linear-gradient(to bottom, #d1ecfa 0, #bae3f7 100%);box-shadow:inset 0 0 32px #a3daf5;color:#093a53;border:2px solid #99cce5}dl.note,dl.pre,dl.post,dl.invariant,dl.warning,dl.attention,dl.deprecated,dl.bug,dl.todo,dl.test{border-radius:4px;padding:1em;text-shadow:0 1px 1px #fff;margin:1em 0}.note a,.pre a,.post a,.invariant a,.warning a,.attention a,.deprecated a,.bug a,.todo a,.test a,.note a:visited,.pre a:visited,.post a:visited,.invariant a:visited,.warning a:visited,.attention a:visited,.deprecated a:visited,.bug a:visited,.todo a:visited,.test a:visited{color:inherit}div.line{line-height:inherit}div.fragment,pre.fragment{background:#f2f2f2;border-radius:4px;border:none;padding:1em;overflow:auto;border-left:4px solid #ccc;margin:1em 0}.lineno a,.lineno a:visited,.line,pre.fragment{color:#4d4d4d}span.preprocessor,span.comment{color:#007899}a.code,a.code:visited{color:#e64500}span.keyword,span.keywordtype,span.keywordflow{color:#404040;font-weight:bold}span.stringliteral{color:#360099}code{padding:.1em;border-radius:4px} diff --git a/ref/glfw/docs/html/files.html b/ref/glfw/docs/html/files.html index 852c9e6e..bd121fce 100644 --- a/ref/glfw/docs/html/files.html +++ b/ref/glfw/docs/html/files.html @@ -3,17 +3,14 @@ - -GLFW: File List + +GLFW: Files - @@ -21,51 +18,31 @@
    - + - - + + + +
    -
    File List
    +
    Files
    Here is a list of all files with brief descriptions:
    @@ -95,7 +72,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
    diff --git a/ref/glfw/docs/html/functions.html b/ref/glfw/docs/html/functions.html deleted file mode 100644 index 9445de1c..00000000 --- a/ref/glfw/docs/html/functions.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - -GLFW: Data Fields - - - - - - - - - - - -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all struct and union fields with links to the structures/unions they belong to:
    -
    - - - diff --git a/ref/glfw/docs/html/functions_vars.html b/ref/glfw/docs/html/functions_vars.html deleted file mode 100644 index 1d06d7c9..00000000 --- a/ref/glfw/docs/html/functions_vars.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - -GLFW: Data Fields - Variables - - - - - - - - - - - -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    - - - diff --git a/ref/glfw/docs/html/glfw3_8h.html b/ref/glfw/docs/html/glfw3_8h.html index 4715abfd..b1cc639d 100644 --- a/ref/glfw/docs/html/glfw3_8h.html +++ b/ref/glfw/docs/html/glfw3_8h.html @@ -3,7 +3,7 @@ - + GLFW: glfw3.h File Reference @@ -11,9 +11,6 @@ - @@ -21,51 +18,31 @@
    - + - - + + + +
    @@ -95,26 +71,40 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
    glfw3.h File Reference
    - -

    The header of the GLFW 3 API. -More...

    - +

    Description

    +

    This is the header file of the GLFW 3 API. It defines all its types and declares all its functions.

    +

    For more information about how to use this file, see Including the GLFW header file.

    +

    Go to the source code of this file.

    - - - - - - - - - - -

    -Data Structures

    struct  GLFWvidmode
     Video mode type. More...
     
    struct  GLFWgammaramp
     Gamma ramp. More...
     
    struct  GLFWimage
     Image data. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -371,6 +361,12 @@ Macros + + + + + + @@ -429,6 +425,63 @@ Macros + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -459,76 +512,141 @@ Macros - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -553,6 +671,10 @@ Macros + + + + @@ -569,6 +691,8 @@ Macros + + @@ -591,25 +715,29 @@ Macros + + + + + + + + + + + - + - + - - - - - - - @@ -635,9 +763,9 @@ Typedefs - - - + + + @@ -659,9 +787,15 @@ Typedefs + + + + + + @@ -698,9 +832,12 @@ Typedefs - - - + + + + + +

    Macros

    #define GLFW_APIENTRY_DEFINED
     
    #define GLFW_TRUE   1
     One. More...
     
    #define GLFW_FALSE   0
     Zero. More...
     
    #define GLFW_HAT_CENTERED   0
     
    #define GLFW_HAT_UP   1
     
    #define GLFW_HAT_RIGHT   2
     
    #define GLFW_HAT_DOWN   4
     
    #define GLFW_HAT_LEFT   8
     
    #define GLFW_HAT_RIGHT_UP   (GLFW_HAT_RIGHT | GLFW_HAT_UP)
     
    #define GLFW_HAT_RIGHT_DOWN   (GLFW_HAT_RIGHT | GLFW_HAT_DOWN)
     
    #define GLFW_HAT_LEFT_UP   (GLFW_HAT_LEFT | GLFW_HAT_UP)
     
    #define GLFW_HAT_LEFT_DOWN   (GLFW_HAT_LEFT | GLFW_HAT_DOWN)
     
    #define GLFW_KEY_UNKNOWN   -1
     
    #define GLFW_KEY_SPACE   32
    #define GLFW_MOD_SUPER   0x0008
     If this bit is set one or more Super keys were held down. More...
     
    #define GLFW_MOD_CAPS_LOCK   0x0010
     If this bit is set the Caps Lock key is enabled. More...
     
    #define GLFW_MOD_NUM_LOCK   0x0020
     If this bit is set the Num Lock key is enabled. More...
     
    #define GLFW_MOUSE_BUTTON_1   0
     
    #define GLFW_MOUSE_BUTTON_2   1
     
    #define GLFW_JOYSTICK_LAST   GLFW_JOYSTICK_16
     
    #define GLFW_GAMEPAD_BUTTON_A   0
     
    #define GLFW_GAMEPAD_BUTTON_B   1
     
    #define GLFW_GAMEPAD_BUTTON_X   2
     
    #define GLFW_GAMEPAD_BUTTON_Y   3
     
    #define GLFW_GAMEPAD_BUTTON_LEFT_BUMPER   4
     
    #define GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER   5
     
    #define GLFW_GAMEPAD_BUTTON_BACK   6
     
    #define GLFW_GAMEPAD_BUTTON_START   7
     
    #define GLFW_GAMEPAD_BUTTON_GUIDE   8
     
    #define GLFW_GAMEPAD_BUTTON_LEFT_THUMB   9
     
    #define GLFW_GAMEPAD_BUTTON_RIGHT_THUMB   10
     
    #define GLFW_GAMEPAD_BUTTON_DPAD_UP   11
     
    #define GLFW_GAMEPAD_BUTTON_DPAD_RIGHT   12
     
    #define GLFW_GAMEPAD_BUTTON_DPAD_DOWN   13
     
    #define GLFW_GAMEPAD_BUTTON_DPAD_LEFT   14
     
    #define GLFW_GAMEPAD_BUTTON_LAST   GLFW_GAMEPAD_BUTTON_DPAD_LEFT
     
    #define GLFW_GAMEPAD_BUTTON_CROSS   GLFW_GAMEPAD_BUTTON_A
     
    #define GLFW_GAMEPAD_BUTTON_CIRCLE   GLFW_GAMEPAD_BUTTON_B
     
    #define GLFW_GAMEPAD_BUTTON_SQUARE   GLFW_GAMEPAD_BUTTON_X
     
    #define GLFW_GAMEPAD_BUTTON_TRIANGLE   GLFW_GAMEPAD_BUTTON_Y
     
    #define GLFW_GAMEPAD_AXIS_LEFT_X   0
     
    #define GLFW_GAMEPAD_AXIS_LEFT_Y   1
     
    #define GLFW_GAMEPAD_AXIS_RIGHT_X   2
     
    #define GLFW_GAMEPAD_AXIS_RIGHT_Y   3
     
    #define GLFW_GAMEPAD_AXIS_LEFT_TRIGGER   4
     
    #define GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER   5
     
    #define GLFW_GAMEPAD_AXIS_LAST   GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER
     
    #define GLFW_NO_ERROR   0
     No error has occurred. More...
     
    #define GLFW_NOT_INITIALIZED   0x00010001
     GLFW has not been initialized. More...
     
    #define GLFW_NO_WINDOW_CONTEXT   0x0001000A
     The specified window does not have an OpenGL or OpenGL ES context. More...
     
    #define GLFW_FOCUSED   0x00020001
     
    #define GLFW_ICONIFIED   0x00020002
     
    #define GLFW_RESIZABLE   0x00020003
     
    #define GLFW_VISIBLE   0x00020004
     
    #define GLFW_DECORATED   0x00020005
     
    #define GLFW_AUTO_ICONIFY   0x00020006
     
    #define GLFW_FLOATING   0x00020007
     
    #define GLFW_MAXIMIZED   0x00020008
     
    #define GLFW_RED_BITS   0x00021001
     
    #define GLFW_GREEN_BITS   0x00021002
     
    #define GLFW_BLUE_BITS   0x00021003
     
    #define GLFW_ALPHA_BITS   0x00021004
     
    #define GLFW_DEPTH_BITS   0x00021005
     
    #define GLFW_STENCIL_BITS   0x00021006
     
    #define GLFW_ACCUM_RED_BITS   0x00021007
     
    #define GLFW_ACCUM_GREEN_BITS   0x00021008
     
    #define GLFW_ACCUM_BLUE_BITS   0x00021009
     
    #define GLFW_ACCUM_ALPHA_BITS   0x0002100A
     
    #define GLFW_AUX_BUFFERS   0x0002100B
     
    #define GLFW_STEREO   0x0002100C
     
    #define GLFW_SAMPLES   0x0002100D
     
    #define GLFW_SRGB_CAPABLE   0x0002100E
     
    #define GLFW_REFRESH_RATE   0x0002100F
     
    #define GLFW_DOUBLEBUFFER   0x00021010
     
    #define GLFW_CLIENT_API   0x00022001
     
    #define GLFW_CONTEXT_VERSION_MAJOR   0x00022002
     
    #define GLFW_CONTEXT_VERSION_MINOR   0x00022003
     
    #define GLFW_CONTEXT_REVISION   0x00022004
     
    #define GLFW_CONTEXT_ROBUSTNESS   0x00022005
     
    #define GLFW_OPENGL_FORWARD_COMPAT   0x00022006
     
    #define GLFW_OPENGL_DEBUG_CONTEXT   0x00022007
     
    #define GLFW_OPENGL_PROFILE   0x00022008
     
    #define GLFW_CONTEXT_RELEASE_BEHAVIOR   0x00022009
     
    #define GLFW_CONTEXT_NO_ERROR   0x0002200A
     
    #define GLFW_CONTEXT_CREATION_API   0x0002200B
     
    #define GLFW_FOCUSED   0x00020001
     Input focus window hint and attribute. More...
     
    #define GLFW_ICONIFIED   0x00020002
     Window iconification window attribute. More...
     
    #define GLFW_RESIZABLE   0x00020003
     Window resize-ability window hint and attribute. More...
     
    #define GLFW_VISIBLE   0x00020004
     Window visibility window hint and attribute. More...
     
    #define GLFW_DECORATED   0x00020005
     Window decoration window hint and attribute. More...
     
    #define GLFW_AUTO_ICONIFY   0x00020006
     Window auto-iconification window hint and attribute. More...
     
    #define GLFW_FLOATING   0x00020007
     Window decoration window hint and attribute. More...
     
    #define GLFW_MAXIMIZED   0x00020008
     Window maximization window hint and attribute. More...
     
    #define GLFW_CENTER_CURSOR   0x00020009
     Cursor centering window hint. More...
     
    #define GLFW_TRANSPARENT_FRAMEBUFFER   0x0002000A
     Window framebuffer transparency hint and attribute. More...
     
    #define GLFW_HOVERED   0x0002000B
     Mouse cursor hover window attribute. More...
     
    #define GLFW_FOCUS_ON_SHOW   0x0002000C
     Input focus on calling show window hint and attribute. More...
     
    #define GLFW_RED_BITS   0x00021001
     Framebuffer bit depth hint. More...
     
    #define GLFW_GREEN_BITS   0x00021002
     Framebuffer bit depth hint. More...
     
    #define GLFW_BLUE_BITS   0x00021003
     Framebuffer bit depth hint. More...
     
    #define GLFW_ALPHA_BITS   0x00021004
     Framebuffer bit depth hint. More...
     
    #define GLFW_DEPTH_BITS   0x00021005
     Framebuffer bit depth hint. More...
     
    #define GLFW_STENCIL_BITS   0x00021006
     Framebuffer bit depth hint. More...
     
    #define GLFW_ACCUM_RED_BITS   0x00021007
     Framebuffer bit depth hint. More...
     
    #define GLFW_ACCUM_GREEN_BITS   0x00021008
     Framebuffer bit depth hint. More...
     
    #define GLFW_ACCUM_BLUE_BITS   0x00021009
     Framebuffer bit depth hint. More...
     
    #define GLFW_ACCUM_ALPHA_BITS   0x0002100A
     Framebuffer bit depth hint. More...
     
    #define GLFW_AUX_BUFFERS   0x0002100B
     Framebuffer auxiliary buffer hint. More...
     
    #define GLFW_STEREO   0x0002100C
     OpenGL stereoscopic rendering hint. More...
     
    #define GLFW_SAMPLES   0x0002100D
     Framebuffer MSAA samples hint. More...
     
    #define GLFW_SRGB_CAPABLE   0x0002100E
     Framebuffer sRGB hint. More...
     
    #define GLFW_REFRESH_RATE   0x0002100F
     Monitor refresh rate hint. More...
     
    #define GLFW_DOUBLEBUFFER   0x00021010
     Framebuffer double buffering hint. More...
     
    #define GLFW_CLIENT_API   0x00022001
     Context client API hint and attribute. More...
     
    #define GLFW_CONTEXT_VERSION_MAJOR   0x00022002
     Context client API major version hint and attribute. More...
     
    #define GLFW_CONTEXT_VERSION_MINOR   0x00022003
     Context client API minor version hint and attribute. More...
     
    #define GLFW_CONTEXT_REVISION   0x00022004
     Context client API revision number hint and attribute. More...
     
    #define GLFW_CONTEXT_ROBUSTNESS   0x00022005
     Context robustness hint and attribute. More...
     
    #define GLFW_OPENGL_FORWARD_COMPAT   0x00022006
     OpenGL forward-compatibility hint and attribute. More...
     
    #define GLFW_OPENGL_DEBUG_CONTEXT   0x00022007
     OpenGL debug context hint and attribute. More...
     
    #define GLFW_OPENGL_PROFILE   0x00022008
     OpenGL profile hint and attribute. More...
     
    #define GLFW_CONTEXT_RELEASE_BEHAVIOR   0x00022009
     Context flush-on-release hint and attribute. More...
     
    #define GLFW_CONTEXT_NO_ERROR   0x0002200A
     Context error suppression hint and attribute. More...
     
    #define GLFW_CONTEXT_CREATION_API   0x0002200B
     Context creation API hint and attribute. More...
     
    #define GLFW_SCALE_TO_MONITOR   0x0002200C
     Window content area scaling window window hint. More...
     
    #define GLFW_COCOA_RETINA_FRAMEBUFFER   0x00023001
     macOS specific window hint. More...
     
    #define GLFW_COCOA_FRAME_NAME   0x00023002
     macOS specific window hint. More...
     
    #define GLFW_COCOA_GRAPHICS_SWITCHING   0x00023003
     macOS specific window hint. More...
     
    #define GLFW_X11_CLASS_NAME   0x00024001
     X11 specific window hint. More...
     
    #define GLFW_X11_INSTANCE_NAME   0x00024002
     X11 specific window hint. More...
     
    #define GLFW_NO_API   0
     
    #define GLFW_OPENGL_API   0x00030001
     
    #define GLFW_STICKY_MOUSE_BUTTONS   0x00033003
     
    #define GLFW_LOCK_KEY_MODS   0x00033004
     
    #define GLFW_RAW_MOUSE_MOTION   0x00033005
     
    #define GLFW_CURSOR_NORMAL   0x00034001
     
    #define GLFW_CURSOR_HIDDEN   0x00034002
     
    #define GLFW_EGL_CONTEXT_API   0x00036002
     
    #define GLFW_OSMESA_CONTEXT_API   0x00036003
     
    #define GLFW_ARROW_CURSOR   0x00036001
     The regular arrow cursor shape. More...
     
     
    #define GLFW_DISCONNECTED   0x00040002
     
    #define GLFW_JOYSTICK_HAT_BUTTONS   0x00050001
     Joystick hat buttons init hint. More...
     
    #define GLFW_COCOA_CHDIR_RESOURCES   0x00051001
     macOS specific init hint. More...
     
    #define GLFW_COCOA_MENUBAR   0x00051002
     macOS specific init hint. More...
     
    #define GLFW_DONT_CARE   -1
     
    #define GLAPIENTRY   APIENTRY
     
    GLFW version macros
    #define GLFW_VERSION_MAJOR   3
     The major version number of the GLFW library. More...
     
    #define GLFW_VERSION_MINOR   2
    #define GLFW_VERSION_MINOR   3
     The minor version number of the GLFW library. More...
     
    #define GLFW_VERSION_REVISION   1
    #define GLFW_VERSION_REVISION   0
     The revision number of the GLFW library. More...
     
    Boolean values
    #define GLFW_TRUE   1
     One. More...
     
    #define GLFW_FALSE   0
     Zero. More...
     
    Key and button actions
    #define GLFW_RELEASE   0
     The key or mouse button was released. More...
    typedef struct GLFWwindow GLFWwindow
     Opaque window object. More...
     
    typedef struct GLFWcursor GLFWcursor
     Opaque cursor object. More...
     
    typedef struct GLFWcursor GLFWcursor
     Opaque cursor object. More...
     
    typedef void(* GLFWerrorfun) (int, const char *)
     The function signature for error callbacks. More...
     
    typedef void(* GLFWwindowiconifyfun) (GLFWwindow *, int)
     The function signature for window iconify/restore callbacks. More...
     
    typedef void(* GLFWwindowmaximizefun) (GLFWwindow *, int)
     The function signature for window maximize/restore callbacks. More...
     
    typedef void(* GLFWframebuffersizefun) (GLFWwindow *, int, int)
     The function signature for framebuffer resize callbacks. More...
     
    typedef void(* GLFWwindowcontentscalefun) (GLFWwindow *, float, float)
     The function signature for window content scale callbacks. More...
     
    typedef void(* GLFWmousebuttonfun) (GLFWwindow *, int, int, int)
     The function signature for mouse button callbacks. More...
     
    typedef struct GLFWgammaramp GLFWgammaramp
     Gamma ramp. More...
     
    typedef struct GLFWimage GLFWimage
     Image data. More...
     
    typedef struct GLFWimage GLFWimage
     Image data. More...
     
    typedef struct GLFWgamepadstate GLFWgamepadstate
     Gamepad input state. More...
     
    @@ -710,12 +847,18 @@ Functions + + + + + + @@ -728,12 +871,24 @@ Functions + + + + + + + + + + + + @@ -758,6 +913,9 @@ Functions + + + @@ -777,13 +935,13 @@ Functions - + - + - + @@ -792,7 +950,7 @@ Functions - + @@ -800,6 +958,15 @@ Functions + + + + + + + + + @@ -818,6 +985,9 @@ Functions + + + @@ -827,6 +997,9 @@ Functions + + + @@ -851,9 +1024,15 @@ Functions + + + + + + @@ -872,9 +1051,15 @@ Functions + + + - + + + + @@ -882,21 +1067,21 @@ Functions - + - + - + - + - + - + @@ -923,21 +1108,45 @@ Functions - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -975,7 +1184,7 @@ Functions - + @@ -990,444 +1199,24 @@ Functions

    Functions

    void glfwTerminate (void)
     Terminates the GLFW library. More...
     
    void glfwInitHint (int hint, int value)
     Sets the specified init hint to the desired value. More...
     
    void glfwGetVersion (int *major, int *minor, int *rev)
     Retrieves the version of the GLFW library. More...
     
    const char * glfwGetVersionString (void)
     Returns a string describing the compile-time configuration. More...
     
    int glfwGetError (const char **description)
     Returns and clears the last error for the calling thread. More...
     
    GLFWerrorfun glfwSetErrorCallback (GLFWerrorfun cbfun)
     Sets the error callback. More...
     
    void glfwGetMonitorPos (GLFWmonitor *monitor, int *xpos, int *ypos)
     Returns the position of the monitor's viewport on the virtual screen. More...
     
    void glfwGetMonitorWorkarea (GLFWmonitor *monitor, int *xpos, int *ypos, int *width, int *height)
     Retrives the work area of the monitor. More...
     
    void glfwGetMonitorPhysicalSize (GLFWmonitor *monitor, int *widthMM, int *heightMM)
     Returns the physical size of the monitor. More...
     
    void glfwGetMonitorContentScale (GLFWmonitor *monitor, float *xscale, float *yscale)
     Retrieves the content scale for the specified monitor. More...
     
    const char * glfwGetMonitorName (GLFWmonitor *monitor)
     Returns the name of the specified monitor. More...
     
    void glfwSetMonitorUserPointer (GLFWmonitor *monitor, void *pointer)
     Sets the user pointer of the specified monitor. More...
     
    void * glfwGetMonitorUserPointer (GLFWmonitor *monitor)
     Returns the user pointer of the specified monitor. More...
     
    GLFWmonitorfun glfwSetMonitorCallback (GLFWmonitorfun cbfun)
     Sets the monitor configuration callback. More...
     
    void glfwWindowHint (int hint, int value)
     Sets the specified window hint to the desired value. More...
     
    void glfwWindowHintString (int hint, const char *value)
     Sets the specified window hint to the desired value. More...
     
    GLFWwindowglfwCreateWindow (int width, int height, const char *title, GLFWmonitor *monitor, GLFWwindow *share)
     Creates a window and its associated context. More...
     
     Sets the icon for the specified window. More...
     
    void glfwGetWindowPos (GLFWwindow *window, int *xpos, int *ypos)
     Retrieves the position of the client area of the specified window. More...
     Retrieves the position of the content area of the specified window. More...
     
    void glfwSetWindowPos (GLFWwindow *window, int xpos, int ypos)
     Sets the position of the client area of the specified window. More...
     Sets the position of the content area of the specified window. More...
     
    void glfwGetWindowSize (GLFWwindow *window, int *width, int *height)
     Retrieves the size of the client area of the specified window. More...
     Retrieves the size of the content area of the specified window. More...
     
    void glfwSetWindowSizeLimits (GLFWwindow *window, int minwidth, int minheight, int maxwidth, int maxheight)
     Sets the size limits of the specified window. More...
     Sets the aspect ratio of the specified window. More...
     
    void glfwSetWindowSize (GLFWwindow *window, int width, int height)
     Sets the size of the client area of the specified window. More...
     Sets the size of the content area of the specified window. More...
     
    void glfwGetFramebufferSize (GLFWwindow *window, int *width, int *height)
     Retrieves the size of the framebuffer of the specified window. More...
    void glfwGetWindowFrameSize (GLFWwindow *window, int *left, int *top, int *right, int *bottom)
     Retrieves the size of the frame of the window. More...
     
    void glfwGetWindowContentScale (GLFWwindow *window, float *xscale, float *yscale)
     Retrieves the content scale for the specified window. More...
     
    float glfwGetWindowOpacity (GLFWwindow *window)
     Returns the opacity of the whole window. More...
     
    void glfwSetWindowOpacity (GLFWwindow *window, float opacity)
     Sets the opacity of the whole window. More...
     
    void glfwIconifyWindow (GLFWwindow *window)
     Iconifies the specified window. More...
     
    void glfwFocusWindow (GLFWwindow *window)
     Brings the specified window to front and sets input focus. More...
     
    void glfwRequestWindowAttention (GLFWwindow *window)
     Requests user attention to the specified window. More...
     
    GLFWmonitorglfwGetWindowMonitor (GLFWwindow *window)
     Returns the monitor that the window uses for full screen mode. More...
     
    int glfwGetWindowAttrib (GLFWwindow *window, int attrib)
     Returns an attribute of the specified window. More...
     
    void glfwSetWindowAttrib (GLFWwindow *window, int attrib, int value)
     Sets an attribute of the specified window. More...
     
    void glfwSetWindowUserPointer (GLFWwindow *window, void *pointer)
     Sets the user pointer of the specified window. More...
     
    GLFWwindowiconifyfun glfwSetWindowIconifyCallback (GLFWwindow *window, GLFWwindowiconifyfun cbfun)
     Sets the iconify callback for the specified window. More...
     
    GLFWwindowmaximizefun glfwSetWindowMaximizeCallback (GLFWwindow *window, GLFWwindowmaximizefun cbfun)
     Sets the maximize callback for the specified window. More...
     
    GLFWframebuffersizefun glfwSetFramebufferSizeCallback (GLFWwindow *window, GLFWframebuffersizefun cbfun)
     Sets the framebuffer resize callback for the specified window. More...
     
    GLFWwindowcontentscalefun glfwSetWindowContentScaleCallback (GLFWwindow *window, GLFWwindowcontentscalefun cbfun)
     Sets the window content scale callback for the specified window. More...
     
    void glfwPollEvents (void)
     Processes all pending events. More...
     
    void glfwSetInputMode (GLFWwindow *window, int mode, int value)
     Sets an input option for the specified window. More...
     
    int glfwRawMouseMotionSupported (void)
     Returns whether raw mouse motion is supported. More...
     
    const char * glfwGetKeyName (int key, int scancode)
     Returns the localized name of the specified printable key. More...
     Returns the layout-specific name of the specified printable key. More...
     
    int glfwGetKeyScancode (int key)
     Returns the platform-specific scancode of the specified key. More...
     
    int glfwGetKey (GLFWwindow *window, int key)
     Returns the last reported state of a keyboard key for the specified window. More...
     
     Returns the last reported state of a mouse button for the specified window. More...
     
    void glfwGetCursorPos (GLFWwindow *window, double *xpos, double *ypos)
     Retrieves the position of the cursor relative to the client area of the window. More...
     Retrieves the position of the cursor relative to the content area of the window. More...
     
    void glfwSetCursorPos (GLFWwindow *window, double xpos, double ypos)
     Sets the position of the cursor, relative to the client area of the window. More...
     Sets the position of the cursor, relative to the content area of the window. More...
     
    GLFWcursorglfwCreateCursor (const GLFWimage *image, int xhot, int yhot)
    GLFWcursorglfwCreateCursor (const GLFWimage *image, int xhot, int yhot)
     Creates a custom cursor. More...
     
    GLFWcursorglfwCreateStandardCursor (int shape)
    GLFWcursorglfwCreateStandardCursor (int shape)
     Creates a cursor with a standard shape. More...
     
    void glfwDestroyCursor (GLFWcursor *cursor)
    void glfwDestroyCursor (GLFWcursor *cursor)
     Destroys a cursor. More...
     
    void glfwSetCursor (GLFWwindow *window, GLFWcursor *cursor)
    void glfwSetCursor (GLFWwindow *window, GLFWcursor *cursor)
     Sets the cursor for the window. More...
     
    GLFWkeyfun glfwSetKeyCallback (GLFWwindow *window, GLFWkeyfun cbfun)
    GLFWdropfun glfwSetDropCallback (GLFWwindow *window, GLFWdropfun cbfun)
     Sets the file drop callback. More...
     
    int glfwJoystickPresent (int joy)
     Returns whether the specified joystick is present. More...
     
    const float * glfwGetJoystickAxes (int joy, int *count)
     Returns the values of all axes of the specified joystick. More...
     
    const unsigned char * glfwGetJoystickButtons (int joy, int *count)
     Returns the state of all buttons of the specified joystick. More...
     
    const char * glfwGetJoystickName (int joy)
     Returns the name of the specified joystick. More...
     
    int glfwJoystickPresent (int jid)
     Returns whether the specified joystick is present. More...
     
    const float * glfwGetJoystickAxes (int jid, int *count)
     Returns the values of all axes of the specified joystick. More...
     
    const unsigned char * glfwGetJoystickButtons (int jid, int *count)
     Returns the state of all buttons of the specified joystick. More...
     
    const unsigned char * glfwGetJoystickHats (int jid, int *count)
     Returns the state of all hats of the specified joystick. More...
     
    const char * glfwGetJoystickName (int jid)
     Returns the name of the specified joystick. More...
     
    const char * glfwGetJoystickGUID (int jid)
     Returns the SDL comaptible GUID of the specified joystick. More...
     
    void glfwSetJoystickUserPointer (int jid, void *pointer)
     Sets the user pointer of the specified joystick. More...
     
    void * glfwGetJoystickUserPointer (int jid)
     Returns the user pointer of the specified joystick. More...
     
    int glfwJoystickIsGamepad (int jid)
     Returns whether the specified joystick has a gamepad mapping. More...
     
    GLFWjoystickfun glfwSetJoystickCallback (GLFWjoystickfun cbfun)
     Sets the joystick configuration callback. More...
     
    int glfwUpdateGamepadMappings (const char *string)
     Adds the specified SDL_GameControllerDB gamepad mappings. More...
     
    const char * glfwGetGamepadName (int jid)
     Returns the human-readable gamepad name for the specified joystick. More...
     
    int glfwGetGamepadState (int jid, GLFWgamepadstate *state)
     Retrieves the state of the specified joystick remapped as a gamepad. More...
     
    void glfwSetClipboardString (GLFWwindow *window, const char *string)
     Sets the clipboard to the specified string. More...
     
     Returns the address of the specified function for the current context. More...
     
    int glfwVulkanSupported (void)
     Returns whether the Vulkan loader has been found. More...
     Returns whether the Vulkan loader and an ICD have been found. More...
     
    const char ** glfwGetRequiredInstanceExtensions (uint32_t *count)
     Returns the Vulkan instance extensions required by GLFW. More...
     Creates a Vulkan surface for the specified window. More...
     
    -

    Detailed Description

    -

    This is the header file of the GLFW 3 API. It defines all its types and declares all its functions.

    -

    For more information about how to use this file, see Including the GLFW header file.

    -

    Macro Definition Documentation

    - +

    Macro Definition Documentation

    + +

    ◆ GLFW_APIENTRY_DEFINED

    +
    - +
    #define GLFW_ACCUM_ALPHA_BITS   0x0002100A#define GLFW_APIENTRY_DEFINED
    - -
    -
    - - - - -
    #define GLFW_ACCUM_BLUE_BITS   0x00021009
    -
    + +

    ◆ GLFW_NO_API

    -
    -
    - -
    -
    - - - - -
    #define GLFW_ACCUM_GREEN_BITS   0x00021008
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_ACCUM_RED_BITS   0x00021007
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_ALPHA_BITS   0x00021004
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_ANY_RELEASE_BEHAVIOR   0
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_AUTO_ICONIFY   0x00020006
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_AUX_BUFFERS   0x0002100B
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_BLUE_BITS   0x00021003
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_CLIENT_API   0x00022001
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_CONNECTED   0x00040001
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_CONTEXT_CREATION_API   0x0002200B
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_CONTEXT_NO_ERROR   0x0002200A
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_CONTEXT_RELEASE_BEHAVIOR   0x00022009
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_CONTEXT_REVISION   0x00022004
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_CONTEXT_ROBUSTNESS   0x00022005
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_CONTEXT_VERSION_MAJOR   0x00022002
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_CONTEXT_VERSION_MINOR   0x00022003
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_CURSOR   0x00033001
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_CURSOR_DISABLED   0x00034003
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_CURSOR_HIDDEN   0x00034002
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_CURSOR_NORMAL   0x00034001
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_DECORATED   0x00020005
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_DEPTH_BITS   0x00021005
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_DISCONNECTED   0x00040002
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_DONT_CARE   -1
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_DOUBLEBUFFER   0x00021010
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_EGL_CONTEXT_API   0x00036002
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_FALSE   0
    -
    -

    Zero. Seriously. You don't need to use this symbol in your code. It's just just semantic sugar for the number 0. You can use 0 or false or _False or GL_FALSE or whatever you want.

    - -
    -
    - -
    -
    - - - - -
    #define GLFW_FLOATING   0x00020007
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_FOCUSED   0x00020001
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_GREEN_BITS   0x00021002
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_ICONIFIED   0x00020002
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_LOSE_CONTEXT_ON_RESET   0x00031002
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_MAXIMIZED   0x00020008
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_NATIVE_CONTEXT_API   0x00036001
    -
    - -
    -
    -
    @@ -1439,43 +1228,9 @@ Functions - -
    -
    -
    - - - -
    #define GLFW_NO_RESET_NOTIFICATION   0x00031001
    -
    + +

    ◆ GLFW_OPENGL_API

    -
    -
    - -
    -
    - - - - -
    #define GLFW_NO_ROBUSTNESS   0
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_OPENGL_ANY_PROFILE   0
    -
    - -
    -
    -
    @@ -1487,43 +1242,9 @@ Functions - -
    -
    -
    - - - -
    #define GLFW_OPENGL_COMPAT_PROFILE   0x00032002
    -
    + +

    ◆ GLFW_OPENGL_ES_API

    -
    -
    - -
    -
    - - - - -
    #define GLFW_OPENGL_CORE_PROFILE   0x00032001
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_OPENGL_DEBUG_CONTEXT   0x00022007
    -
    - -
    -
    -
    @@ -1535,139 +1256,107 @@ Functions - + +

    ◆ GLFW_NO_ROBUSTNESS

    +
    - +
    #define GLFW_OPENGL_FORWARD_COMPAT   0x00022006#define GLFW_NO_ROBUSTNESS   0
    - + +

    ◆ GLFW_NO_RESET_NOTIFICATION

    +
    - +
    #define GLFW_OPENGL_PROFILE   0x00022008#define GLFW_NO_RESET_NOTIFICATION   0x00031001
    - + +

    ◆ GLFW_LOSE_CONTEXT_ON_RESET

    +
    - +
    #define GLFW_RED_BITS   0x00021001#define GLFW_LOSE_CONTEXT_ON_RESET   0x00031002
    - + +

    ◆ GLFW_OPENGL_ANY_PROFILE

    +
    - +
    #define GLFW_REFRESH_RATE   0x0002100F#define GLFW_OPENGL_ANY_PROFILE   0
    - + +

    ◆ GLFW_OPENGL_CORE_PROFILE

    +
    - +
    #define GLFW_RELEASE_BEHAVIOR_FLUSH   0x00035001#define GLFW_OPENGL_CORE_PROFILE   0x00032001
    - + +

    ◆ GLFW_OPENGL_COMPAT_PROFILE

    +
    - +
    #define GLFW_RELEASE_BEHAVIOR_NONE   0x00035002#define GLFW_OPENGL_COMPAT_PROFILE   0x00032002
    - + +

    ◆ GLFW_CURSOR

    +
    - +
    #define GLFW_RESIZABLE   0x00020003#define GLFW_CURSOR   0x00033001
    - -
    -
    - - - - -
    #define GLFW_SAMPLES   0x0002100D
    -
    + +

    ◆ GLFW_STICKY_KEYS

    -
    -
    - -
    -
    - - - - -
    #define GLFW_SRGB_CAPABLE   0x0002100E
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_STENCIL_BITS   0x00021006
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_STEREO   0x0002100C
    -
    - -
    -
    -
    @@ -1679,7 +1368,9 @@ Functions - + +

    ◆ GLFW_STICKY_MOUSE_BUTTONS

    +
    @@ -1691,68 +1382,220 @@ Functions - -
    -
    -
    - - - -
    #define GLFW_TRUE   1
    -
    -

    One. Seriously. You don't need to use this symbol in your code. It's just semantic sugar for the number 1. You can use 1 or true or _True or GL_TRUE or whatever you want.

    + +

    ◆ GLFW_LOCK_KEY_MODS

    -
    -
    -
    - +
    #define GLFW_VISIBLE   0x00020004#define GLFW_LOCK_KEY_MODS   0x00033004
    -

    Typedef Documentation

    - + +

    ◆ GLFW_RAW_MOUSE_MOTION

    +
    - +
    typedef struct GLFWcursor GLFWcursor#define GLFW_RAW_MOUSE_MOTION   0x00033005
    -

    Opaque cursor object.

    -
    See also
    Cursor objects
    -
    Since
    Added in version 3.1.
    - + +

    ◆ GLFW_CURSOR_NORMAL

    +
    - + + +
    typedef struct GLFWimage GLFWimage#define GLFW_CURSOR_NORMAL   0x00034001
    +
    + +
    +
    + +

    ◆ GLFW_CURSOR_HIDDEN

    + +
    +
    + + + + +
    #define GLFW_CURSOR_HIDDEN   0x00034002
    +
    + +
    +
    + +

    ◆ GLFW_CURSOR_DISABLED

    + +
    +
    + + + + +
    #define GLFW_CURSOR_DISABLED   0x00034003
    +
    + +
    +
    + +

    ◆ GLFW_ANY_RELEASE_BEHAVIOR

    + +
    +
    + + + + +
    #define GLFW_ANY_RELEASE_BEHAVIOR   0
    +
    + +
    +
    + +

    ◆ GLFW_RELEASE_BEHAVIOR_FLUSH

    + +
    +
    + + + + +
    #define GLFW_RELEASE_BEHAVIOR_FLUSH   0x00035001
    +
    + +
    +
    + +

    ◆ GLFW_RELEASE_BEHAVIOR_NONE

    + +
    +
    + + + + +
    #define GLFW_RELEASE_BEHAVIOR_NONE   0x00035002
    +
    + +
    +
    + +

    ◆ GLFW_NATIVE_CONTEXT_API

    + +
    +
    + + + + +
    #define GLFW_NATIVE_CONTEXT_API   0x00036001
    +
    + +
    +
    + +

    ◆ GLFW_EGL_CONTEXT_API

    + +
    +
    + + + + +
    #define GLFW_EGL_CONTEXT_API   0x00036002
    +
    + +
    +
    + +

    ◆ GLFW_OSMESA_CONTEXT_API

    + +
    +
    + + + + +
    #define GLFW_OSMESA_CONTEXT_API   0x00036003
    +
    + +
    +
    + +

    ◆ GLFW_CONNECTED

    + +
    +
    + + + + +
    #define GLFW_CONNECTED   0x00040001
    +
    + +
    +
    + +

    ◆ GLFW_DISCONNECTED

    + +
    +
    + + + + +
    #define GLFW_DISCONNECTED   0x00040002
    +
    + +
    +
    + +

    ◆ GLFW_DONT_CARE

    + +
    +
    + + + + +
    #define GLFW_DONT_CARE   -1
    +
    + +
    +
    + +

    ◆ GLAPIENTRY

    + +
    +
    + + +
    #define GLAPIENTRY   APIENTRY
    -
    See also
    Custom cursor creation
    -
    -Window icon
    -
    Since
    Added in version 2.1.
    -
    GLFW 3: Removed format and bytes-per-pixel members.
    diff --git a/ref/glfw/docs/html/glfw3_8h_source.html b/ref/glfw/docs/html/glfw3_8h_source.html index ff784907..7449ac10 100644 --- a/ref/glfw/docs/html/glfw3_8h_source.html +++ b/ref/glfw/docs/html/glfw3_8h_source.html @@ -3,7 +3,7 @@ - + GLFW: glfw3.h Source File @@ -11,9 +11,6 @@ - @@ -21,51 +18,31 @@
    - + - - + + + +
    @@ -90,147 +67,177 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
    glfw3.h
    -Go to the documentation of this file.
    1 /*************************************************************************
    2  * GLFW 3.2 - www.glfw.org
    3  * A library for OpenGL, window and input
    4  *------------------------------------------------------------------------
    5  * Copyright (c) 2002-2006 Marcus Geelnard
    6  * Copyright (c) 2006-2016 Camilla Berglund <elmindreda@glfw.org>
    7  *
    8  * This software is provided 'as-is', without any express or implied
    9  * warranty. In no event will the authors be held liable for any damages
    10  * arising from the use of this software.
    11  *
    12  * Permission is granted to anyone to use this software for any purpose,
    13  * including commercial applications, and to alter it and redistribute it
    14  * freely, subject to the following restrictions:
    15  *
    16  * 1. The origin of this software must not be misrepresented; you must not
    17  * claim that you wrote the original software. If you use this software
    18  * in a product, an acknowledgment in the product documentation would
    19  * be appreciated but is not required.
    20  *
    21  * 2. Altered source versions must be plainly marked as such, and must not
    22  * be misrepresented as being the original software.
    23  *
    24  * 3. This notice may not be removed or altered from any source
    25  * distribution.
    26  *
    27  *************************************************************************/
    28 
    29 #ifndef _glfw3_h_
    30 #define _glfw3_h_
    31 
    32 #ifdef __cplusplus
    33 extern "C" {
    34 #endif
    35 
    36 
    37 /*************************************************************************
    38  * Doxygen documentation
    39  *************************************************************************/
    40 
    83 /*************************************************************************
    84  * Compiler- and platform-specific preprocessor work
    85  *************************************************************************/
    86 
    87 /* If we are we on Windows, we want a single define for it.
    88  */
    89 #if !defined(_WIN32) && (defined(__WIN32__) || defined(WIN32) || defined(__MINGW32__))
    90  #define _WIN32
    91 #endif /* _WIN32 */
    92 
    93 /* It is customary to use APIENTRY for OpenGL function pointer declarations on
    94  * all platforms. Additionally, the Windows OpenGL header needs APIENTRY.
    95  */
    96 #ifndef APIENTRY
    97  #ifdef _WIN32
    98  #define APIENTRY __stdcall
    99  #else
    100  #define APIENTRY
    101  #endif
    102 #endif /* APIENTRY */
    103 
    104 /* Some Windows OpenGL headers need this.
    105  */
    106 #if !defined(WINGDIAPI) && defined(_WIN32)
    107  #define WINGDIAPI __declspec(dllimport)
    108  #define GLFW_WINGDIAPI_DEFINED
    109 #endif /* WINGDIAPI */
    110 
    111 /* Some Windows GLU headers need this.
    112  */
    113 #if !defined(CALLBACK) && defined(_WIN32)
    114  #define CALLBACK __stdcall
    115  #define GLFW_CALLBACK_DEFINED
    116 #endif /* CALLBACK */
    117 
    118 /* Include because most Windows GLU headers need wchar_t and
    119  * the OS X OpenGL header blocks the definition of ptrdiff_t by glext.h.
    120  * Include it unconditionally to avoid surprising side-effects.
    121  */
    122 #include <stddef.h>
    123 
    124 /* Include because it is needed by Vulkan and related functions.
    125  */
    126 #include <stdint.h>
    127 
    128 /* Include the chosen client API headers.
    129  */
    130 #if defined(__APPLE__)
    131  #if defined(GLFW_INCLUDE_GLCOREARB)
    132  #include <OpenGL/gl3.h>
    133  #if defined(GLFW_INCLUDE_GLEXT)
    134  #include <OpenGL/gl3ext.h>
    135  #endif
    136  #elif !defined(GLFW_INCLUDE_NONE)
    137  #if !defined(GLFW_INCLUDE_GLEXT)
    138  #define GL_GLEXT_LEGACY
    139  #endif
    140  #include <OpenGL/gl.h>
    141  #endif
    142  #if defined(GLFW_INCLUDE_GLU)
    143  #include <OpenGL/glu.h>
    144  #endif
    145 #else
    146  #if defined(GLFW_INCLUDE_GLCOREARB)
    147  #include <GL/glcorearb.h>
    148  #elif defined(GLFW_INCLUDE_ES1)
    149  #include <GLES/gl.h>
    150  #if defined(GLFW_INCLUDE_GLEXT)
    151  #include <GLES/glext.h>
    152  #endif
    153  #elif defined(GLFW_INCLUDE_ES2)
    154  #include <GLES2/gl2.h>
    155  #if defined(GLFW_INCLUDE_GLEXT)
    156  #include <GLES2/gl2ext.h>
    157  #endif
    158  #elif defined(GLFW_INCLUDE_ES3)
    159  #include <GLES3/gl3.h>
    160  #if defined(GLFW_INCLUDE_GLEXT)
    161  #include <GLES2/gl2ext.h>
    162  #endif
    163  #elif defined(GLFW_INCLUDE_ES31)
    164  #include <GLES3/gl31.h>
    165  #if defined(GLFW_INCLUDE_GLEXT)
    166  #include <GLES2/gl2ext.h>
    167  #endif
    168  #elif defined(GLFW_INCLUDE_VULKAN)
    169  #include <vulkan/vulkan.h>
    170  #elif !defined(GLFW_INCLUDE_NONE)
    171  #include <GL/gl.h>
    172  #if defined(GLFW_INCLUDE_GLEXT)
    173  #include <GL/glext.h>
    174  #endif
    175  #endif
    176  #if defined(GLFW_INCLUDE_GLU)
    177  #include <GL/glu.h>
    178  #endif
    179 #endif
    180 
    181 #if defined(GLFW_DLL) && defined(_GLFW_BUILD_DLL)
    182  /* GLFW_DLL must be defined by applications that are linking against the DLL
    183  * version of the GLFW library. _GLFW_BUILD_DLL is defined by the GLFW
    184  * configuration header when compiling the DLL version of the library.
    185  */
    186  #error "You must not have both GLFW_DLL and _GLFW_BUILD_DLL defined"
    187 #endif
    188 
    189 /* GLFWAPI is used to declare public API functions for export
    190  * from the DLL / shared library / dynamic library.
    191  */
    192 #if defined(_WIN32) && defined(_GLFW_BUILD_DLL)
    193  /* We are building GLFW as a Win32 DLL */
    194  #define GLFWAPI __declspec(dllexport)
    195 #elif defined(_WIN32) && defined(GLFW_DLL)
    196  /* We are calling GLFW as a Win32 DLL */
    197  #define GLFWAPI __declspec(dllimport)
    198 #elif defined(__GNUC__) && defined(_GLFW_BUILD_DLL)
    199  /* We are building GLFW as a shared / dynamic library */
    200  #define GLFWAPI __attribute__((visibility("default")))
    201 #else
    202  /* We are building or calling GLFW as a static library */
    203  #define GLFWAPI
    204 #endif
    205 
    206 
    207 /*************************************************************************
    208  * GLFW API tokens
    209  *************************************************************************/
    210 
    218 #define GLFW_VERSION_MAJOR 3
    219 
    225 #define GLFW_VERSION_MINOR 2
    226 
    232 #define GLFW_VERSION_REVISION 1
    233 
    243 #define GLFW_TRUE 1
    244 
    250 #define GLFW_FALSE 0
    251 
    261 #define GLFW_RELEASE 0
    262 
    268 #define GLFW_PRESS 1
    269 
    275 #define GLFW_REPEAT 2
    276 
    301 /* The unknown key */
    302 #define GLFW_KEY_UNKNOWN -1
    303 
    304 /* Printable keys */
    305 #define GLFW_KEY_SPACE 32
    306 #define GLFW_KEY_APOSTROPHE 39 /* ' */
    307 #define GLFW_KEY_COMMA 44 /* , */
    308 #define GLFW_KEY_MINUS 45 /* - */
    309 #define GLFW_KEY_PERIOD 46 /* . */
    310 #define GLFW_KEY_SLASH 47 /* / */
    311 #define GLFW_KEY_0 48
    312 #define GLFW_KEY_1 49
    313 #define GLFW_KEY_2 50
    314 #define GLFW_KEY_3 51
    315 #define GLFW_KEY_4 52
    316 #define GLFW_KEY_5 53
    317 #define GLFW_KEY_6 54
    318 #define GLFW_KEY_7 55
    319 #define GLFW_KEY_8 56
    320 #define GLFW_KEY_9 57
    321 #define GLFW_KEY_SEMICOLON 59 /* ; */
    322 #define GLFW_KEY_EQUAL 61 /* = */
    323 #define GLFW_KEY_A 65
    324 #define GLFW_KEY_B 66
    325 #define GLFW_KEY_C 67
    326 #define GLFW_KEY_D 68
    327 #define GLFW_KEY_E 69
    328 #define GLFW_KEY_F 70
    329 #define GLFW_KEY_G 71
    330 #define GLFW_KEY_H 72
    331 #define GLFW_KEY_I 73
    332 #define GLFW_KEY_J 74
    333 #define GLFW_KEY_K 75
    334 #define GLFW_KEY_L 76
    335 #define GLFW_KEY_M 77
    336 #define GLFW_KEY_N 78
    337 #define GLFW_KEY_O 79
    338 #define GLFW_KEY_P 80
    339 #define GLFW_KEY_Q 81
    340 #define GLFW_KEY_R 82
    341 #define GLFW_KEY_S 83
    342 #define GLFW_KEY_T 84
    343 #define GLFW_KEY_U 85
    344 #define GLFW_KEY_V 86
    345 #define GLFW_KEY_W 87
    346 #define GLFW_KEY_X 88
    347 #define GLFW_KEY_Y 89
    348 #define GLFW_KEY_Z 90
    349 #define GLFW_KEY_LEFT_BRACKET 91 /* [ */
    350 #define GLFW_KEY_BACKSLASH 92 /* \ */
    351 #define GLFW_KEY_RIGHT_BRACKET 93 /* ] */
    352 #define GLFW_KEY_GRAVE_ACCENT 96 /* ` */
    353 #define GLFW_KEY_WORLD_1 161 /* non-US #1 */
    354 #define GLFW_KEY_WORLD_2 162 /* non-US #2 */
    355 
    356 /* Function keys */
    357 #define GLFW_KEY_ESCAPE 256
    358 #define GLFW_KEY_ENTER 257
    359 #define GLFW_KEY_TAB 258
    360 #define GLFW_KEY_BACKSPACE 259
    361 #define GLFW_KEY_INSERT 260
    362 #define GLFW_KEY_DELETE 261
    363 #define GLFW_KEY_RIGHT 262
    364 #define GLFW_KEY_LEFT 263
    365 #define GLFW_KEY_DOWN 264
    366 #define GLFW_KEY_UP 265
    367 #define GLFW_KEY_PAGE_UP 266
    368 #define GLFW_KEY_PAGE_DOWN 267
    369 #define GLFW_KEY_HOME 268
    370 #define GLFW_KEY_END 269
    371 #define GLFW_KEY_CAPS_LOCK 280
    372 #define GLFW_KEY_SCROLL_LOCK 281
    373 #define GLFW_KEY_NUM_LOCK 282
    374 #define GLFW_KEY_PRINT_SCREEN 283
    375 #define GLFW_KEY_PAUSE 284
    376 #define GLFW_KEY_F1 290
    377 #define GLFW_KEY_F2 291
    378 #define GLFW_KEY_F3 292
    379 #define GLFW_KEY_F4 293
    380 #define GLFW_KEY_F5 294
    381 #define GLFW_KEY_F6 295
    382 #define GLFW_KEY_F7 296
    383 #define GLFW_KEY_F8 297
    384 #define GLFW_KEY_F9 298
    385 #define GLFW_KEY_F10 299
    386 #define GLFW_KEY_F11 300
    387 #define GLFW_KEY_F12 301
    388 #define GLFW_KEY_F13 302
    389 #define GLFW_KEY_F14 303
    390 #define GLFW_KEY_F15 304
    391 #define GLFW_KEY_F16 305
    392 #define GLFW_KEY_F17 306
    393 #define GLFW_KEY_F18 307
    394 #define GLFW_KEY_F19 308
    395 #define GLFW_KEY_F20 309
    396 #define GLFW_KEY_F21 310
    397 #define GLFW_KEY_F22 311
    398 #define GLFW_KEY_F23 312
    399 #define GLFW_KEY_F24 313
    400 #define GLFW_KEY_F25 314
    401 #define GLFW_KEY_KP_0 320
    402 #define GLFW_KEY_KP_1 321
    403 #define GLFW_KEY_KP_2 322
    404 #define GLFW_KEY_KP_3 323
    405 #define GLFW_KEY_KP_4 324
    406 #define GLFW_KEY_KP_5 325
    407 #define GLFW_KEY_KP_6 326
    408 #define GLFW_KEY_KP_7 327
    409 #define GLFW_KEY_KP_8 328
    410 #define GLFW_KEY_KP_9 329
    411 #define GLFW_KEY_KP_DECIMAL 330
    412 #define GLFW_KEY_KP_DIVIDE 331
    413 #define GLFW_KEY_KP_MULTIPLY 332
    414 #define GLFW_KEY_KP_SUBTRACT 333
    415 #define GLFW_KEY_KP_ADD 334
    416 #define GLFW_KEY_KP_ENTER 335
    417 #define GLFW_KEY_KP_EQUAL 336
    418 #define GLFW_KEY_LEFT_SHIFT 340
    419 #define GLFW_KEY_LEFT_CONTROL 341
    420 #define GLFW_KEY_LEFT_ALT 342
    421 #define GLFW_KEY_LEFT_SUPER 343
    422 #define GLFW_KEY_RIGHT_SHIFT 344
    423 #define GLFW_KEY_RIGHT_CONTROL 345
    424 #define GLFW_KEY_RIGHT_ALT 346
    425 #define GLFW_KEY_RIGHT_SUPER 347
    426 #define GLFW_KEY_MENU 348
    427 
    428 #define GLFW_KEY_LAST GLFW_KEY_MENU
    429 
    441 #define GLFW_MOD_SHIFT 0x0001
    442 
    444 #define GLFW_MOD_CONTROL 0x0002
    445 
    447 #define GLFW_MOD_ALT 0x0004
    448 
    450 #define GLFW_MOD_SUPER 0x0008
    451 
    460 #define GLFW_MOUSE_BUTTON_1 0
    461 #define GLFW_MOUSE_BUTTON_2 1
    462 #define GLFW_MOUSE_BUTTON_3 2
    463 #define GLFW_MOUSE_BUTTON_4 3
    464 #define GLFW_MOUSE_BUTTON_5 4
    465 #define GLFW_MOUSE_BUTTON_6 5
    466 #define GLFW_MOUSE_BUTTON_7 6
    467 #define GLFW_MOUSE_BUTTON_8 7
    468 #define GLFW_MOUSE_BUTTON_LAST GLFW_MOUSE_BUTTON_8
    469 #define GLFW_MOUSE_BUTTON_LEFT GLFW_MOUSE_BUTTON_1
    470 #define GLFW_MOUSE_BUTTON_RIGHT GLFW_MOUSE_BUTTON_2
    471 #define GLFW_MOUSE_BUTTON_MIDDLE GLFW_MOUSE_BUTTON_3
    472 
    480 #define GLFW_JOYSTICK_1 0
    481 #define GLFW_JOYSTICK_2 1
    482 #define GLFW_JOYSTICK_3 2
    483 #define GLFW_JOYSTICK_4 3
    484 #define GLFW_JOYSTICK_5 4
    485 #define GLFW_JOYSTICK_6 5
    486 #define GLFW_JOYSTICK_7 6
    487 #define GLFW_JOYSTICK_8 7
    488 #define GLFW_JOYSTICK_9 8
    489 #define GLFW_JOYSTICK_10 9
    490 #define GLFW_JOYSTICK_11 10
    491 #define GLFW_JOYSTICK_12 11
    492 #define GLFW_JOYSTICK_13 12
    493 #define GLFW_JOYSTICK_14 13
    494 #define GLFW_JOYSTICK_15 14
    495 #define GLFW_JOYSTICK_16 15
    496 #define GLFW_JOYSTICK_LAST GLFW_JOYSTICK_16
    497 
    513 #define GLFW_NOT_INITIALIZED 0x00010001
    514 
    523 #define GLFW_NO_CURRENT_CONTEXT 0x00010002
    524 
    532 #define GLFW_INVALID_ENUM 0x00010003
    533 
    543 #define GLFW_INVALID_VALUE 0x00010004
    544 
    551 #define GLFW_OUT_OF_MEMORY 0x00010005
    552 
    567 #define GLFW_API_UNAVAILABLE 0x00010006
    568 
    584 #define GLFW_VERSION_UNAVAILABLE 0x00010007
    585 
    595 #define GLFW_PLATFORM_ERROR 0x00010008
    596 
    614 #define GLFW_FORMAT_UNAVAILABLE 0x00010009
    615 
    622 #define GLFW_NO_WINDOW_CONTEXT 0x0001000A
    623 
    625 #define GLFW_FOCUSED 0x00020001
    626 #define GLFW_ICONIFIED 0x00020002
    627 #define GLFW_RESIZABLE 0x00020003
    628 #define GLFW_VISIBLE 0x00020004
    629 #define GLFW_DECORATED 0x00020005
    630 #define GLFW_AUTO_ICONIFY 0x00020006
    631 #define GLFW_FLOATING 0x00020007
    632 #define GLFW_MAXIMIZED 0x00020008
    633 
    634 #define GLFW_RED_BITS 0x00021001
    635 #define GLFW_GREEN_BITS 0x00021002
    636 #define GLFW_BLUE_BITS 0x00021003
    637 #define GLFW_ALPHA_BITS 0x00021004
    638 #define GLFW_DEPTH_BITS 0x00021005
    639 #define GLFW_STENCIL_BITS 0x00021006
    640 #define GLFW_ACCUM_RED_BITS 0x00021007
    641 #define GLFW_ACCUM_GREEN_BITS 0x00021008
    642 #define GLFW_ACCUM_BLUE_BITS 0x00021009
    643 #define GLFW_ACCUM_ALPHA_BITS 0x0002100A
    644 #define GLFW_AUX_BUFFERS 0x0002100B
    645 #define GLFW_STEREO 0x0002100C
    646 #define GLFW_SAMPLES 0x0002100D
    647 #define GLFW_SRGB_CAPABLE 0x0002100E
    648 #define GLFW_REFRESH_RATE 0x0002100F
    649 #define GLFW_DOUBLEBUFFER 0x00021010
    650 
    651 #define GLFW_CLIENT_API 0x00022001
    652 #define GLFW_CONTEXT_VERSION_MAJOR 0x00022002
    653 #define GLFW_CONTEXT_VERSION_MINOR 0x00022003
    654 #define GLFW_CONTEXT_REVISION 0x00022004
    655 #define GLFW_CONTEXT_ROBUSTNESS 0x00022005
    656 #define GLFW_OPENGL_FORWARD_COMPAT 0x00022006
    657 #define GLFW_OPENGL_DEBUG_CONTEXT 0x00022007
    658 #define GLFW_OPENGL_PROFILE 0x00022008
    659 #define GLFW_CONTEXT_RELEASE_BEHAVIOR 0x00022009
    660 #define GLFW_CONTEXT_NO_ERROR 0x0002200A
    661 #define GLFW_CONTEXT_CREATION_API 0x0002200B
    662 
    663 #define GLFW_NO_API 0
    664 #define GLFW_OPENGL_API 0x00030001
    665 #define GLFW_OPENGL_ES_API 0x00030002
    666 
    667 #define GLFW_NO_ROBUSTNESS 0
    668 #define GLFW_NO_RESET_NOTIFICATION 0x00031001
    669 #define GLFW_LOSE_CONTEXT_ON_RESET 0x00031002
    670 
    671 #define GLFW_OPENGL_ANY_PROFILE 0
    672 #define GLFW_OPENGL_CORE_PROFILE 0x00032001
    673 #define GLFW_OPENGL_COMPAT_PROFILE 0x00032002
    674 
    675 #define GLFW_CURSOR 0x00033001
    676 #define GLFW_STICKY_KEYS 0x00033002
    677 #define GLFW_STICKY_MOUSE_BUTTONS 0x00033003
    678 
    679 #define GLFW_CURSOR_NORMAL 0x00034001
    680 #define GLFW_CURSOR_HIDDEN 0x00034002
    681 #define GLFW_CURSOR_DISABLED 0x00034003
    682 
    683 #define GLFW_ANY_RELEASE_BEHAVIOR 0
    684 #define GLFW_RELEASE_BEHAVIOR_FLUSH 0x00035001
    685 #define GLFW_RELEASE_BEHAVIOR_NONE 0x00035002
    686 
    687 #define GLFW_NATIVE_CONTEXT_API 0x00036001
    688 #define GLFW_EGL_CONTEXT_API 0x00036002
    689 
    701 #define GLFW_ARROW_CURSOR 0x00036001
    702 
    706 #define GLFW_IBEAM_CURSOR 0x00036002
    707 
    711 #define GLFW_CROSSHAIR_CURSOR 0x00036003
    712 
    716 #define GLFW_HAND_CURSOR 0x00036004
    717 
    721 #define GLFW_HRESIZE_CURSOR 0x00036005
    722 
    726 #define GLFW_VRESIZE_CURSOR 0x00036006
    727 
    729 #define GLFW_CONNECTED 0x00040001
    730 #define GLFW_DISCONNECTED 0x00040002
    731 
    732 #define GLFW_DONT_CARE -1
    733 
    734 
    735 /*************************************************************************
    736  * GLFW API types
    737  *************************************************************************/
    738 
    751 typedef void (*GLFWglproc)(void);
    752 
    765 typedef void (*GLFWvkproc)(void);
    766 
    777 typedef struct GLFWmonitor GLFWmonitor;
    778 
    789 typedef struct GLFWwindow GLFWwindow;
    790 
    801 typedef struct GLFWcursor GLFWcursor;
    802 
    817 typedef void (* GLFWerrorfun)(int,const char*);
    818 
    836 typedef void (* GLFWwindowposfun)(GLFWwindow*,int,int);
    837 
    854 typedef void (* GLFWwindowsizefun)(GLFWwindow*,int,int);
    855 
    870 typedef void (* GLFWwindowclosefun)(GLFWwindow*);
    871 
    886 typedef void (* GLFWwindowrefreshfun)(GLFWwindow*);
    887 
    903 typedef void (* GLFWwindowfocusfun)(GLFWwindow*,int);
    904 
    921 typedef void (* GLFWwindowiconifyfun)(GLFWwindow*,int);
    922 
    939 typedef void (* GLFWframebuffersizefun)(GLFWwindow*,int,int);
    940 
    960 typedef void (* GLFWmousebuttonfun)(GLFWwindow*,int,int,int);
    961 
    979 typedef void (* GLFWcursorposfun)(GLFWwindow*,double,double);
    980 
    996 typedef void (* GLFWcursorenterfun)(GLFWwindow*,int);
    997 
    1013 typedef void (* GLFWscrollfun)(GLFWwindow*,double,double);
    1014 
    1034 typedef void (* GLFWkeyfun)(GLFWwindow*,int,int,int,int);
    1035 
    1051 typedef void (* GLFWcharfun)(GLFWwindow*,unsigned int);
    1052 
    1072 typedef void (* GLFWcharmodsfun)(GLFWwindow*,unsigned int,int);
    1073 
    1089 typedef void (* GLFWdropfun)(GLFWwindow*,int,const char**);
    1090 
    1105 typedef void (* GLFWmonitorfun)(GLFWmonitor*,int);
    1106 
    1122 typedef void (* GLFWjoystickfun)(int,int);
    1123 
    1136 typedef struct GLFWvidmode
    1137 {
    1140  int width;
    1143  int height;
    1146  int redBits;
    1156 } GLFWvidmode;
    1157 
    1169 typedef struct GLFWgammaramp
    1170 {
    1173  unsigned short* red;
    1176  unsigned short* green;
    1179  unsigned short* blue;
    1182  unsigned int size;
    1183 } GLFWgammaramp;
    1184 
    1193 typedef struct GLFWimage
    1194 {
    1197  int width;
    1200  int height;
    1203  unsigned char* pixels;
    1204 } GLFWimage;
    1205 
    1206 
    1207 /*************************************************************************
    1208  * GLFW API functions
    1209  *************************************************************************/
    1210 
    1243 GLFWAPI int glfwInit(void);
    1244 
    1275 GLFWAPI void glfwTerminate(void);
    1276 
    1302 GLFWAPI void glfwGetVersion(int* major, int* minor, int* rev);
    1303 
    1333 GLFWAPI const char* glfwGetVersionString(void);
    1334 
    1368 
    1396 GLFWAPI GLFWmonitor** glfwGetMonitors(int* count);
    1397 
    1420 GLFWAPI GLFWmonitor* glfwGetPrimaryMonitor(void);
    1421 
    1445 GLFWAPI void glfwGetMonitorPos(GLFWmonitor* monitor, int* xpos, int* ypos);
    1446 
    1479 GLFWAPI void glfwGetMonitorPhysicalSize(GLFWmonitor* monitor, int* widthMM, int* heightMM);
    1480 
    1505 GLFWAPI const char* glfwGetMonitorName(GLFWmonitor* monitor);
    1506 
    1529 
    1561 GLFWAPI const GLFWvidmode* glfwGetVideoModes(GLFWmonitor* monitor, int* count);
    1562 
    1589 GLFWAPI const GLFWvidmode* glfwGetVideoMode(GLFWmonitor* monitor);
    1590 
    1611 GLFWAPI void glfwSetGamma(GLFWmonitor* monitor, float gamma);
    1612 
    1637 GLFWAPI const GLFWgammaramp* glfwGetGammaRamp(GLFWmonitor* monitor);
    1638 
    1667 GLFWAPI void glfwSetGammaRamp(GLFWmonitor* monitor, const GLFWgammaramp* ramp);
    1668 
    1685 GLFWAPI void glfwDefaultWindowHints(void);
    1686 
    1713 GLFWAPI void glfwWindowHint(int hint, int value);
    1714 
    1834 GLFWAPI GLFWwindow* glfwCreateWindow(int width, int height, const char* title, GLFWmonitor* monitor, GLFWwindow* share);
    1835 
    1863 GLFWAPI void glfwDestroyWindow(GLFWwindow* window);
    1864 
    1883 GLFWAPI int glfwWindowShouldClose(GLFWwindow* window);
    1884 
    1905 GLFWAPI void glfwSetWindowShouldClose(GLFWwindow* window, int value);
    1906 
    1930 GLFWAPI void glfwSetWindowTitle(GLFWwindow* window, const char* title);
    1931 
    1969 GLFWAPI void glfwSetWindowIcon(GLFWwindow* window, int count, const GLFWimage* images);
    1970 
    1997 GLFWAPI void glfwGetWindowPos(GLFWwindow* window, int* xpos, int* ypos);
    1998 
    2028 GLFWAPI void glfwSetWindowPos(GLFWwindow* window, int xpos, int ypos);
    2029 
    2058 GLFWAPI void glfwGetWindowSize(GLFWwindow* window, int* width, int* height);
    2059 
    2098 GLFWAPI void glfwSetWindowSizeLimits(GLFWwindow* window, int minwidth, int minheight, int maxwidth, int maxheight);
    2099 
    2138 GLFWAPI void glfwSetWindowAspectRatio(GLFWwindow* window, int numer, int denom);
    2139 
    2176 GLFWAPI void glfwSetWindowSize(GLFWwindow* window, int width, int height);
    2177 
    2205 GLFWAPI void glfwGetFramebufferSize(GLFWwindow* window, int* width, int* height);
    2206 
    2242 GLFWAPI void glfwGetWindowFrameSize(GLFWwindow* window, int* left, int* top, int* right, int* bottom);
    2243 
    2269 GLFWAPI void glfwIconifyWindow(GLFWwindow* window);
    2270 
    2296 GLFWAPI void glfwRestoreWindow(GLFWwindow* window);
    2297 
    2321 GLFWAPI void glfwMaximizeWindow(GLFWwindow* window);
    2322 
    2343 GLFWAPI void glfwShowWindow(GLFWwindow* window);
    2344 
    2365 GLFWAPI void glfwHideWindow(GLFWwindow* window);
    2366 
    2393 GLFWAPI void glfwFocusWindow(GLFWwindow* window);
    2394 
    2415 GLFWAPI GLFWmonitor* glfwGetWindowMonitor(GLFWwindow* window);
    2416 
    2464 GLFWAPI void glfwSetWindowMonitor(GLFWwindow* window, GLFWmonitor* monitor, int xpos, int ypos, int width, int height, int refreshRate);
    2465 
    2497 GLFWAPI int glfwGetWindowAttrib(GLFWwindow* window, int attrib);
    2498 
    2520 GLFWAPI void glfwSetWindowUserPointer(GLFWwindow* window, void* pointer);
    2521 
    2541 GLFWAPI void* glfwGetWindowUserPointer(GLFWwindow* window);
    2542 
    2565 GLFWAPI GLFWwindowposfun glfwSetWindowPosCallback(GLFWwindow* window, GLFWwindowposfun cbfun);
    2566 
    2590 GLFWAPI GLFWwindowsizefun glfwSetWindowSizeCallback(GLFWwindow* window, GLFWwindowsizefun cbfun);
    2591 
    2623 GLFWAPI GLFWwindowclosefun glfwSetWindowCloseCallback(GLFWwindow* window, GLFWwindowclosefun cbfun);
    2624 
    2653 
    2680 GLFWAPI GLFWwindowfocusfun glfwSetWindowFocusCallback(GLFWwindow* window, GLFWwindowfocusfun cbfun);
    2681 
    2704 
    2727 
    2761 GLFWAPI void glfwPollEvents(void);
    2762 
    2806 GLFWAPI void glfwWaitEvents(void);
    2807 
    2852 GLFWAPI void glfwWaitEventsTimeout(double timeout);
    2853 
    2876 GLFWAPI void glfwPostEmptyEvent(void);
    2877 
    2899 GLFWAPI int glfwGetInputMode(GLFWwindow* window, int mode);
    2900 
    2947 GLFWAPI void glfwSetInputMode(GLFWwindow* window, int mode, int value);
    2948 
    3004 GLFWAPI const char* glfwGetKeyName(int key, int scancode);
    3005 
    3044 GLFWAPI int glfwGetKey(GLFWwindow* window, int key);
    3045 
    3073 GLFWAPI int glfwGetMouseButton(GLFWwindow* window, int button);
    3074 
    3111 GLFWAPI void glfwGetCursorPos(GLFWwindow* window, double* xpos, double* ypos);
    3112 
    3148 GLFWAPI void glfwSetCursorPos(GLFWwindow* window, double xpos, double ypos);
    3149 
    3188 GLFWAPI GLFWcursor* glfwCreateCursor(const GLFWimage* image, int xhot, int yhot);
    3189 
    3213 GLFWAPI GLFWcursor* glfwCreateStandardCursor(int shape);
    3214 
    3237 GLFWAPI void glfwDestroyCursor(GLFWcursor* cursor);
    3238 
    3264 GLFWAPI void glfwSetCursor(GLFWwindow* window, GLFWcursor* cursor);
    3265 
    3307 GLFWAPI GLFWkeyfun glfwSetKeyCallback(GLFWwindow* window, GLFWkeyfun cbfun);
    3308 
    3345 GLFWAPI GLFWcharfun glfwSetCharCallback(GLFWwindow* window, GLFWcharfun cbfun);
    3346 
    3378 GLFWAPI GLFWcharmodsfun glfwSetCharModsCallback(GLFWwindow* window, GLFWcharmodsfun cbfun);
    3379 
    3408 GLFWAPI GLFWmousebuttonfun glfwSetMouseButtonCallback(GLFWwindow* window, GLFWmousebuttonfun cbfun);
    3409 
    3433 GLFWAPI GLFWcursorposfun glfwSetCursorPosCallback(GLFWwindow* window, GLFWcursorposfun cbfun);
    3434 
    3457 GLFWAPI GLFWcursorenterfun glfwSetCursorEnterCallback(GLFWwindow* window, GLFWcursorenterfun cbfun);
    3458 
    3484 GLFWAPI GLFWscrollfun glfwSetScrollCallback(GLFWwindow* window, GLFWscrollfun cbfun);
    3485 
    3512 GLFWAPI GLFWdropfun glfwSetDropCallback(GLFWwindow* window, GLFWdropfun cbfun);
    3513 
    3532 GLFWAPI int glfwJoystickPresent(int joy);
    3533 
    3566 GLFWAPI const float* glfwGetJoystickAxes(int joy, int* count);
    3567 
    3601 GLFWAPI const unsigned char* glfwGetJoystickButtons(int joy, int* count);
    3602 
    3633 GLFWAPI const char* glfwGetJoystickName(int joy);
    3634 
    3657 
    3681 GLFWAPI void glfwSetClipboardString(GLFWwindow* window, const char* string);
    3682 
    3711 GLFWAPI const char* glfwGetClipboardString(GLFWwindow* window);
    3712 
    3738 GLFWAPI double glfwGetTime(void);
    3739 
    3765 GLFWAPI void glfwSetTime(double time);
    3766 
    3787 GLFWAPI uint64_t glfwGetTimerValue(void);
    3788 
    3807 GLFWAPI uint64_t glfwGetTimerFrequency(void);
    3808 
    3841 GLFWAPI void glfwMakeContextCurrent(GLFWwindow* window);
    3842 
    3862 GLFWAPI GLFWwindow* glfwGetCurrentContext(void);
    3863 
    3896 GLFWAPI void glfwSwapBuffers(GLFWwindow* window);
    3897 
    3943 GLFWAPI void glfwSwapInterval(int interval);
    3944 
    3981 GLFWAPI int glfwExtensionSupported(const char* extension);
    3982 
    4023 GLFWAPI GLFWglproc glfwGetProcAddress(const char* procname);
    4024 
    4049 GLFWAPI int glfwVulkanSupported(void);
    4050 
    4093 GLFWAPI const char** glfwGetRequiredInstanceExtensions(uint32_t* count);
    4094 
    4095 #if defined(VK_VERSION_1_0)
    4096 
    4136 GLFWAPI GLFWvkproc glfwGetInstanceProcAddress(VkInstance instance, const char* procname);
    4137 
    4169 GLFWAPI int glfwGetPhysicalDevicePresentationSupport(VkInstance instance, VkPhysicalDevice device, uint32_t queuefamily);
    4170 
    4219 GLFWAPI VkResult glfwCreateWindowSurface(VkInstance instance, GLFWwindow* window, const VkAllocationCallbacks* allocator, VkSurfaceKHR* surface);
    4220 
    4221 #endif /*VK_VERSION_1_0*/
    4222 
    4223 
    4224 /*************************************************************************
    4225  * Global definition cleanup
    4226  *************************************************************************/
    4227 
    4228 /* ------------------- BEGIN SYSTEM/COMPILER SPECIFIC -------------------- */
    4229 
    4230 #ifdef GLFW_WINGDIAPI_DEFINED
    4231  #undef WINGDIAPI
    4232  #undef GLFW_WINGDIAPI_DEFINED
    4233 #endif
    4234 
    4235 #ifdef GLFW_CALLBACK_DEFINED
    4236  #undef CALLBACK
    4237  #undef GLFW_CALLBACK_DEFINED
    4238 #endif
    4239 
    4240 /* -------------------- END SYSTEM/COMPILER SPECIFIC --------------------- */
    4241 
    4242 
    4243 #ifdef __cplusplus
    4244 }
    4245 #endif
    4246 
    4247 #endif /* _glfw3_h_ */
    4248 
    void glfwGetVersion(int *major, int *minor, int *rev)
    Retrieves the version of the GLFW library.
    -
    int redBits
    Definition: glfw3.h:1146
    -
    void glfwGetWindowSize(GLFWwindow *window, int *width, int *height)
    Retrieves the size of the client area of the specified window.
    -
    void glfwSetWindowSizeLimits(GLFWwindow *window, int minwidth, int minheight, int maxwidth, int maxheight)
    Sets the size limits of the specified window.
    -
    void(* GLFWwindowiconifyfun)(GLFWwindow *, int)
    The function signature for window iconify/restore callbacks.
    Definition: glfw3.h:921
    -
    int glfwGetInputMode(GLFWwindow *window, int mode)
    Returns the value of an input option for the specified window.
    -
    int height
    Definition: glfw3.h:1143
    -
    GLFWwindowrefreshfun glfwSetWindowRefreshCallback(GLFWwindow *window, GLFWwindowrefreshfun cbfun)
    Sets the refresh callback for the specified window.
    -
    GLFWwindowposfun glfwSetWindowPosCallback(GLFWwindow *window, GLFWwindowposfun cbfun)
    Sets the position callback for the specified window.
    -
    void glfwGetWindowPos(GLFWwindow *window, int *xpos, int *ypos)
    Retrieves the position of the client area of the specified window.
    -
    void(* GLFWcharmodsfun)(GLFWwindow *, unsigned int, int)
    The function signature for Unicode character with modifiers callbacks.
    Definition: glfw3.h:1072
    -
    int blueBits
    Definition: glfw3.h:1152
    -
    unsigned char * pixels
    Definition: glfw3.h:1203
    -
    void(* GLFWmonitorfun)(GLFWmonitor *, int)
    The function signature for monitor configuration callbacks.
    Definition: glfw3.h:1105
    -
    void * glfwGetWindowUserPointer(GLFWwindow *window)
    Returns the user pointer of the specified window.
    -
    const GLFWvidmode * glfwGetVideoModes(GLFWmonitor *monitor, int *count)
    Returns the available video modes for the specified monitor.
    -
    const GLFWgammaramp * glfwGetGammaRamp(GLFWmonitor *monitor)
    Returns the current gamma ramp for the specified monitor.
    -
    struct GLFWcursor GLFWcursor
    Opaque cursor object.
    Definition: glfw3.h:801
    -
    void glfwIconifyWindow(GLFWwindow *window)
    Iconifies the specified window.
    -
    GLFWerrorfun glfwSetErrorCallback(GLFWerrorfun cbfun)
    Sets the error callback.
    -
    double glfwGetTime(void)
    Returns the value of the GLFW timer.
    -
    GLFWwindowiconifyfun glfwSetWindowIconifyCallback(GLFWwindow *window, GLFWwindowiconifyfun cbfun)
    Sets the iconify callback for the specified window.
    -
    void glfwSetCursorPos(GLFWwindow *window, double xpos, double ypos)
    Sets the position of the cursor, relative to the client area of the window.
    -
    int width
    Definition: glfw3.h:1140
    -
    const char * glfwGetVersionString(void)
    Returns a string describing the compile-time configuration.
    -
    GLFWwindowsizefun glfwSetWindowSizeCallback(GLFWwindow *window, GLFWwindowsizefun cbfun)
    Sets the size callback for the specified window.
    -
    const char * glfwGetJoystickName(int joy)
    Returns the name of the specified joystick.
    -
    void glfwWaitEvents(void)
    Waits until events are queued and processes them.
    -
    int height
    Definition: glfw3.h:1200
    -
    GLFWkeyfun glfwSetKeyCallback(GLFWwindow *window, GLFWkeyfun cbfun)
    Sets the key callback.
    -
    const char * glfwGetClipboardString(GLFWwindow *window)
    Returns the contents of the clipboard as a string.
    -
    void(* GLFWdropfun)(GLFWwindow *, int, const char **)
    The function signature for file drop callbacks.
    Definition: glfw3.h:1089
    -
    GLFWglproc glfwGetProcAddress(const char *procname)
    Returns the address of the specified function for the current context.
    -
    const char * glfwGetKeyName(int key, int scancode)
    Returns the localized name of the specified printable key.
    -
    void glfwGetCursorPos(GLFWwindow *window, double *xpos, double *ypos)
    Retrieves the position of the cursor relative to the client area of the window.
    -
    void glfwMaximizeWindow(GLFWwindow *window)
    Maximizes the specified window.
    -
    void(* GLFWkeyfun)(GLFWwindow *, int, int, int, int)
    The function signature for keyboard key callbacks.
    Definition: glfw3.h:1034
    -
    int refreshRate
    Definition: glfw3.h:1155
    -
    unsigned short * red
    Definition: glfw3.h:1173
    -
    void(* GLFWmousebuttonfun)(GLFWwindow *, int, int, int)
    The function signature for mouse button callbacks.
    Definition: glfw3.h:960
    -
    VkResult glfwCreateWindowSurface(VkInstance instance, GLFWwindow *window, const VkAllocationCallbacks *allocator, VkSurfaceKHR *surface)
    Creates a Vulkan surface for the specified window.
    -
    GLFWdropfun glfwSetDropCallback(GLFWwindow *window, GLFWdropfun cbfun)
    Sets the file drop callback.
    -
    void(* GLFWcharfun)(GLFWwindow *, unsigned int)
    The function signature for Unicode character callbacks.
    Definition: glfw3.h:1051
    -
    void glfwSetCursor(GLFWwindow *window, GLFWcursor *cursor)
    Sets the cursor for the window.
    -
    const unsigned char * glfwGetJoystickButtons(int joy, int *count)
    Returns the state of all buttons of the specified joystick.
    -
    GLFWmonitor ** glfwGetMonitors(int *count)
    Returns the currently connected monitors.
    -
    void glfwDestroyWindow(GLFWwindow *window)
    Destroys the specified window and its context.
    -
    GLFWcursorposfun glfwSetCursorPosCallback(GLFWwindow *window, GLFWcursorposfun cbfun)
    Sets the cursor position callback.
    -
    unsigned short * green
    Definition: glfw3.h:1176
    -
    GLFWcharfun glfwSetCharCallback(GLFWwindow *window, GLFWcharfun cbfun)
    Sets the Unicode character callback.
    -
    void(* GLFWvkproc)(void)
    Vulkan API function pointer type.
    Definition: glfw3.h:765
    -
    void glfwSetWindowTitle(GLFWwindow *window, const char *title)
    Sets the title of the specified window.
    -
    struct GLFWmonitor GLFWmonitor
    Opaque monitor object.
    Definition: glfw3.h:777
    -
    struct GLFWwindow GLFWwindow
    Opaque window object.
    Definition: glfw3.h:789
    -
    void glfwGetMonitorPhysicalSize(GLFWmonitor *monitor, int *widthMM, int *heightMM)
    Returns the physical size of the monitor.
    -
    void glfwShowWindow(GLFWwindow *window)
    Makes the specified window visible.
    -
    void glfwSetWindowSize(GLFWwindow *window, int width, int height)
    Sets the size of the client area of the specified window.
    -
    int greenBits
    Definition: glfw3.h:1149
    -
    const float * glfwGetJoystickAxes(int joy, int *count)
    Returns the values of all axes of the specified joystick.
    -
    GLFWcursor * glfwCreateCursor(const GLFWimage *image, int xhot, int yhot)
    Creates a custom cursor.
    -
    void glfwDestroyCursor(GLFWcursor *cursor)
    Destroys a cursor.
    -
    void glfwSwapBuffers(GLFWwindow *window)
    Swaps the front and back buffers of the specified window.
    -
    void glfwSetGamma(GLFWmonitor *monitor, float gamma)
    Generates a gamma ramp and sets it for the specified monitor.
    -
    void glfwSetInputMode(GLFWwindow *window, int mode, int value)
    Sets an input option for the specified window.
    -
    const GLFWvidmode * glfwGetVideoMode(GLFWmonitor *monitor)
    Returns the current mode of the specified monitor.
    -
    void glfwSetClipboardString(GLFWwindow *window, const char *string)
    Sets the clipboard to the specified string.
    -
    void glfwGetWindowFrameSize(GLFWwindow *window, int *left, int *top, int *right, int *bottom)
    Retrieves the size of the frame of the window.
    -
    void(* GLFWcursorposfun)(GLFWwindow *, double, double)
    The function signature for cursor position callbacks.
    Definition: glfw3.h:979
    -
    void glfwRestoreWindow(GLFWwindow *window)
    Restores the specified window.
    -
    int glfwGetMouseButton(GLFWwindow *window, int button)
    Returns the last reported state of a mouse button for the specified window.
    -
    void(* GLFWwindowsizefun)(GLFWwindow *, int, int)
    The function signature for window resize callbacks.
    Definition: glfw3.h:854
    -
    void glfwSetWindowMonitor(GLFWwindow *window, GLFWmonitor *monitor, int xpos, int ypos, int width, int height, int refreshRate)
    Sets the mode, monitor, video mode and placement of a window.
    -
    void glfwSetTime(double time)
    Sets the GLFW timer.
    -
    void glfwFocusWindow(GLFWwindow *window)
    Brings the specified window to front and sets input focus.
    -
    struct GLFWgammaramp GLFWgammaramp
    Gamma ramp.
    -
    GLFWwindow * glfwCreateWindow(int width, int height, const char *title, GLFWmonitor *monitor, GLFWwindow *share)
    Creates a window and its associated context.
    -
    unsigned int size
    Definition: glfw3.h:1182
    -
    void glfwSetWindowUserPointer(GLFWwindow *window, void *pointer)
    Sets the user pointer of the specified window.
    -
    void glfwSetWindowShouldClose(GLFWwindow *window, int value)
    Sets the close flag of the specified window.
    -
    GLFWvkproc glfwGetInstanceProcAddress(VkInstance instance, const char *procname)
    Returns the address of the specified Vulkan instance function.
    -
    void glfwPostEmptyEvent(void)
    Posts an empty event to the event queue.
    -
    void glfwWaitEventsTimeout(double timeout)
    Waits with timeout until events are queued and processes them.
    -
    GLFWframebuffersizefun glfwSetFramebufferSizeCallback(GLFWwindow *window, GLFWframebuffersizefun cbfun)
    Sets the framebuffer resize callback for the specified window.
    -
    void(* GLFWframebuffersizefun)(GLFWwindow *, int, int)
    The function signature for framebuffer resize callbacks.
    Definition: glfw3.h:939
    -
    int glfwJoystickPresent(int joy)
    Returns whether the specified joystick is present.
    -
    GLFWjoystickfun glfwSetJoystickCallback(GLFWjoystickfun cbfun)
    Sets the joystick configuration callback.
    -
    int glfwGetPhysicalDevicePresentationSupport(VkInstance instance, VkPhysicalDevice device, uint32_t queuefamily)
    Returns whether the specified queue family can present images.
    -
    void(* GLFWwindowposfun)(GLFWwindow *, int, int)
    The function signature for window position callbacks.
    Definition: glfw3.h:836
    -
    void glfwPollEvents(void)
    Processes all pending events.
    -
    uint64_t glfwGetTimerValue(void)
    Returns the current value of the raw timer.
    -
    void glfwHideWindow(GLFWwindow *window)
    Hides the specified window.
    -
    GLFWwindow * glfwGetCurrentContext(void)
    Returns the window whose context is current on the calling thread.
    -
    void glfwSetGammaRamp(GLFWmonitor *monitor, const GLFWgammaramp *ramp)
    Sets the current gamma ramp for the specified monitor.
    -
    uint64_t glfwGetTimerFrequency(void)
    Returns the frequency, in Hz, of the raw timer.
    -
    GLFWcursorenterfun glfwSetCursorEnterCallback(GLFWwindow *window, GLFWcursorenterfun cbfun)
    Sets the cursor enter/exit callback.
    -
    int width
    Definition: glfw3.h:1197
    -
    GLFWmonitor * glfwGetWindowMonitor(GLFWwindow *window)
    Returns the monitor that the window uses for full screen mode.
    -
    GLFWmousebuttonfun glfwSetMouseButtonCallback(GLFWwindow *window, GLFWmousebuttonfun cbfun)
    Sets the mouse button callback.
    -
    GLFWmonitor * glfwGetPrimaryMonitor(void)
    Returns the primary monitor.
    -
    int glfwGetKey(GLFWwindow *window, int key)
    Returns the last reported state of a keyboard key for the specified window.
    -
    void glfwMakeContextCurrent(GLFWwindow *window)
    Makes the context of the specified window current for the calling thread.
    -
    Gamma ramp.
    Definition: glfw3.h:1169
    -
    GLFWwindowclosefun glfwSetWindowCloseCallback(GLFWwindow *window, GLFWwindowclosefun cbfun)
    Sets the close callback for the specified window.
    -
    void(* GLFWjoystickfun)(int, int)
    The function signature for joystick configuration callbacks.
    Definition: glfw3.h:1122
    -
    GLFWscrollfun glfwSetScrollCallback(GLFWwindow *window, GLFWscrollfun cbfun)
    Sets the scroll callback.
    -
    unsigned short * blue
    Definition: glfw3.h:1179
    -
    Video mode type.
    Definition: glfw3.h:1136
    -
    int glfwVulkanSupported(void)
    Returns whether the Vulkan loader has been found.
    -
    void glfwSetWindowPos(GLFWwindow *window, int xpos, int ypos)
    Sets the position of the client area of the specified window.
    -
    int glfwExtensionSupported(const char *extension)
    Returns whether the specified extension is available.
    -
    void glfwGetFramebufferSize(GLFWwindow *window, int *width, int *height)
    Retrieves the size of the framebuffer of the specified window.
    -
    void(* GLFWwindowclosefun)(GLFWwindow *)
    The function signature for window close callbacks.
    Definition: glfw3.h:870
    -
    void glfwWindowHint(int hint, int value)
    Sets the specified window hint to the desired value.
    -
    GLFWcursor * glfwCreateStandardCursor(int shape)
    Creates a cursor with a standard shape.
    -
    void glfwSwapInterval(int interval)
    Sets the swap interval for the current context.
    -
    GLFWcharmodsfun glfwSetCharModsCallback(GLFWwindow *window, GLFWcharmodsfun cbfun)
    Sets the Unicode character with modifiers callback.
    -
    const char ** glfwGetRequiredInstanceExtensions(uint32_t *count)
    Returns the Vulkan instance extensions required by GLFW.
    -
    void(* GLFWcursorenterfun)(GLFWwindow *, int)
    The function signature for cursor enter/leave callbacks.
    Definition: glfw3.h:996
    -
    int glfwInit(void)
    Initializes the GLFW library.
    -
    Image data.
    Definition: glfw3.h:1193
    -
    void(* GLFWscrollfun)(GLFWwindow *, double, double)
    The function signature for scroll callbacks.
    Definition: glfw3.h:1013
    -
    void glfwGetMonitorPos(GLFWmonitor *monitor, int *xpos, int *ypos)
    Returns the position of the monitor&#39;s viewport on the virtual screen.
    -
    struct GLFWvidmode GLFWvidmode
    Video mode type.
    -
    void glfwDefaultWindowHints(void)
    Resets all window hints to their default values.
    -
    GLFWwindowfocusfun glfwSetWindowFocusCallback(GLFWwindow *window, GLFWwindowfocusfun cbfun)
    Sets the focus callback for the specified window.
    -
    void glfwTerminate(void)
    Terminates the GLFW library.
    -
    void glfwSetWindowIcon(GLFWwindow *window, int count, const GLFWimage *images)
    Sets the icon for the specified window.
    -
    struct GLFWimage GLFWimage
    Image data.
    -
    GLFWmonitorfun glfwSetMonitorCallback(GLFWmonitorfun cbfun)
    Sets the monitor configuration callback.
    -
    void(* GLFWwindowrefreshfun)(GLFWwindow *)
    The function signature for window content refresh callbacks.
    Definition: glfw3.h:886
    -
    void(* GLFWglproc)(void)
    Client API function pointer type.
    Definition: glfw3.h:751
    -
    const char * glfwGetMonitorName(GLFWmonitor *monitor)
    Returns the name of the specified monitor.
    -
    void(* GLFWerrorfun)(int, const char *)
    The function signature for error callbacks.
    Definition: glfw3.h:817
    -
    void glfwSetWindowAspectRatio(GLFWwindow *window, int numer, int denom)
    Sets the aspect ratio of the specified window.
    -
    int glfwWindowShouldClose(GLFWwindow *window)
    Checks the close flag of the specified window.
    -
    int glfwGetWindowAttrib(GLFWwindow *window, int attrib)
    Returns an attribute of the specified window.
    -
    void(* GLFWwindowfocusfun)(GLFWwindow *, int)
    The function signature for window focus/defocus callbacks.
    Definition: glfw3.h:903
    +Go to the documentation of this file.
    1 /*************************************************************************
    2  * GLFW 3.3 - www.glfw.org
    3  * A library for OpenGL, window and input
    4  *------------------------------------------------------------------------
    5  * Copyright (c) 2002-2006 Marcus Geelnard
    6  * Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
    7  *
    8  * This software is provided 'as-is', without any express or implied
    9  * warranty. In no event will the authors be held liable for any damages
    10  * arising from the use of this software.
    11  *
    12  * Permission is granted to anyone to use this software for any purpose,
    13  * including commercial applications, and to alter it and redistribute it
    14  * freely, subject to the following restrictions:
    15  *
    16  * 1. The origin of this software must not be misrepresented; you must not
    17  * claim that you wrote the original software. If you use this software
    18  * in a product, an acknowledgment in the product documentation would
    19  * be appreciated but is not required.
    20  *
    21  * 2. Altered source versions must be plainly marked as such, and must not
    22  * be misrepresented as being the original software.
    23  *
    24  * 3. This notice may not be removed or altered from any source
    25  * distribution.
    26  *
    27  *************************************************************************/
    28 
    29 #ifndef _glfw3_h_
    30 #define _glfw3_h_
    31 
    32 #ifdef __cplusplus
    33 extern "C" {
    34 #endif
    35 
    36 
    37 /*************************************************************************
    38  * Doxygen documentation
    39  *************************************************************************/
    40 
    89 /*************************************************************************
    90  * Compiler- and platform-specific preprocessor work
    91  *************************************************************************/
    92 
    93 /* If we are we on Windows, we want a single define for it.
    94  */
    95 #if !defined(_WIN32) && (defined(__WIN32__) || defined(WIN32) || defined(__MINGW32__))
    96  #define _WIN32
    97 #endif /* _WIN32 */
    98 
    99 /* It is customary to use APIENTRY for OpenGL function pointer declarations on
    100  * all platforms. Additionally, the Windows OpenGL header needs APIENTRY.
    101  */
    102 #ifndef APIENTRY
    103  #ifdef _WIN32
    104  #define APIENTRY __stdcall
    105  #else
    106  #define APIENTRY
    107  #endif
    108  #define GLFW_APIENTRY_DEFINED
    109 #endif /* APIENTRY */
    110 
    111 /* Some Windows OpenGL headers need this.
    112  */
    113 #if !defined(WINGDIAPI) && defined(_WIN32)
    114  #define WINGDIAPI __declspec(dllimport)
    115  #define GLFW_WINGDIAPI_DEFINED
    116 #endif /* WINGDIAPI */
    117 
    118 /* Some Windows GLU headers need this.
    119  */
    120 #if !defined(CALLBACK) && defined(_WIN32)
    121  #define CALLBACK __stdcall
    122  #define GLFW_CALLBACK_DEFINED
    123 #endif /* CALLBACK */
    124 
    125 /* Include because most Windows GLU headers need wchar_t and
    126  * the macOS OpenGL header blocks the definition of ptrdiff_t by glext.h.
    127  * Include it unconditionally to avoid surprising side-effects.
    128  */
    129 #include <stddef.h>
    130 
    131 /* Include because it is needed by Vulkan and related functions.
    132  * Include it unconditionally to avoid surprising side-effects.
    133  */
    134 #include <stdint.h>
    135 
    136 /* Include the chosen OpenGL or OpenGL ES headers.
    137  */
    138 #if defined(GLFW_INCLUDE_ES1)
    139 
    140  #include <GLES/gl.h>
    141  #if defined(GLFW_INCLUDE_GLEXT)
    142  #include <GLES/glext.h>
    143  #endif
    144 
    145 #elif defined(GLFW_INCLUDE_ES2)
    146 
    147  #include <GLES2/gl2.h>
    148  #if defined(GLFW_INCLUDE_GLEXT)
    149  #include <GLES2/gl2ext.h>
    150  #endif
    151 
    152 #elif defined(GLFW_INCLUDE_ES3)
    153 
    154  #include <GLES3/gl3.h>
    155  #if defined(GLFW_INCLUDE_GLEXT)
    156  #include <GLES2/gl2ext.h>
    157  #endif
    158 
    159 #elif defined(GLFW_INCLUDE_ES31)
    160 
    161  #include <GLES3/gl31.h>
    162  #if defined(GLFW_INCLUDE_GLEXT)
    163  #include <GLES2/gl2ext.h>
    164  #endif
    165 
    166 #elif defined(GLFW_INCLUDE_ES32)
    167 
    168  #include <GLES3/gl32.h>
    169  #if defined(GLFW_INCLUDE_GLEXT)
    170  #include <GLES2/gl2ext.h>
    171  #endif
    172 
    173 #elif defined(GLFW_INCLUDE_GLCOREARB)
    174 
    175  #if defined(__APPLE__)
    176 
    177  #include <OpenGL/gl3.h>
    178  #if defined(GLFW_INCLUDE_GLEXT)
    179  #include <OpenGL/gl3ext.h>
    180  #endif /*GLFW_INCLUDE_GLEXT*/
    181 
    182  #else /*__APPLE__*/
    183 
    184  #include <GL/glcorearb.h>
    185 
    186  #endif /*__APPLE__*/
    187 
    188 #elif !defined(GLFW_INCLUDE_NONE)
    189 
    190  #if defined(__APPLE__)
    191 
    192  #if !defined(GLFW_INCLUDE_GLEXT)
    193  #define GL_GLEXT_LEGACY
    194  #endif
    195  #include <OpenGL/gl.h>
    196  #if defined(GLFW_INCLUDE_GLU)
    197  #include <OpenGL/glu.h>
    198  #endif
    199 
    200  #else /*__APPLE__*/
    201 
    202  #include <GL/gl.h>
    203  #if defined(GLFW_INCLUDE_GLEXT)
    204  #include <GL/glext.h>
    205  #endif
    206  #if defined(GLFW_INCLUDE_GLU)
    207  #include <GL/glu.h>
    208  #endif
    209 
    210  #endif /*__APPLE__*/
    211 
    212 #endif /* OpenGL and OpenGL ES headers */
    213 
    214 #if defined(GLFW_INCLUDE_VULKAN)
    215  #include <vulkan/vulkan.h>
    216 #endif /* Vulkan header */
    217 
    218 #if defined(GLFW_DLL) && defined(_GLFW_BUILD_DLL)
    219  /* GLFW_DLL must be defined by applications that are linking against the DLL
    220  * version of the GLFW library. _GLFW_BUILD_DLL is defined by the GLFW
    221  * configuration header when compiling the DLL version of the library.
    222  */
    223  #error "You must not have both GLFW_DLL and _GLFW_BUILD_DLL defined"
    224 #endif
    225 
    226 /* GLFWAPI is used to declare public API functions for export
    227  * from the DLL / shared library / dynamic library.
    228  */
    229 #if defined(_WIN32) && defined(_GLFW_BUILD_DLL)
    230  /* We are building GLFW as a Win32 DLL */
    231  #define GLFWAPI __declspec(dllexport)
    232 #elif defined(_WIN32) && defined(GLFW_DLL)
    233  /* We are calling GLFW as a Win32 DLL */
    234  #define GLFWAPI __declspec(dllimport)
    235 #elif defined(__GNUC__) && defined(_GLFW_BUILD_DLL)
    236  /* We are building GLFW as a shared / dynamic library */
    237  #define GLFWAPI __attribute__((visibility("default")))
    238 #else
    239  /* We are building or calling GLFW as a static library */
    240  #define GLFWAPI
    241 #endif
    242 
    243 
    244 /*************************************************************************
    245  * GLFW API tokens
    246  *************************************************************************/
    247 
    255 #define GLFW_VERSION_MAJOR 3
    256 
    262 #define GLFW_VERSION_MINOR 3
    263 
    269 #define GLFW_VERSION_REVISION 0
    270 
    280 #define GLFW_TRUE 1
    281 
    289 #define GLFW_FALSE 0
    290 
    299 #define GLFW_RELEASE 0
    300 
    306 #define GLFW_PRESS 1
    307 
    313 #define GLFW_REPEAT 2
    314 
    323 #define GLFW_HAT_CENTERED 0
    324 #define GLFW_HAT_UP 1
    325 #define GLFW_HAT_RIGHT 2
    326 #define GLFW_HAT_DOWN 4
    327 #define GLFW_HAT_LEFT 8
    328 #define GLFW_HAT_RIGHT_UP (GLFW_HAT_RIGHT | GLFW_HAT_UP)
    329 #define GLFW_HAT_RIGHT_DOWN (GLFW_HAT_RIGHT | GLFW_HAT_DOWN)
    330 #define GLFW_HAT_LEFT_UP (GLFW_HAT_LEFT | GLFW_HAT_UP)
    331 #define GLFW_HAT_LEFT_DOWN (GLFW_HAT_LEFT | GLFW_HAT_DOWN)
    332 
    358 /* The unknown key */
    359 #define GLFW_KEY_UNKNOWN -1
    360 
    361 /* Printable keys */
    362 #define GLFW_KEY_SPACE 32
    363 #define GLFW_KEY_APOSTROPHE 39 /* ' */
    364 #define GLFW_KEY_COMMA 44 /* , */
    365 #define GLFW_KEY_MINUS 45 /* - */
    366 #define GLFW_KEY_PERIOD 46 /* . */
    367 #define GLFW_KEY_SLASH 47 /* / */
    368 #define GLFW_KEY_0 48
    369 #define GLFW_KEY_1 49
    370 #define GLFW_KEY_2 50
    371 #define GLFW_KEY_3 51
    372 #define GLFW_KEY_4 52
    373 #define GLFW_KEY_5 53
    374 #define GLFW_KEY_6 54
    375 #define GLFW_KEY_7 55
    376 #define GLFW_KEY_8 56
    377 #define GLFW_KEY_9 57
    378 #define GLFW_KEY_SEMICOLON 59 /* ; */
    379 #define GLFW_KEY_EQUAL 61 /* = */
    380 #define GLFW_KEY_A 65
    381 #define GLFW_KEY_B 66
    382 #define GLFW_KEY_C 67
    383 #define GLFW_KEY_D 68
    384 #define GLFW_KEY_E 69
    385 #define GLFW_KEY_F 70
    386 #define GLFW_KEY_G 71
    387 #define GLFW_KEY_H 72
    388 #define GLFW_KEY_I 73
    389 #define GLFW_KEY_J 74
    390 #define GLFW_KEY_K 75
    391 #define GLFW_KEY_L 76
    392 #define GLFW_KEY_M 77
    393 #define GLFW_KEY_N 78
    394 #define GLFW_KEY_O 79
    395 #define GLFW_KEY_P 80
    396 #define GLFW_KEY_Q 81
    397 #define GLFW_KEY_R 82
    398 #define GLFW_KEY_S 83
    399 #define GLFW_KEY_T 84
    400 #define GLFW_KEY_U 85
    401 #define GLFW_KEY_V 86
    402 #define GLFW_KEY_W 87
    403 #define GLFW_KEY_X 88
    404 #define GLFW_KEY_Y 89
    405 #define GLFW_KEY_Z 90
    406 #define GLFW_KEY_LEFT_BRACKET 91 /* [ */
    407 #define GLFW_KEY_BACKSLASH 92 /* \ */
    408 #define GLFW_KEY_RIGHT_BRACKET 93 /* ] */
    409 #define GLFW_KEY_GRAVE_ACCENT 96 /* ` */
    410 #define GLFW_KEY_WORLD_1 161 /* non-US #1 */
    411 #define GLFW_KEY_WORLD_2 162 /* non-US #2 */
    412 
    413 /* Function keys */
    414 #define GLFW_KEY_ESCAPE 256
    415 #define GLFW_KEY_ENTER 257
    416 #define GLFW_KEY_TAB 258
    417 #define GLFW_KEY_BACKSPACE 259
    418 #define GLFW_KEY_INSERT 260
    419 #define GLFW_KEY_DELETE 261
    420 #define GLFW_KEY_RIGHT 262
    421 #define GLFW_KEY_LEFT 263
    422 #define GLFW_KEY_DOWN 264
    423 #define GLFW_KEY_UP 265
    424 #define GLFW_KEY_PAGE_UP 266
    425 #define GLFW_KEY_PAGE_DOWN 267
    426 #define GLFW_KEY_HOME 268
    427 #define GLFW_KEY_END 269
    428 #define GLFW_KEY_CAPS_LOCK 280
    429 #define GLFW_KEY_SCROLL_LOCK 281
    430 #define GLFW_KEY_NUM_LOCK 282
    431 #define GLFW_KEY_PRINT_SCREEN 283
    432 #define GLFW_KEY_PAUSE 284
    433 #define GLFW_KEY_F1 290
    434 #define GLFW_KEY_F2 291
    435 #define GLFW_KEY_F3 292
    436 #define GLFW_KEY_F4 293
    437 #define GLFW_KEY_F5 294
    438 #define GLFW_KEY_F6 295
    439 #define GLFW_KEY_F7 296
    440 #define GLFW_KEY_F8 297
    441 #define GLFW_KEY_F9 298
    442 #define GLFW_KEY_F10 299
    443 #define GLFW_KEY_F11 300
    444 #define GLFW_KEY_F12 301
    445 #define GLFW_KEY_F13 302
    446 #define GLFW_KEY_F14 303
    447 #define GLFW_KEY_F15 304
    448 #define GLFW_KEY_F16 305
    449 #define GLFW_KEY_F17 306
    450 #define GLFW_KEY_F18 307
    451 #define GLFW_KEY_F19 308
    452 #define GLFW_KEY_F20 309
    453 #define GLFW_KEY_F21 310
    454 #define GLFW_KEY_F22 311
    455 #define GLFW_KEY_F23 312
    456 #define GLFW_KEY_F24 313
    457 #define GLFW_KEY_F25 314
    458 #define GLFW_KEY_KP_0 320
    459 #define GLFW_KEY_KP_1 321
    460 #define GLFW_KEY_KP_2 322
    461 #define GLFW_KEY_KP_3 323
    462 #define GLFW_KEY_KP_4 324
    463 #define GLFW_KEY_KP_5 325
    464 #define GLFW_KEY_KP_6 326
    465 #define GLFW_KEY_KP_7 327
    466 #define GLFW_KEY_KP_8 328
    467 #define GLFW_KEY_KP_9 329
    468 #define GLFW_KEY_KP_DECIMAL 330
    469 #define GLFW_KEY_KP_DIVIDE 331
    470 #define GLFW_KEY_KP_MULTIPLY 332
    471 #define GLFW_KEY_KP_SUBTRACT 333
    472 #define GLFW_KEY_KP_ADD 334
    473 #define GLFW_KEY_KP_ENTER 335
    474 #define GLFW_KEY_KP_EQUAL 336
    475 #define GLFW_KEY_LEFT_SHIFT 340
    476 #define GLFW_KEY_LEFT_CONTROL 341
    477 #define GLFW_KEY_LEFT_ALT 342
    478 #define GLFW_KEY_LEFT_SUPER 343
    479 #define GLFW_KEY_RIGHT_SHIFT 344
    480 #define GLFW_KEY_RIGHT_CONTROL 345
    481 #define GLFW_KEY_RIGHT_ALT 346
    482 #define GLFW_KEY_RIGHT_SUPER 347
    483 #define GLFW_KEY_MENU 348
    484 
    485 #define GLFW_KEY_LAST GLFW_KEY_MENU
    486 
    501 #define GLFW_MOD_SHIFT 0x0001
    502 
    506 #define GLFW_MOD_CONTROL 0x0002
    507 
    511 #define GLFW_MOD_ALT 0x0004
    512 
    516 #define GLFW_MOD_SUPER 0x0008
    517 
    522 #define GLFW_MOD_CAPS_LOCK 0x0010
    523 
    528 #define GLFW_MOD_NUM_LOCK 0x0020
    529 
    539 #define GLFW_MOUSE_BUTTON_1 0
    540 #define GLFW_MOUSE_BUTTON_2 1
    541 #define GLFW_MOUSE_BUTTON_3 2
    542 #define GLFW_MOUSE_BUTTON_4 3
    543 #define GLFW_MOUSE_BUTTON_5 4
    544 #define GLFW_MOUSE_BUTTON_6 5
    545 #define GLFW_MOUSE_BUTTON_7 6
    546 #define GLFW_MOUSE_BUTTON_8 7
    547 #define GLFW_MOUSE_BUTTON_LAST GLFW_MOUSE_BUTTON_8
    548 #define GLFW_MOUSE_BUTTON_LEFT GLFW_MOUSE_BUTTON_1
    549 #define GLFW_MOUSE_BUTTON_RIGHT GLFW_MOUSE_BUTTON_2
    550 #define GLFW_MOUSE_BUTTON_MIDDLE GLFW_MOUSE_BUTTON_3
    551 
    560 #define GLFW_JOYSTICK_1 0
    561 #define GLFW_JOYSTICK_2 1
    562 #define GLFW_JOYSTICK_3 2
    563 #define GLFW_JOYSTICK_4 3
    564 #define GLFW_JOYSTICK_5 4
    565 #define GLFW_JOYSTICK_6 5
    566 #define GLFW_JOYSTICK_7 6
    567 #define GLFW_JOYSTICK_8 7
    568 #define GLFW_JOYSTICK_9 8
    569 #define GLFW_JOYSTICK_10 9
    570 #define GLFW_JOYSTICK_11 10
    571 #define GLFW_JOYSTICK_12 11
    572 #define GLFW_JOYSTICK_13 12
    573 #define GLFW_JOYSTICK_14 13
    574 #define GLFW_JOYSTICK_15 14
    575 #define GLFW_JOYSTICK_16 15
    576 #define GLFW_JOYSTICK_LAST GLFW_JOYSTICK_16
    577 
    586 #define GLFW_GAMEPAD_BUTTON_A 0
    587 #define GLFW_GAMEPAD_BUTTON_B 1
    588 #define GLFW_GAMEPAD_BUTTON_X 2
    589 #define GLFW_GAMEPAD_BUTTON_Y 3
    590 #define GLFW_GAMEPAD_BUTTON_LEFT_BUMPER 4
    591 #define GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER 5
    592 #define GLFW_GAMEPAD_BUTTON_BACK 6
    593 #define GLFW_GAMEPAD_BUTTON_START 7
    594 #define GLFW_GAMEPAD_BUTTON_GUIDE 8
    595 #define GLFW_GAMEPAD_BUTTON_LEFT_THUMB 9
    596 #define GLFW_GAMEPAD_BUTTON_RIGHT_THUMB 10
    597 #define GLFW_GAMEPAD_BUTTON_DPAD_UP 11
    598 #define GLFW_GAMEPAD_BUTTON_DPAD_RIGHT 12
    599 #define GLFW_GAMEPAD_BUTTON_DPAD_DOWN 13
    600 #define GLFW_GAMEPAD_BUTTON_DPAD_LEFT 14
    601 #define GLFW_GAMEPAD_BUTTON_LAST GLFW_GAMEPAD_BUTTON_DPAD_LEFT
    602 
    603 #define GLFW_GAMEPAD_BUTTON_CROSS GLFW_GAMEPAD_BUTTON_A
    604 #define GLFW_GAMEPAD_BUTTON_CIRCLE GLFW_GAMEPAD_BUTTON_B
    605 #define GLFW_GAMEPAD_BUTTON_SQUARE GLFW_GAMEPAD_BUTTON_X
    606 #define GLFW_GAMEPAD_BUTTON_TRIANGLE GLFW_GAMEPAD_BUTTON_Y
    607 
    616 #define GLFW_GAMEPAD_AXIS_LEFT_X 0
    617 #define GLFW_GAMEPAD_AXIS_LEFT_Y 1
    618 #define GLFW_GAMEPAD_AXIS_RIGHT_X 2
    619 #define GLFW_GAMEPAD_AXIS_RIGHT_Y 3
    620 #define GLFW_GAMEPAD_AXIS_LEFT_TRIGGER 4
    621 #define GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER 5
    622 #define GLFW_GAMEPAD_AXIS_LAST GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER
    623 
    638 #define GLFW_NO_ERROR 0
    639 
    647 #define GLFW_NOT_INITIALIZED 0x00010001
    648 
    657 #define GLFW_NO_CURRENT_CONTEXT 0x00010002
    658 
    665 #define GLFW_INVALID_ENUM 0x00010003
    666 
    676 #define GLFW_INVALID_VALUE 0x00010004
    677 
    684 #define GLFW_OUT_OF_MEMORY 0x00010005
    685 
    700 #define GLFW_API_UNAVAILABLE 0x00010006
    701 
    717 #define GLFW_VERSION_UNAVAILABLE 0x00010007
    718 
    728 #define GLFW_PLATFORM_ERROR 0x00010008
    729 
    747 #define GLFW_FORMAT_UNAVAILABLE 0x00010009
    748 
    755 #define GLFW_NO_WINDOW_CONTEXT 0x0001000A
    756 
    765 #define GLFW_FOCUSED 0x00020001
    766 
    770 #define GLFW_ICONIFIED 0x00020002
    771 
    776 #define GLFW_RESIZABLE 0x00020003
    777 
    782 #define GLFW_VISIBLE 0x00020004
    783 
    788 #define GLFW_DECORATED 0x00020005
    789 
    794 #define GLFW_AUTO_ICONIFY 0x00020006
    795 
    800 #define GLFW_FLOATING 0x00020007
    801 
    806 #define GLFW_MAXIMIZED 0x00020008
    807 
    811 #define GLFW_CENTER_CURSOR 0x00020009
    812 
    818 #define GLFW_TRANSPARENT_FRAMEBUFFER 0x0002000A
    819 
    823 #define GLFW_HOVERED 0x0002000B
    824 
    829 #define GLFW_FOCUS_ON_SHOW 0x0002000C
    830 
    835 #define GLFW_RED_BITS 0x00021001
    836 
    840 #define GLFW_GREEN_BITS 0x00021002
    841 
    845 #define GLFW_BLUE_BITS 0x00021003
    846 
    850 #define GLFW_ALPHA_BITS 0x00021004
    851 
    855 #define GLFW_DEPTH_BITS 0x00021005
    856 
    860 #define GLFW_STENCIL_BITS 0x00021006
    861 
    865 #define GLFW_ACCUM_RED_BITS 0x00021007
    866 
    870 #define GLFW_ACCUM_GREEN_BITS 0x00021008
    871 
    875 #define GLFW_ACCUM_BLUE_BITS 0x00021009
    876 
    880 #define GLFW_ACCUM_ALPHA_BITS 0x0002100A
    881 
    885 #define GLFW_AUX_BUFFERS 0x0002100B
    886 
    890 #define GLFW_STEREO 0x0002100C
    891 
    895 #define GLFW_SAMPLES 0x0002100D
    896 
    900 #define GLFW_SRGB_CAPABLE 0x0002100E
    901 
    905 #define GLFW_REFRESH_RATE 0x0002100F
    906 
    910 #define GLFW_DOUBLEBUFFER 0x00021010
    911 
    917 #define GLFW_CLIENT_API 0x00022001
    918 
    923 #define GLFW_CONTEXT_VERSION_MAJOR 0x00022002
    924 
    929 #define GLFW_CONTEXT_VERSION_MINOR 0x00022003
    930 
    935 #define GLFW_CONTEXT_REVISION 0x00022004
    936 
    941 #define GLFW_CONTEXT_ROBUSTNESS 0x00022005
    942 
    947 #define GLFW_OPENGL_FORWARD_COMPAT 0x00022006
    948 
    953 #define GLFW_OPENGL_DEBUG_CONTEXT 0x00022007
    954 
    959 #define GLFW_OPENGL_PROFILE 0x00022008
    960 
    965 #define GLFW_CONTEXT_RELEASE_BEHAVIOR 0x00022009
    966 
    971 #define GLFW_CONTEXT_NO_ERROR 0x0002200A
    972 
    977 #define GLFW_CONTEXT_CREATION_API 0x0002200B
    978 
    981 #define GLFW_SCALE_TO_MONITOR 0x0002200C
    982 
    985 #define GLFW_COCOA_RETINA_FRAMEBUFFER 0x00023001
    986 
    989 #define GLFW_COCOA_FRAME_NAME 0x00023002
    990 
    993 #define GLFW_COCOA_GRAPHICS_SWITCHING 0x00023003
    994 
    997 #define GLFW_X11_CLASS_NAME 0x00024001
    998 
    1001 #define GLFW_X11_INSTANCE_NAME 0x00024002
    1002 
    1004 #define GLFW_NO_API 0
    1005 #define GLFW_OPENGL_API 0x00030001
    1006 #define GLFW_OPENGL_ES_API 0x00030002
    1007 
    1008 #define GLFW_NO_ROBUSTNESS 0
    1009 #define GLFW_NO_RESET_NOTIFICATION 0x00031001
    1010 #define GLFW_LOSE_CONTEXT_ON_RESET 0x00031002
    1011 
    1012 #define GLFW_OPENGL_ANY_PROFILE 0
    1013 #define GLFW_OPENGL_CORE_PROFILE 0x00032001
    1014 #define GLFW_OPENGL_COMPAT_PROFILE 0x00032002
    1015 
    1016 #define GLFW_CURSOR 0x00033001
    1017 #define GLFW_STICKY_KEYS 0x00033002
    1018 #define GLFW_STICKY_MOUSE_BUTTONS 0x00033003
    1019 #define GLFW_LOCK_KEY_MODS 0x00033004
    1020 #define GLFW_RAW_MOUSE_MOTION 0x00033005
    1021 
    1022 #define GLFW_CURSOR_NORMAL 0x00034001
    1023 #define GLFW_CURSOR_HIDDEN 0x00034002
    1024 #define GLFW_CURSOR_DISABLED 0x00034003
    1025 
    1026 #define GLFW_ANY_RELEASE_BEHAVIOR 0
    1027 #define GLFW_RELEASE_BEHAVIOR_FLUSH 0x00035001
    1028 #define GLFW_RELEASE_BEHAVIOR_NONE 0x00035002
    1029 
    1030 #define GLFW_NATIVE_CONTEXT_API 0x00036001
    1031 #define GLFW_EGL_CONTEXT_API 0x00036002
    1032 #define GLFW_OSMESA_CONTEXT_API 0x00036003
    1033 
    1046 #define GLFW_ARROW_CURSOR 0x00036001
    1047 
    1051 #define GLFW_IBEAM_CURSOR 0x00036002
    1052 
    1056 #define GLFW_CROSSHAIR_CURSOR 0x00036003
    1057 
    1061 #define GLFW_HAND_CURSOR 0x00036004
    1062 
    1066 #define GLFW_HRESIZE_CURSOR 0x00036005
    1067 
    1071 #define GLFW_VRESIZE_CURSOR 0x00036006
    1072 
    1074 #define GLFW_CONNECTED 0x00040001
    1075 #define GLFW_DISCONNECTED 0x00040002
    1076 
    1083 #define GLFW_JOYSTICK_HAT_BUTTONS 0x00050001
    1084 
    1088 #define GLFW_COCOA_CHDIR_RESOURCES 0x00051001
    1089 
    1093 #define GLFW_COCOA_MENUBAR 0x00051002
    1094 
    1096 #define GLFW_DONT_CARE -1
    1097 
    1098 
    1099 /*************************************************************************
    1100  * GLFW API types
    1101  *************************************************************************/
    1102 
    1115 typedef void (*GLFWglproc)(void);
    1116 
    1129 typedef void (*GLFWvkproc)(void);
    1130 
    1141 typedef struct GLFWmonitor GLFWmonitor;
    1142 
    1153 typedef struct GLFWwindow GLFWwindow;
    1154 
    1165 typedef struct GLFWcursor GLFWcursor;
    1166 
    1181 typedef void (* GLFWerrorfun)(int,const char*);
    1182 
    1200 typedef void (* GLFWwindowposfun)(GLFWwindow*,int,int);
    1201 
    1218 typedef void (* GLFWwindowsizefun)(GLFWwindow*,int,int);
    1219 
    1234 typedef void (* GLFWwindowclosefun)(GLFWwindow*);
    1235 
    1251 
    1267 typedef void (* GLFWwindowfocusfun)(GLFWwindow*,int);
    1268 
    1285 typedef void (* GLFWwindowiconifyfun)(GLFWwindow*,int);
    1286 
    1303 typedef void (* GLFWwindowmaximizefun)(GLFWwindow*,int);
    1304 
    1321 typedef void (* GLFWframebuffersizefun)(GLFWwindow*,int,int);
    1322 
    1339 typedef void (* GLFWwindowcontentscalefun)(GLFWwindow*,float,float);
    1340 
    1360 typedef void (* GLFWmousebuttonfun)(GLFWwindow*,int,int,int);
    1361 
    1379 typedef void (* GLFWcursorposfun)(GLFWwindow*,double,double);
    1380 
    1396 typedef void (* GLFWcursorenterfun)(GLFWwindow*,int);
    1397 
    1413 typedef void (* GLFWscrollfun)(GLFWwindow*,double,double);
    1414 
    1434 typedef void (* GLFWkeyfun)(GLFWwindow*,int,int,int,int);
    1435 
    1451 typedef void (* GLFWcharfun)(GLFWwindow*,unsigned int);
    1452 
    1474 typedef void (* GLFWcharmodsfun)(GLFWwindow*,unsigned int,int);
    1475 
    1491 typedef void (* GLFWdropfun)(GLFWwindow*,int,const char**);
    1492 
    1508 typedef void (* GLFWmonitorfun)(GLFWmonitor*,int);
    1509 
    1526 typedef void (* GLFWjoystickfun)(int,int);
    1527 
    1541 typedef struct GLFWvidmode
    1542 {
    1545  int width;
    1548  int height;
    1551  int redBits;
    1561 } GLFWvidmode;
    1562 
    1575 typedef struct GLFWgammaramp
    1576 {
    1579  unsigned short* red;
    1582  unsigned short* green;
    1585  unsigned short* blue;
    1588  unsigned int size;
    1589 } GLFWgammaramp;
    1590 
    1604 typedef struct GLFWimage
    1605 {
    1608  int width;
    1611  int height;
    1614  unsigned char* pixels;
    1615 } GLFWimage;
    1616 
    1628 typedef struct GLFWgamepadstate
    1629 {
    1633  unsigned char buttons[15];
    1637  float axes[6];
    1639 
    1640 
    1641 /*************************************************************************
    1642  * GLFW API functions
    1643  *************************************************************************/
    1644 
    1677 GLFWAPI int glfwInit(void);
    1678 
    1709 GLFWAPI void glfwTerminate(void);
    1710 
    1741 GLFWAPI void glfwInitHint(int hint, int value);
    1742 
    1768 GLFWAPI void glfwGetVersion(int* major, int* minor, int* rev);
    1769 
    1799 GLFWAPI const char* glfwGetVersionString(void);
    1800 
    1830 GLFWAPI int glfwGetError(const char** description);
    1831 
    1870 
    1898 GLFWAPI GLFWmonitor** glfwGetMonitors(int* count);
    1899 
    1922 GLFWAPI GLFWmonitor* glfwGetPrimaryMonitor(void);
    1923 
    1947 GLFWAPI void glfwGetMonitorPos(GLFWmonitor* monitor, int* xpos, int* ypos);
    1948 
    1978 GLFWAPI void glfwGetMonitorWorkarea(GLFWmonitor* monitor, int* xpos, int* ypos, int* width, int* height);
    1979 
    2012 GLFWAPI void glfwGetMonitorPhysicalSize(GLFWmonitor* monitor, int* widthMM, int* heightMM);
    2013 
    2044 GLFWAPI void glfwGetMonitorContentScale(GLFWmonitor* monitor, float* xscale, float* yscale);
    2045 
    2070 GLFWAPI const char* glfwGetMonitorName(GLFWmonitor* monitor);
    2071 
    2096 GLFWAPI void glfwSetMonitorUserPointer(GLFWmonitor* monitor, void* pointer);
    2097 
    2120 GLFWAPI void* glfwGetMonitorUserPointer(GLFWmonitor* monitor);
    2121 
    2144 
    2176 GLFWAPI const GLFWvidmode* glfwGetVideoModes(GLFWmonitor* monitor, int* count);
    2177 
    2204 GLFWAPI const GLFWvidmode* glfwGetVideoMode(GLFWmonitor* monitor);
    2205 
    2237 GLFWAPI void glfwSetGamma(GLFWmonitor* monitor, float gamma);
    2238 
    2267 GLFWAPI const GLFWgammaramp* glfwGetGammaRamp(GLFWmonitor* monitor);
    2268 
    2308 GLFWAPI void glfwSetGammaRamp(GLFWmonitor* monitor, const GLFWgammaramp* ramp);
    2309 
    2327 GLFWAPI void glfwDefaultWindowHints(void);
    2328 
    2362 GLFWAPI void glfwWindowHint(int hint, int value);
    2363 
    2400 GLFWAPI void glfwWindowHintString(int hint, const char* value);
    2401 
    2554 GLFWAPI GLFWwindow* glfwCreateWindow(int width, int height, const char* title, GLFWmonitor* monitor, GLFWwindow* share);
    2555 
    2583 GLFWAPI void glfwDestroyWindow(GLFWwindow* window);
    2584 
    2603 GLFWAPI int glfwWindowShouldClose(GLFWwindow* window);
    2604 
    2625 GLFWAPI void glfwSetWindowShouldClose(GLFWwindow* window, int value);
    2626 
    2650 GLFWAPI void glfwSetWindowTitle(GLFWwindow* window, const char* title);
    2651 
    2697 GLFWAPI void glfwSetWindowIcon(GLFWwindow* window, int count, const GLFWimage* images);
    2698 
    2729 GLFWAPI void glfwGetWindowPos(GLFWwindow* window, int* xpos, int* ypos);
    2730 
    2764 GLFWAPI void glfwSetWindowPos(GLFWwindow* window, int xpos, int ypos);
    2765 
    2794 GLFWAPI void glfwGetWindowSize(GLFWwindow* window, int* width, int* height);
    2795 
    2837 GLFWAPI void glfwSetWindowSizeLimits(GLFWwindow* window, int minwidth, int minheight, int maxwidth, int maxheight);
    2838 
    2880 GLFWAPI void glfwSetWindowAspectRatio(GLFWwindow* window, int numer, int denom);
    2881 
    2921 GLFWAPI void glfwSetWindowSize(GLFWwindow* window, int width, int height);
    2922 
    2950 GLFWAPI void glfwGetFramebufferSize(GLFWwindow* window, int* width, int* height);
    2951 
    2987 GLFWAPI void glfwGetWindowFrameSize(GLFWwindow* window, int* left, int* top, int* right, int* bottom);
    2988 
    3020 GLFWAPI void glfwGetWindowContentScale(GLFWwindow* window, float* xscale, float* yscale);
    3021 
    3047 GLFWAPI float glfwGetWindowOpacity(GLFWwindow* window);
    3048 
    3076 GLFWAPI void glfwSetWindowOpacity(GLFWwindow* window, float opacity);
    3077 
    3107 GLFWAPI void glfwIconifyWindow(GLFWwindow* window);
    3108 
    3134 GLFWAPI void glfwRestoreWindow(GLFWwindow* window);
    3135 
    3159 GLFWAPI void glfwMaximizeWindow(GLFWwindow* window);
    3160 
    3186 GLFWAPI void glfwShowWindow(GLFWwindow* window);
    3187 
    3208 GLFWAPI void glfwHideWindow(GLFWwindow* window);
    3209 
    3247 GLFWAPI void glfwFocusWindow(GLFWwindow* window);
    3248 
    3274 GLFWAPI void glfwRequestWindowAttention(GLFWwindow* window);
    3275 
    3296 GLFWAPI GLFWmonitor* glfwGetWindowMonitor(GLFWwindow* window);
    3297 
    3355 GLFWAPI void glfwSetWindowMonitor(GLFWwindow* window, GLFWmonitor* monitor, int xpos, int ypos, int width, int height, int refreshRate);
    3356 
    3389 GLFWAPI int glfwGetWindowAttrib(GLFWwindow* window, int attrib);
    3390 
    3426 GLFWAPI void glfwSetWindowAttrib(GLFWwindow* window, int attrib, int value);
    3427 
    3449 GLFWAPI void glfwSetWindowUserPointer(GLFWwindow* window, void* pointer);
    3450 
    3470 GLFWAPI void* glfwGetWindowUserPointer(GLFWwindow* window);
    3471 
    3499 
    3524 
    3557 
    3586 
    3614 
    3640 
    3663 
    3686 
    3710 
    3747 GLFWAPI void glfwPollEvents(void);
    3748 
    3792 GLFWAPI void glfwWaitEvents(void);
    3793 
    3841 GLFWAPI void glfwWaitEventsTimeout(double timeout);
    3842 
    3861 GLFWAPI void glfwPostEmptyEvent(void);
    3862 
    3886 GLFWAPI int glfwGetInputMode(GLFWwindow* window, int mode);
    3887 
    3948 GLFWAPI void glfwSetInputMode(GLFWwindow* window, int mode, int value);
    3949 
    3977 GLFWAPI int glfwRawMouseMotionSupported(void);
    3978 
    4043 GLFWAPI const char* glfwGetKeyName(int key, int scancode);
    4044 
    4067 GLFWAPI int glfwGetKeyScancode(int key);
    4068 
    4107 GLFWAPI int glfwGetKey(GLFWwindow* window, int key);
    4108 
    4136 GLFWAPI int glfwGetMouseButton(GLFWwindow* window, int button);
    4137 
    4174 GLFWAPI void glfwGetCursorPos(GLFWwindow* window, double* xpos, double* ypos);
    4175 
    4214 GLFWAPI void glfwSetCursorPos(GLFWwindow* window, double xpos, double ypos);
    4215 
    4252 GLFWAPI GLFWcursor* glfwCreateCursor(const GLFWimage* image, int xhot, int yhot);
    4253 
    4275 GLFWAPI GLFWcursor* glfwCreateStandardCursor(int shape);
    4276 
    4302 GLFWAPI void glfwDestroyCursor(GLFWcursor* cursor);
    4303 
    4329 GLFWAPI void glfwSetCursor(GLFWwindow* window, GLFWcursor* cursor);
    4330 
    4372 GLFWAPI GLFWkeyfun glfwSetKeyCallback(GLFWwindow* window, GLFWkeyfun cbfun);
    4373 
    4408 GLFWAPI GLFWcharfun glfwSetCharCallback(GLFWwindow* window, GLFWcharfun cbfun);
    4409 
    4444 
    4474 
    4499 
    4523 
    4550 
    4579 GLFWAPI GLFWdropfun glfwSetDropCallback(GLFWwindow* window, GLFWdropfun cbfun);
    4580 
    4603 GLFWAPI int glfwJoystickPresent(int jid);
    4604 
    4636 GLFWAPI const float* glfwGetJoystickAxes(int jid, int* count);
    4637 
    4677 GLFWAPI const unsigned char* glfwGetJoystickButtons(int jid, int* count);
    4678 
    4734 GLFWAPI const unsigned char* glfwGetJoystickHats(int jid, int* count);
    4735 
    4765 GLFWAPI const char* glfwGetJoystickName(int jid);
    4766 
    4806 GLFWAPI const char* glfwGetJoystickGUID(int jid);
    4807 
    4832 GLFWAPI void glfwSetJoystickUserPointer(int jid, void* pointer);
    4833 
    4856 GLFWAPI void* glfwGetJoystickUserPointer(int jid);
    4857 
    4884 GLFWAPI int glfwJoystickIsGamepad(int jid);
    4885 
    4914 
    4947 GLFWAPI int glfwUpdateGamepadMappings(const char* string);
    4948 
    4977 GLFWAPI const char* glfwGetGamepadName(int jid);
    4978 
    5015 GLFWAPI int glfwGetGamepadState(int jid, GLFWgamepadstate* state);
    5016 
    5040 GLFWAPI void glfwSetClipboardString(GLFWwindow* window, const char* string);
    5041 
    5070 GLFWAPI const char* glfwGetClipboardString(GLFWwindow* window);
    5071 
    5097 GLFWAPI double glfwGetTime(void);
    5098 
    5124 GLFWAPI void glfwSetTime(double time);
    5125 
    5146 GLFWAPI uint64_t glfwGetTimerValue(void);
    5147 
    5166 GLFWAPI uint64_t glfwGetTimerFrequency(void);
    5167 
    5204 GLFWAPI void glfwMakeContextCurrent(GLFWwindow* window);
    5205 
    5225 GLFWAPI GLFWwindow* glfwGetCurrentContext(void);
    5226 
    5259 GLFWAPI void glfwSwapBuffers(GLFWwindow* window);
    5260 
    5305 GLFWAPI void glfwSwapInterval(int interval);
    5306 
    5343 GLFWAPI int glfwExtensionSupported(const char* extension);
    5344 
    5385 GLFWAPI GLFWglproc glfwGetProcAddress(const char* procname);
    5386 
    5413 GLFWAPI int glfwVulkanSupported(void);
    5414 
    5460 GLFWAPI const char** glfwGetRequiredInstanceExtensions(uint32_t* count);
    5461 
    5462 #if defined(VK_VERSION_1_0)
    5463 
    5503 GLFWAPI GLFWvkproc glfwGetInstanceProcAddress(VkInstance instance, const char* procname);
    5504 
    5540 GLFWAPI int glfwGetPhysicalDevicePresentationSupport(VkInstance instance, VkPhysicalDevice device, uint32_t queuefamily);
    5541 
    5601 GLFWAPI VkResult glfwCreateWindowSurface(VkInstance instance, GLFWwindow* window, const VkAllocationCallbacks* allocator, VkSurfaceKHR* surface);
    5602 
    5603 #endif /*VK_VERSION_1_0*/
    5604 
    5605 
    5606 /*************************************************************************
    5607  * Global definition cleanup
    5608  *************************************************************************/
    5609 
    5610 /* ------------------- BEGIN SYSTEM/COMPILER SPECIFIC -------------------- */
    5611 
    5612 #ifdef GLFW_WINGDIAPI_DEFINED
    5613  #undef WINGDIAPI
    5614  #undef GLFW_WINGDIAPI_DEFINED
    5615 #endif
    5616 
    5617 #ifdef GLFW_CALLBACK_DEFINED
    5618  #undef CALLBACK
    5619  #undef GLFW_CALLBACK_DEFINED
    5620 #endif
    5621 
    5622 /* Some OpenGL related headers need GLAPIENTRY, but it is unconditionally
    5623  * defined by some gl.h variants (OpenBSD) so define it after if needed.
    5624  */
    5625 #ifndef GLAPIENTRY
    5626  #define GLAPIENTRY APIENTRY
    5627 #endif
    5628 
    5629 /* -------------------- END SYSTEM/COMPILER SPECIFIC --------------------- */
    5630 
    5631 
    5632 #ifdef __cplusplus
    5633 }
    5634 #endif
    5635 
    5636 #endif /* _glfw3_h_ */
    5637 
    void glfwGetVersion(int *major, int *minor, int *rev)
    Retrieves the version of the GLFW library.
    +
    Gamepad input state.
    Definition: glfw3.h:1628
    +
    int redBits
    Definition: glfw3.h:1551
    +
    void glfwGetWindowSize(GLFWwindow *window, int *width, int *height)
    Retrieves the size of the content area of the specified window.
    +
    void glfwSetWindowSizeLimits(GLFWwindow *window, int minwidth, int minheight, int maxwidth, int maxheight)
    Sets the size limits of the specified window.
    +
    void(* GLFWwindowiconifyfun)(GLFWwindow *, int)
    The function signature for window iconify/restore callbacks.
    Definition: glfw3.h:1285
    +
    int glfwGetInputMode(GLFWwindow *window, int mode)
    Returns the value of an input option for the specified window.
    +
    int height
    Definition: glfw3.h:1548
    +
    GLFWwindowrefreshfun glfwSetWindowRefreshCallback(GLFWwindow *window, GLFWwindowrefreshfun cbfun)
    Sets the refresh callback for the specified window.
    +
    GLFWwindowposfun glfwSetWindowPosCallback(GLFWwindow *window, GLFWwindowposfun cbfun)
    Sets the position callback for the specified window.
    +
    const char * glfwGetJoystickGUID(int jid)
    Returns the SDL comaptible GUID of the specified joystick.
    +
    void glfwGetWindowPos(GLFWwindow *window, int *xpos, int *ypos)
    Retrieves the position of the content area of the specified window.
    +
    void * glfwGetJoystickUserPointer(int jid)
    Returns the user pointer of the specified joystick.
    +
    void(* GLFWcharmodsfun)(GLFWwindow *, unsigned int, int)
    The function signature for Unicode character with modifiers callbacks.
    Definition: glfw3.h:1474
    +
    int glfwGetKeyScancode(int key)
    Returns the platform-specific scancode of the specified key.
    +
    int blueBits
    Definition: glfw3.h:1557
    +
    unsigned char * pixels
    Definition: glfw3.h:1614
    +
    void(* GLFWmonitorfun)(GLFWmonitor *, int)
    The function signature for monitor configuration callbacks.
    Definition: glfw3.h:1508
    +
    void * glfwGetWindowUserPointer(GLFWwindow *window)
    Returns the user pointer of the specified window.
    +
    const GLFWvidmode * glfwGetVideoModes(GLFWmonitor *monitor, int *count)
    Returns the available video modes for the specified monitor.
    +
    const GLFWgammaramp * glfwGetGammaRamp(GLFWmonitor *monitor)
    Returns the current gamma ramp for the specified monitor.
    +
    void glfwIconifyWindow(GLFWwindow *window)
    Iconifies the specified window.
    +
    GLFWerrorfun glfwSetErrorCallback(GLFWerrorfun cbfun)
    Sets the error callback.
    +
    double glfwGetTime(void)
    Returns the value of the GLFW timer.
    +
    GLFWwindowiconifyfun glfwSetWindowIconifyCallback(GLFWwindow *window, GLFWwindowiconifyfun cbfun)
    Sets the iconify callback for the specified window.
    +
    int glfwGetError(const char **description)
    Returns and clears the last error for the calling thread.
    +
    void glfwSetCursorPos(GLFWwindow *window, double xpos, double ypos)
    Sets the position of the cursor, relative to the content area of the window.
    +
    int width
    Definition: glfw3.h:1545
    +
    const char * glfwGetVersionString(void)
    Returns a string describing the compile-time configuration.
    +
    GLFWwindowsizefun glfwSetWindowSizeCallback(GLFWwindow *window, GLFWwindowsizefun cbfun)
    Sets the size callback for the specified window.
    +
    const char * glfwGetJoystickName(int jid)
    Returns the name of the specified joystick.
    +
    struct GLFWimage GLFWimage
    Image data.
    +
    void glfwWaitEvents(void)
    Waits until events are queued and processes them.
    +
    int height
    Definition: glfw3.h:1611
    +
    GLFWkeyfun glfwSetKeyCallback(GLFWwindow *window, GLFWkeyfun cbfun)
    Sets the key callback.
    +
    const char * glfwGetClipboardString(GLFWwindow *window)
    Returns the contents of the clipboard as a string.
    +
    void(* GLFWdropfun)(GLFWwindow *, int, const char **)
    The function signature for file drop callbacks.
    Definition: glfw3.h:1491
    +
    const float * glfwGetJoystickAxes(int jid, int *count)
    Returns the values of all axes of the specified joystick.
    +
    void * glfwGetMonitorUserPointer(GLFWmonitor *monitor)
    Returns the user pointer of the specified monitor.
    +
    GLFWglproc glfwGetProcAddress(const char *procname)
    Returns the address of the specified function for the current context.
    +
    const char * glfwGetKeyName(int key, int scancode)
    Returns the layout-specific name of the specified printable key.
    +
    void glfwSetWindowAttrib(GLFWwindow *window, int attrib, int value)
    Sets an attribute of the specified window.
    +
    void glfwGetCursorPos(GLFWwindow *window, double *xpos, double *ypos)
    Retrieves the position of the cursor relative to the content area of the window.
    +
    void glfwMaximizeWindow(GLFWwindow *window)
    Maximizes the specified window.
    +
    void(* GLFWkeyfun)(GLFWwindow *, int, int, int, int)
    The function signature for keyboard key callbacks.
    Definition: glfw3.h:1434
    +
    int refreshRate
    Definition: glfw3.h:1560
    +
    unsigned short * red
    Definition: glfw3.h:1579
    +
    int glfwGetGamepadState(int jid, GLFWgamepadstate *state)
    Retrieves the state of the specified joystick remapped as a gamepad.
    +
    void(* GLFWmousebuttonfun)(GLFWwindow *, int, int, int)
    The function signature for mouse button callbacks.
    Definition: glfw3.h:1360
    +
    VkResult glfwCreateWindowSurface(VkInstance instance, GLFWwindow *window, const VkAllocationCallbacks *allocator, VkSurfaceKHR *surface)
    Creates a Vulkan surface for the specified window.
    +
    GLFWdropfun glfwSetDropCallback(GLFWwindow *window, GLFWdropfun cbfun)
    Sets the file drop callback.
    +
    void(* GLFWcharfun)(GLFWwindow *, unsigned int)
    The function signature for Unicode character callbacks.
    Definition: glfw3.h:1451
    +
    int glfwJoystickIsGamepad(int jid)
    Returns whether the specified joystick has a gamepad mapping.
    +
    void glfwSetCursor(GLFWwindow *window, GLFWcursor *cursor)
    Sets the cursor for the window.
    +
    GLFWmonitor ** glfwGetMonitors(int *count)
    Returns the currently connected monitors.
    +
    void glfwDestroyWindow(GLFWwindow *window)
    Destroys the specified window and its context.
    +
    void glfwSetMonitorUserPointer(GLFWmonitor *monitor, void *pointer)
    Sets the user pointer of the specified monitor.
    +
    GLFWcursorposfun glfwSetCursorPosCallback(GLFWwindow *window, GLFWcursorposfun cbfun)
    Sets the cursor position callback.
    +
    unsigned short * green
    Definition: glfw3.h:1582
    +
    int glfwUpdateGamepadMappings(const char *string)
    Adds the specified SDL_GameControllerDB gamepad mappings.
    +
    GLFWcharfun glfwSetCharCallback(GLFWwindow *window, GLFWcharfun cbfun)
    Sets the Unicode character callback.
    +
    int glfwJoystickPresent(int jid)
    Returns whether the specified joystick is present.
    +
    void(* GLFWvkproc)(void)
    Vulkan API function pointer type.
    Definition: glfw3.h:1129
    +
    const char * glfwGetGamepadName(int jid)
    Returns the human-readable gamepad name for the specified joystick.
    +
    void glfwSetWindowTitle(GLFWwindow *window, const char *title)
    Sets the title of the specified window.
    +
    struct GLFWmonitor GLFWmonitor
    Opaque monitor object.
    Definition: glfw3.h:1141
    +
    struct GLFWwindow GLFWwindow
    Opaque window object.
    Definition: glfw3.h:1153
    +
    void glfwGetMonitorPhysicalSize(GLFWmonitor *monitor, int *widthMM, int *heightMM)
    Returns the physical size of the monitor.
    +
    void glfwShowWindow(GLFWwindow *window)
    Makes the specified window visible.
    +
    void glfwSetWindowSize(GLFWwindow *window, int width, int height)
    Sets the size of the content area of the specified window.
    +
    int greenBits
    Definition: glfw3.h:1554
    +
    GLFWcursor * glfwCreateCursor(const GLFWimage *image, int xhot, int yhot)
    Creates a custom cursor.
    +
    void glfwDestroyCursor(GLFWcursor *cursor)
    Destroys a cursor.
    +
    void glfwRequestWindowAttention(GLFWwindow *window)
    Requests user attention to the specified window.
    +
    void glfwSwapBuffers(GLFWwindow *window)
    Swaps the front and back buffers of the specified window.
    +
    void glfwSetGamma(GLFWmonitor *monitor, float gamma)
    Generates a gamma ramp and sets it for the specified monitor.
    +
    const unsigned char * glfwGetJoystickButtons(int jid, int *count)
    Returns the state of all buttons of the specified joystick.
    +
    void glfwGetMonitorWorkarea(GLFWmonitor *monitor, int *xpos, int *ypos, int *width, int *height)
    Retrives the work area of the monitor.
    +
    void glfwSetInputMode(GLFWwindow *window, int mode, int value)
    Sets an input option for the specified window.
    +
    int glfwRawMouseMotionSupported(void)
    Returns whether raw mouse motion is supported.
    +
    const GLFWvidmode * glfwGetVideoMode(GLFWmonitor *monitor)
    Returns the current mode of the specified monitor.
    +
    void glfwSetClipboardString(GLFWwindow *window, const char *string)
    Sets the clipboard to the specified string.
    +
    void glfwGetWindowFrameSize(GLFWwindow *window, int *left, int *top, int *right, int *bottom)
    Retrieves the size of the frame of the window.
    +
    void(* GLFWcursorposfun)(GLFWwindow *, double, double)
    The function signature for cursor position callbacks.
    Definition: glfw3.h:1379
    +
    void glfwRestoreWindow(GLFWwindow *window)
    Restores the specified window.
    +
    int glfwGetMouseButton(GLFWwindow *window, int button)
    Returns the last reported state of a mouse button for the specified window.
    +
    void glfwWindowHintString(int hint, const char *value)
    Sets the specified window hint to the desired value.
    +
    void glfwGetWindowContentScale(GLFWwindow *window, float *xscale, float *yscale)
    Retrieves the content scale for the specified window.
    +
    void(* GLFWwindowcontentscalefun)(GLFWwindow *, float, float)
    The function signature for window content scale callbacks.
    Definition: glfw3.h:1339
    +
    void glfwGetMonitorContentScale(GLFWmonitor *monitor, float *xscale, float *yscale)
    Retrieves the content scale for the specified monitor.
    +
    void(* GLFWwindowsizefun)(GLFWwindow *, int, int)
    The function signature for window resize callbacks.
    Definition: glfw3.h:1218
    +
    void glfwSetWindowMonitor(GLFWwindow *window, GLFWmonitor *monitor, int xpos, int ypos, int width, int height, int refreshRate)
    Sets the mode, monitor, video mode and placement of a window.
    +
    void glfwSetTime(double time)
    Sets the GLFW timer.
    +
    void glfwFocusWindow(GLFWwindow *window)
    Brings the specified window to front and sets input focus.
    +
    struct GLFWgammaramp GLFWgammaramp
    Gamma ramp.
    +
    void glfwInitHint(int hint, int value)
    Sets the specified init hint to the desired value.
    +
    GLFWwindow * glfwCreateWindow(int width, int height, const char *title, GLFWmonitor *monitor, GLFWwindow *share)
    Creates a window and its associated context.
    +
    unsigned int size
    Definition: glfw3.h:1588
    +
    void glfwSetWindowUserPointer(GLFWwindow *window, void *pointer)
    Sets the user pointer of the specified window.
    +
    void glfwSetWindowShouldClose(GLFWwindow *window, int value)
    Sets the close flag of the specified window.
    +
    GLFWvkproc glfwGetInstanceProcAddress(VkInstance instance, const char *procname)
    Returns the address of the specified Vulkan instance function.
    +
    void glfwPostEmptyEvent(void)
    Posts an empty event to the event queue.
    +
    void glfwWaitEventsTimeout(double timeout)
    Waits with timeout until events are queued and processes them.
    +
    unsigned char buttons[15]
    Definition: glfw3.h:1633
    +
    GLFWframebuffersizefun glfwSetFramebufferSizeCallback(GLFWwindow *window, GLFWframebuffersizefun cbfun)
    Sets the framebuffer resize callback for the specified window.
    +
    void(* GLFWframebuffersizefun)(GLFWwindow *, int, int)
    The function signature for framebuffer resize callbacks.
    Definition: glfw3.h:1321
    +
    GLFWwindowcontentscalefun glfwSetWindowContentScaleCallback(GLFWwindow *window, GLFWwindowcontentscalefun cbfun)
    Sets the window content scale callback for the specified window.
    +
    GLFWjoystickfun glfwSetJoystickCallback(GLFWjoystickfun cbfun)
    Sets the joystick configuration callback.
    +
    int glfwGetPhysicalDevicePresentationSupport(VkInstance instance, VkPhysicalDevice device, uint32_t queuefamily)
    Returns whether the specified queue family can present images.
    +
    void(* GLFWwindowposfun)(GLFWwindow *, int, int)
    The function signature for window position callbacks.
    Definition: glfw3.h:1200
    +
    const unsigned char * glfwGetJoystickHats(int jid, int *count)
    Returns the state of all hats of the specified joystick.
    +
    void glfwPollEvents(void)
    Processes all pending events.
    +
    float glfwGetWindowOpacity(GLFWwindow *window)
    Returns the opacity of the whole window.
    +
    struct GLFWgamepadstate GLFWgamepadstate
    Gamepad input state.
    +
    uint64_t glfwGetTimerValue(void)
    Returns the current value of the raw timer.
    +
    void glfwHideWindow(GLFWwindow *window)
    Hides the specified window.
    +
    GLFWwindow * glfwGetCurrentContext(void)
    Returns the window whose context is current on the calling thread.
    +
    void glfwSetGammaRamp(GLFWmonitor *monitor, const GLFWgammaramp *ramp)
    Sets the current gamma ramp for the specified monitor.
    +
    uint64_t glfwGetTimerFrequency(void)
    Returns the frequency, in Hz, of the raw timer.
    +
    GLFWcursorenterfun glfwSetCursorEnterCallback(GLFWwindow *window, GLFWcursorenterfun cbfun)
    Sets the cursor enter/exit callback.
    +
    int width
    Definition: glfw3.h:1608
    +
    GLFWmonitor * glfwGetWindowMonitor(GLFWwindow *window)
    Returns the monitor that the window uses for full screen mode.
    +
    GLFWmousebuttonfun glfwSetMouseButtonCallback(GLFWwindow *window, GLFWmousebuttonfun cbfun)
    Sets the mouse button callback.
    +
    GLFWmonitor * glfwGetPrimaryMonitor(void)
    Returns the primary monitor.
    +
    int glfwGetKey(GLFWwindow *window, int key)
    Returns the last reported state of a keyboard key for the specified window.
    +
    void glfwMakeContextCurrent(GLFWwindow *window)
    Makes the context of the specified window current for the calling thread.
    +
    Gamma ramp.
    Definition: glfw3.h:1575
    +
    GLFWwindowclosefun glfwSetWindowCloseCallback(GLFWwindow *window, GLFWwindowclosefun cbfun)
    Sets the close callback for the specified window.
    +
    void(* GLFWjoystickfun)(int, int)
    The function signature for joystick configuration callbacks.
    Definition: glfw3.h:1526
    +
    GLFWscrollfun glfwSetScrollCallback(GLFWwindow *window, GLFWscrollfun cbfun)
    Sets the scroll callback.
    +
    unsigned short * blue
    Definition: glfw3.h:1585
    +
    Video mode type.
    Definition: glfw3.h:1541
    +
    GLFWwindowmaximizefun glfwSetWindowMaximizeCallback(GLFWwindow *window, GLFWwindowmaximizefun cbfun)
    Sets the maximize callback for the specified window.
    +
    int glfwVulkanSupported(void)
    Returns whether the Vulkan loader and an ICD have been found.
    +
    struct GLFWcursor GLFWcursor
    Opaque cursor object.
    Definition: glfw3.h:1165
    +
    void glfwSetWindowPos(GLFWwindow *window, int xpos, int ypos)
    Sets the position of the content area of the specified window.
    +
    int glfwExtensionSupported(const char *extension)
    Returns whether the specified extension is available.
    +
    void glfwGetFramebufferSize(GLFWwindow *window, int *width, int *height)
    Retrieves the size of the framebuffer of the specified window.
    +
    void(* GLFWwindowclosefun)(GLFWwindow *)
    The function signature for window close callbacks.
    Definition: glfw3.h:1234
    +
    void glfwWindowHint(int hint, int value)
    Sets the specified window hint to the desired value.
    +
    GLFWcursor * glfwCreateStandardCursor(int shape)
    Creates a cursor with a standard shape.
    +
    void glfwSwapInterval(int interval)
    Sets the swap interval for the current context.
    +
    GLFWcharmodsfun glfwSetCharModsCallback(GLFWwindow *window, GLFWcharmodsfun cbfun)
    Sets the Unicode character with modifiers callback.
    +
    const char ** glfwGetRequiredInstanceExtensions(uint32_t *count)
    Returns the Vulkan instance extensions required by GLFW.
    +
    void(* GLFWcursorenterfun)(GLFWwindow *, int)
    The function signature for cursor enter/leave callbacks.
    Definition: glfw3.h:1396
    +
    int glfwInit(void)
    Initializes the GLFW library.
    +
    Image data.
    Definition: glfw3.h:1604
    +
    void glfwSetJoystickUserPointer(int jid, void *pointer)
    Sets the user pointer of the specified joystick.
    +
    void(* GLFWscrollfun)(GLFWwindow *, double, double)
    The function signature for scroll callbacks.
    Definition: glfw3.h:1413
    +
    void glfwGetMonitorPos(GLFWmonitor *monitor, int *xpos, int *ypos)
    Returns the position of the monitor's viewport on the virtual screen.
    +
    void(* GLFWwindowmaximizefun)(GLFWwindow *, int)
    The function signature for window maximize/restore callbacks.
    Definition: glfw3.h:1303
    +
    void glfwSetWindowOpacity(GLFWwindow *window, float opacity)
    Sets the opacity of the whole window.
    +
    struct GLFWvidmode GLFWvidmode
    Video mode type.
    +
    void glfwDefaultWindowHints(void)
    Resets all window hints to their default values.
    +
    float axes[6]
    Definition: glfw3.h:1637
    +
    GLFWwindowfocusfun glfwSetWindowFocusCallback(GLFWwindow *window, GLFWwindowfocusfun cbfun)
    Sets the focus callback for the specified window.
    +
    void glfwTerminate(void)
    Terminates the GLFW library.
    +
    void glfwSetWindowIcon(GLFWwindow *window, int count, const GLFWimage *images)
    Sets the icon for the specified window.
    +
    GLFWmonitorfun glfwSetMonitorCallback(GLFWmonitorfun cbfun)
    Sets the monitor configuration callback.
    +
    void(* GLFWwindowrefreshfun)(GLFWwindow *)
    The function signature for window content refresh callbacks.
    Definition: glfw3.h:1250
    +
    void(* GLFWglproc)(void)
    Client API function pointer type.
    Definition: glfw3.h:1115
    +
    const char * glfwGetMonitorName(GLFWmonitor *monitor)
    Returns the name of the specified monitor.
    +
    void(* GLFWerrorfun)(int, const char *)
    The function signature for error callbacks.
    Definition: glfw3.h:1181
    +
    void glfwSetWindowAspectRatio(GLFWwindow *window, int numer, int denom)
    Sets the aspect ratio of the specified window.
    +
    int glfwWindowShouldClose(GLFWwindow *window)
    Checks the close flag of the specified window.
    +
    int glfwGetWindowAttrib(GLFWwindow *window, int attrib)
    Returns an attribute of the specified window.
    +
    void(* GLFWwindowfocusfun)(GLFWwindow *, int)
    The function signature for window focus/defocus callbacks.
    Definition: glfw3.h:1267
    diff --git a/ref/glfw/docs/html/glfw3native_8h.html b/ref/glfw/docs/html/glfw3native_8h.html index 2cc8d0e2..b8fc4039 100644 --- a/ref/glfw/docs/html/glfw3native_8h.html +++ b/ref/glfw/docs/html/glfw3native_8h.html @@ -3,7 +3,7 @@ - + GLFW: glfw3native.h File Reference @@ -11,9 +11,6 @@ - @@ -21,51 +18,31 @@
    - + - - + + + +
    @@ -92,10 +69,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
    glfw3native.h File Reference
    - -

    The header of the native access functions. -More...

    - +

    Description

    +

    This is the header file of the native access functions. See Native access for more information.

    +

    Go to the source code of this file.

    + + + + + + @@ -148,15 +130,6 @@ Functions - - - - - - - - - @@ -166,13 +139,20 @@ Functions + + + + + + + + +

    @@ -133,6 +109,12 @@ Functions

    Window glfwGetX11Window (GLFWwindow *window)
     Returns the Window of the specified window. More...
     
    void glfwSetX11SelectionString (const char *string)
     Sets the current primary selection to the specified string. More...
     
    const char * glfwGetX11SelectionString (void)
     Returns the contents of the current primary selection as a string. More...
     
    GLXContext glfwGetGLXContext (GLFWwindow *window)
     Returns the GLXContext of the specified window. More...
     
    struct wl_surface * glfwGetWaylandWindow (GLFWwindow *window)
     Returns the main struct wl_surface* of the specified window. More...
     
    MirConnection * glfwGetMirDisplay (void)
     Returns the MirConnection* used by GLFW. More...
     
    int glfwGetMirMonitor (GLFWmonitor *monitor)
     Returns the Mir output ID of the specified monitor. More...
     
    MirSurface * glfwGetMirWindow (GLFWwindow *window)
     Returns the MirSurface* of the specified window. More...
     
    EGLDisplay glfwGetEGLDisplay (void)
     Returns the EGLDisplay used by GLFW. More...
     
    EGLSurface glfwGetEGLSurface (GLFWwindow *window)
     Returns the EGLSurface of the specified window. More...
     
    int glfwGetOSMesaColorBuffer (GLFWwindow *window, int *width, int *height, int *format, void **buffer)
     Retrieves the color buffer associated with the specified window. More...
     
    int glfwGetOSMesaDepthBuffer (GLFWwindow *window, int *width, int *height, int *bytesPerValue, void **buffer)
     Retrieves the depth buffer associated with the specified window. More...
     
    OSMesaContext glfwGetOSMesaContext (GLFWwindow *window)
     Returns the OSMesaContext of the specified window. More...
     
    -

    Detailed Description

    -

    This is the header file of the native access functions. See Native access for more information.

    -
    +
    diff --git a/ref/glfw/docs/html/glfw3native_8h_source.html b/ref/glfw/docs/html/glfw3native_8h_source.html index 659e5f9b..74b1491a 100644 --- a/ref/glfw/docs/html/glfw3native_8h_source.html +++ b/ref/glfw/docs/html/glfw3native_8h_source.html @@ -3,7 +3,7 @@ - + GLFW: glfw3native.h Source File @@ -11,9 +11,6 @@ - @@ -21,51 +18,31 @@
    - + - - + + + +
    @@ -90,34 +67,36 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
    glfw3native.h
    -Go to the documentation of this file.
    1 /*************************************************************************
    2  * GLFW 3.2 - www.glfw.org
    3  * A library for OpenGL, window and input
    4  *------------------------------------------------------------------------
    5  * Copyright (c) 2002-2006 Marcus Geelnard
    6  * Copyright (c) 2006-2016 Camilla Berglund <elmindreda@glfw.org>
    7  *
    8  * This software is provided 'as-is', without any express or implied
    9  * warranty. In no event will the authors be held liable for any damages
    10  * arising from the use of this software.
    11  *
    12  * Permission is granted to anyone to use this software for any purpose,
    13  * including commercial applications, and to alter it and redistribute it
    14  * freely, subject to the following restrictions:
    15  *
    16  * 1. The origin of this software must not be misrepresented; you must not
    17  * claim that you wrote the original software. If you use this software
    18  * in a product, an acknowledgment in the product documentation would
    19  * be appreciated but is not required.
    20  *
    21  * 2. Altered source versions must be plainly marked as such, and must not
    22  * be misrepresented as being the original software.
    23  *
    24  * 3. This notice may not be removed or altered from any source
    25  * distribution.
    26  *
    27  *************************************************************************/
    28 
    29 #ifndef _glfw3_native_h_
    30 #define _glfw3_native_h_
    31 
    32 #ifdef __cplusplus
    33 extern "C" {
    34 #endif
    35 
    36 
    37 /*************************************************************************
    38  * Doxygen documentation
    39  *************************************************************************/
    40 
    79 /*************************************************************************
    80  * System headers and types
    81  *************************************************************************/
    82 
    83 #if defined(GLFW_EXPOSE_NATIVE_WIN32)
    84  // This is a workaround for the fact that glfw3.h needs to export APIENTRY (for
    85  // example to allow applications to correctly declare a GL_ARB_debug_output
    86  // callback) but windows.h assumes no one will define APIENTRY before it does
    87  #undef APIENTRY
    88  #include <windows.h>
    89 #elif defined(GLFW_EXPOSE_NATIVE_COCOA)
    90  #include <ApplicationServices/ApplicationServices.h>
    91  #if defined(__OBJC__)
    92  #import <Cocoa/Cocoa.h>
    93  #else
    94  typedef void* id;
    95  #endif
    96 #elif defined(GLFW_EXPOSE_NATIVE_X11)
    97  #include <X11/Xlib.h>
    98  #include <X11/extensions/Xrandr.h>
    99 #elif defined(GLFW_EXPOSE_NATIVE_WAYLAND)
    100  #include <wayland-client.h>
    101 #elif defined(GLFW_EXPOSE_NATIVE_MIR)
    102  #include <mir_toolkit/mir_client_library.h>
    103 #endif
    104 
    105 #if defined(GLFW_EXPOSE_NATIVE_WGL)
    106  /* WGL is declared by windows.h */
    107 #endif
    108 #if defined(GLFW_EXPOSE_NATIVE_NSGL)
    109  /* NSGL is declared by Cocoa.h */
    110 #endif
    111 #if defined(GLFW_EXPOSE_NATIVE_GLX)
    112  #include <GL/glx.h>
    113 #endif
    114 #if defined(GLFW_EXPOSE_NATIVE_EGL)
    115  #include <EGL/egl.h>
    116 #endif
    117 
    118 
    119 /*************************************************************************
    120  * Functions
    121  *************************************************************************/
    122 
    123 #if defined(GLFW_EXPOSE_NATIVE_WIN32)
    124 
    137 GLFWAPI const char* glfwGetWin32Adapter(GLFWmonitor* monitor);
    138 
    152 GLFWAPI const char* glfwGetWin32Monitor(GLFWmonitor* monitor);
    153 
    166 GLFWAPI HWND glfwGetWin32Window(GLFWwindow* window);
    167 #endif
    168 
    169 #if defined(GLFW_EXPOSE_NATIVE_WGL)
    170 
    182 GLFWAPI HGLRC glfwGetWGLContext(GLFWwindow* window);
    183 #endif
    184 
    185 #if defined(GLFW_EXPOSE_NATIVE_COCOA)
    186 
    198 GLFWAPI CGDirectDisplayID glfwGetCocoaMonitor(GLFWmonitor* monitor);
    199 
    212 GLFWAPI id glfwGetCocoaWindow(GLFWwindow* window);
    213 #endif
    214 
    215 #if defined(GLFW_EXPOSE_NATIVE_NSGL)
    216 
    228 GLFWAPI id glfwGetNSGLContext(GLFWwindow* window);
    229 #endif
    230 
    231 #if defined(GLFW_EXPOSE_NATIVE_X11)
    232 
    244 GLFWAPI Display* glfwGetX11Display(void);
    245 
    258 GLFWAPI RRCrtc glfwGetX11Adapter(GLFWmonitor* monitor);
    259 
    272 GLFWAPI RROutput glfwGetX11Monitor(GLFWmonitor* monitor);
    273 
    286 GLFWAPI Window glfwGetX11Window(GLFWwindow* window);
    287 #endif
    288 
    289 #if defined(GLFW_EXPOSE_NATIVE_GLX)
    290 
    302 GLFWAPI GLXContext glfwGetGLXContext(GLFWwindow* window);
    303 
    316 GLFWAPI GLXWindow glfwGetGLXWindow(GLFWwindow* window);
    317 #endif
    318 
    319 #if defined(GLFW_EXPOSE_NATIVE_WAYLAND)
    320 
    332 GLFWAPI struct wl_display* glfwGetWaylandDisplay(void);
    333 
    346 GLFWAPI struct wl_output* glfwGetWaylandMonitor(GLFWmonitor* monitor);
    347 
    360 GLFWAPI struct wl_surface* glfwGetWaylandWindow(GLFWwindow* window);
    361 #endif
    362 
    363 #if defined(GLFW_EXPOSE_NATIVE_MIR)
    364 
    376 GLFWAPI MirConnection* glfwGetMirDisplay(void);
    377 
    390 GLFWAPI int glfwGetMirMonitor(GLFWmonitor* monitor);
    391 
    404 GLFWAPI MirSurface* glfwGetMirWindow(GLFWwindow* window);
    405 #endif
    406 
    407 #if defined(GLFW_EXPOSE_NATIVE_EGL)
    408 
    420 GLFWAPI EGLDisplay glfwGetEGLDisplay(void);
    421 
    434 GLFWAPI EGLContext glfwGetEGLContext(GLFWwindow* window);
    435 
    448 GLFWAPI EGLSurface glfwGetEGLSurface(GLFWwindow* window);
    449 #endif
    450 
    451 #ifdef __cplusplus
    452 }
    453 #endif
    454 
    455 #endif /* _glfw3_native_h_ */
    456 
    HGLRC glfwGetWGLContext(GLFWwindow *window)
    Returns the HGLRC of the specified window.
    -
    id glfwGetCocoaWindow(GLFWwindow *window)
    Returns the NSWindow of the specified window.
    -
    EGLSurface glfwGetEGLSurface(GLFWwindow *window)
    Returns the EGLSurface of the specified window.
    -
    MirSurface * glfwGetMirWindow(GLFWwindow *window)
    Returns the MirSurface* of the specified window.
    -
    const char * glfwGetWin32Monitor(GLFWmonitor *monitor)
    Returns the display device name of the specified monitor.
    -
    CGDirectDisplayID glfwGetCocoaMonitor(GLFWmonitor *monitor)
    Returns the CGDirectDisplayID of the specified monitor.
    -
    RRCrtc glfwGetX11Adapter(GLFWmonitor *monitor)
    Returns the RRCrtc of the specified monitor.
    -
    MirConnection * glfwGetMirDisplay(void)
    Returns the MirConnection* used by GLFW.
    -
    HWND glfwGetWin32Window(GLFWwindow *window)
    Returns the HWND of the specified window.
    -
    id glfwGetNSGLContext(GLFWwindow *window)
    Returns the NSOpenGLContext of the specified window.
    -
    EGLDisplay glfwGetEGLDisplay(void)
    Returns the EGLDisplay used by GLFW.
    -
    Window glfwGetX11Window(GLFWwindow *window)
    Returns the Window of the specified window.
    -
    struct GLFWmonitor GLFWmonitor
    Opaque monitor object.
    Definition: glfw3.h:777
    -
    struct GLFWwindow GLFWwindow
    Opaque window object.
    Definition: glfw3.h:789
    -
    Display * glfwGetX11Display(void)
    Returns the Display used by GLFW.
    -
    GLXContext glfwGetGLXContext(GLFWwindow *window)
    Returns the GLXContext of the specified window.
    -
    EGLContext glfwGetEGLContext(GLFWwindow *window)
    Returns the EGLContext of the specified window.
    -
    const char * glfwGetWin32Adapter(GLFWmonitor *monitor)
    Returns the adapter device name of the specified monitor.
    -
    GLXWindow glfwGetGLXWindow(GLFWwindow *window)
    Returns the GLXWindow of the specified window.
    -
    struct wl_output * glfwGetWaylandMonitor(GLFWmonitor *monitor)
    Returns the struct wl_output* of the specified monitor.
    -
    struct wl_display * glfwGetWaylandDisplay(void)
    Returns the struct wl_display* used by GLFW.
    -
    RROutput glfwGetX11Monitor(GLFWmonitor *monitor)
    Returns the RROutput of the specified monitor.
    -
    int glfwGetMirMonitor(GLFWmonitor *monitor)
    Returns the Mir output ID of the specified monitor.
    -
    struct wl_surface * glfwGetWaylandWindow(GLFWwindow *window)
    Returns the main struct wl_surface* of the specified window.
    +Go to the documentation of this file.
    1 /*************************************************************************
    2  * GLFW 3.3 - www.glfw.org
    3  * A library for OpenGL, window and input
    4  *------------------------------------------------------------------------
    5  * Copyright (c) 2002-2006 Marcus Geelnard
    6  * Copyright (c) 2006-2018 Camilla Löwy <elmindreda@glfw.org>
    7  *
    8  * This software is provided 'as-is', without any express or implied
    9  * warranty. In no event will the authors be held liable for any damages
    10  * arising from the use of this software.
    11  *
    12  * Permission is granted to anyone to use this software for any purpose,
    13  * including commercial applications, and to alter it and redistribute it
    14  * freely, subject to the following restrictions:
    15  *
    16  * 1. The origin of this software must not be misrepresented; you must not
    17  * claim that you wrote the original software. If you use this software
    18  * in a product, an acknowledgment in the product documentation would
    19  * be appreciated but is not required.
    20  *
    21  * 2. Altered source versions must be plainly marked as such, and must not
    22  * be misrepresented as being the original software.
    23  *
    24  * 3. This notice may not be removed or altered from any source
    25  * distribution.
    26  *
    27  *************************************************************************/
    28 
    29 #ifndef _glfw3_native_h_
    30 #define _glfw3_native_h_
    31 
    32 #ifdef __cplusplus
    33 extern "C" {
    34 #endif
    35 
    36 
    37 /*************************************************************************
    38  * Doxygen documentation
    39  *************************************************************************/
    40 
    80 /*************************************************************************
    81  * System headers and types
    82  *************************************************************************/
    83 
    84 #if defined(GLFW_EXPOSE_NATIVE_WIN32) || defined(GLFW_EXPOSE_NATIVE_WGL)
    85  // This is a workaround for the fact that glfw3.h needs to export APIENTRY (for
    86  // example to allow applications to correctly declare a GL_ARB_debug_output
    87  // callback) but windows.h assumes no one will define APIENTRY before it does
    88  #if defined(GLFW_APIENTRY_DEFINED)
    89  #undef APIENTRY
    90  #undef GLFW_APIENTRY_DEFINED
    91  #endif
    92  #include <windows.h>
    93 #elif defined(GLFW_EXPOSE_NATIVE_COCOA) || defined(GLFW_EXPOSE_NATIVE_NSGL)
    94  #if defined(__OBJC__)
    95  #import <Cocoa/Cocoa.h>
    96  #else
    97  #include <ApplicationServices/ApplicationServices.h>
    98  typedef void* id;
    99  #endif
    100 #elif defined(GLFW_EXPOSE_NATIVE_X11) || defined(GLFW_EXPOSE_NATIVE_GLX)
    101  #include <X11/Xlib.h>
    102  #include <X11/extensions/Xrandr.h>
    103 #elif defined(GLFW_EXPOSE_NATIVE_WAYLAND)
    104  #include <wayland-client.h>
    105 #endif
    106 
    107 #if defined(GLFW_EXPOSE_NATIVE_WGL)
    108  /* WGL is declared by windows.h */
    109 #endif
    110 #if defined(GLFW_EXPOSE_NATIVE_NSGL)
    111  /* NSGL is declared by Cocoa.h */
    112 #endif
    113 #if defined(GLFW_EXPOSE_NATIVE_GLX)
    114  #include <GL/glx.h>
    115 #endif
    116 #if defined(GLFW_EXPOSE_NATIVE_EGL)
    117  #include <EGL/egl.h>
    118 #endif
    119 #if defined(GLFW_EXPOSE_NATIVE_OSMESA)
    120  #include <GL/osmesa.h>
    121 #endif
    122 
    123 
    124 /*************************************************************************
    125  * Functions
    126  *************************************************************************/
    127 
    128 #if defined(GLFW_EXPOSE_NATIVE_WIN32)
    129 
    142 GLFWAPI const char* glfwGetWin32Adapter(GLFWmonitor* monitor);
    143 
    157 GLFWAPI const char* glfwGetWin32Monitor(GLFWmonitor* monitor);
    158 
    171 GLFWAPI HWND glfwGetWin32Window(GLFWwindow* window);
    172 #endif
    173 
    174 #if defined(GLFW_EXPOSE_NATIVE_WGL)
    175 
    187 GLFWAPI HGLRC glfwGetWGLContext(GLFWwindow* window);
    188 #endif
    189 
    190 #if defined(GLFW_EXPOSE_NATIVE_COCOA)
    191 
    203 GLFWAPI CGDirectDisplayID glfwGetCocoaMonitor(GLFWmonitor* monitor);
    204 
    217 GLFWAPI id glfwGetCocoaWindow(GLFWwindow* window);
    218 #endif
    219 
    220 #if defined(GLFW_EXPOSE_NATIVE_NSGL)
    221 
    233 GLFWAPI id glfwGetNSGLContext(GLFWwindow* window);
    234 #endif
    235 
    236 #if defined(GLFW_EXPOSE_NATIVE_X11)
    237 
    249 GLFWAPI Display* glfwGetX11Display(void);
    250 
    263 GLFWAPI RRCrtc glfwGetX11Adapter(GLFWmonitor* monitor);
    264 
    277 GLFWAPI RROutput glfwGetX11Monitor(GLFWmonitor* monitor);
    278 
    291 GLFWAPI Window glfwGetX11Window(GLFWwindow* window);
    292 
    313 GLFWAPI void glfwSetX11SelectionString(const char* string);
    314 
    341 GLFWAPI const char* glfwGetX11SelectionString(void);
    342 #endif
    343 
    344 #if defined(GLFW_EXPOSE_NATIVE_GLX)
    345 
    357 GLFWAPI GLXContext glfwGetGLXContext(GLFWwindow* window);
    358 
    371 GLFWAPI GLXWindow glfwGetGLXWindow(GLFWwindow* window);
    372 #endif
    373 
    374 #if defined(GLFW_EXPOSE_NATIVE_WAYLAND)
    375 
    387 GLFWAPI struct wl_display* glfwGetWaylandDisplay(void);
    388 
    401 GLFWAPI struct wl_output* glfwGetWaylandMonitor(GLFWmonitor* monitor);
    402 
    415 GLFWAPI struct wl_surface* glfwGetWaylandWindow(GLFWwindow* window);
    416 #endif
    417 
    418 #if defined(GLFW_EXPOSE_NATIVE_EGL)
    419 
    431 GLFWAPI EGLDisplay glfwGetEGLDisplay(void);
    432 
    445 GLFWAPI EGLContext glfwGetEGLContext(GLFWwindow* window);
    446 
    459 GLFWAPI EGLSurface glfwGetEGLSurface(GLFWwindow* window);
    460 #endif
    461 
    462 #if defined(GLFW_EXPOSE_NATIVE_OSMESA)
    463 
    482 GLFWAPI int glfwGetOSMesaColorBuffer(GLFWwindow* window, int* width, int* height, int* format, void** buffer);
    483 
    503 GLFWAPI int glfwGetOSMesaDepthBuffer(GLFWwindow* window, int* width, int* height, int* bytesPerValue, void** buffer);
    504 
    517 GLFWAPI OSMesaContext glfwGetOSMesaContext(GLFWwindow* window);
    518 #endif
    519 
    520 #ifdef __cplusplus
    521 }
    522 #endif
    523 
    524 #endif /* _glfw3_native_h_ */
    525 
    HGLRC glfwGetWGLContext(GLFWwindow *window)
    Returns the HGLRC of the specified window.
    +
    id glfwGetCocoaWindow(GLFWwindow *window)
    Returns the NSWindow of the specified window.
    +
    EGLSurface glfwGetEGLSurface(GLFWwindow *window)
    Returns the EGLSurface of the specified window.
    +
    OSMesaContext glfwGetOSMesaContext(GLFWwindow *window)
    Returns the OSMesaContext of the specified window.
    +
    int glfwGetOSMesaDepthBuffer(GLFWwindow *window, int *width, int *height, int *bytesPerValue, void **buffer)
    Retrieves the depth buffer associated with the specified window.
    +
    int glfwGetOSMesaColorBuffer(GLFWwindow *window, int *width, int *height, int *format, void **buffer)
    Retrieves the color buffer associated with the specified window.
    +
    const char * glfwGetWin32Monitor(GLFWmonitor *monitor)
    Returns the display device name of the specified monitor.
    +
    CGDirectDisplayID glfwGetCocoaMonitor(GLFWmonitor *monitor)
    Returns the CGDirectDisplayID of the specified monitor.
    +
    RRCrtc glfwGetX11Adapter(GLFWmonitor *monitor)
    Returns the RRCrtc of the specified monitor.
    +
    HWND glfwGetWin32Window(GLFWwindow *window)
    Returns the HWND of the specified window.
    +
    id glfwGetNSGLContext(GLFWwindow *window)
    Returns the NSOpenGLContext of the specified window.
    +
    EGLDisplay glfwGetEGLDisplay(void)
    Returns the EGLDisplay used by GLFW.
    +
    Window glfwGetX11Window(GLFWwindow *window)
    Returns the Window of the specified window.
    +
    struct GLFWmonitor GLFWmonitor
    Opaque monitor object.
    Definition: glfw3.h:1141
    +
    struct GLFWwindow GLFWwindow
    Opaque window object.
    Definition: glfw3.h:1153
    +
    Display * glfwGetX11Display(void)
    Returns the Display used by GLFW.
    +
    const char * glfwGetX11SelectionString(void)
    Returns the contents of the current primary selection as a string.
    +
    GLXContext glfwGetGLXContext(GLFWwindow *window)
    Returns the GLXContext of the specified window.
    +
    EGLContext glfwGetEGLContext(GLFWwindow *window)
    Returns the EGLContext of the specified window.
    +
    void glfwSetX11SelectionString(const char *string)
    Sets the current primary selection to the specified string.
    +
    const char * glfwGetWin32Adapter(GLFWmonitor *monitor)
    Returns the adapter device name of the specified monitor.
    +
    GLXWindow glfwGetGLXWindow(GLFWwindow *window)
    Returns the GLXWindow of the specified window.
    +
    struct wl_output * glfwGetWaylandMonitor(GLFWmonitor *monitor)
    Returns the struct wl_output* of the specified monitor.
    +
    struct wl_display * glfwGetWaylandDisplay(void)
    Returns the struct wl_display* used by GLFW.
    +
    RROutput glfwGetX11Monitor(GLFWmonitor *monitor)
    Returns the RROutput of the specified monitor.
    +
    struct wl_surface * glfwGetWaylandWindow(GLFWwindow *window)
    Returns the main struct wl_surface* of the specified window.
    diff --git a/ref/glfw/docs/html/globals.html b/ref/glfw/docs/html/globals.html deleted file mode 100644 index 505cc36c..00000000 --- a/ref/glfw/docs/html/globals.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
    - -

    - a -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_b.html b/ref/glfw/docs/html/globals_b.html deleted file mode 100644 index a5379162..00000000 --- a/ref/glfw/docs/html/globals_b.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
    - -

    - b -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_c.html b/ref/glfw/docs/html/globals_c.html deleted file mode 100644 index 9aadf20b..00000000 --- a/ref/glfw/docs/html/globals_c.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
    - -

    - c -

      -
    • GLFW_CLIENT_API -: glfw3.h -
    • -
    • GLFW_CONNECTED -: glfw3.h -
    • -
    • GLFW_CONTEXT_CREATION_API -: glfw3.h -
    • -
    • GLFW_CONTEXT_NO_ERROR -: glfw3.h -
    • -
    • GLFW_CONTEXT_RELEASE_BEHAVIOR -: glfw3.h -
    • -
    • GLFW_CONTEXT_REVISION -: glfw3.h -
    • -
    • GLFW_CONTEXT_ROBUSTNESS -: glfw3.h -
    • -
    • GLFW_CONTEXT_VERSION_MAJOR -: glfw3.h -
    • -
    • GLFW_CONTEXT_VERSION_MINOR -: glfw3.h -
    • -
    • GLFW_CROSSHAIR_CURSOR -: glfw3.h -
    • -
    • GLFW_CURSOR -: glfw3.h -
    • -
    • GLFW_CURSOR_DISABLED -: glfw3.h -
    • -
    • GLFW_CURSOR_HIDDEN -: glfw3.h -
    • -
    • GLFW_CURSOR_NORMAL -: glfw3.h -
    • -
    • glfwCreateCursor() -: glfw3.h -
    • -
    • glfwCreateStandardCursor() -: glfw3.h -
    • -
    • glfwCreateWindow() -: glfw3.h -
    • -
    • glfwCreateWindowSurface() -: glfw3.h -
    • -
    -
    - - - diff --git a/ref/glfw/docs/html/globals_d.html b/ref/glfw/docs/html/globals_d.html deleted file mode 100644 index b871be7b..00000000 --- a/ref/glfw/docs/html/globals_d.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
    - -

    - d -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_defs.html b/ref/glfw/docs/html/globals_defs.html deleted file mode 100644 index b296b99b..00000000 --- a/ref/glfw/docs/html/globals_defs.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -  - -

    - a -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_defs_b.html b/ref/glfw/docs/html/globals_defs_b.html deleted file mode 100644 index 2e3fc573..00000000 --- a/ref/glfw/docs/html/globals_defs_b.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -  - -

    - b -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_defs_c.html b/ref/glfw/docs/html/globals_defs_c.html deleted file mode 100644 index 515a84bb..00000000 --- a/ref/glfw/docs/html/globals_defs_c.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -  - -

    - c -

      -
    • GLFW_CLIENT_API -: glfw3.h -
    • -
    • GLFW_CONNECTED -: glfw3.h -
    • -
    • GLFW_CONTEXT_CREATION_API -: glfw3.h -
    • -
    • GLFW_CONTEXT_NO_ERROR -: glfw3.h -
    • -
    • GLFW_CONTEXT_RELEASE_BEHAVIOR -: glfw3.h -
    • -
    • GLFW_CONTEXT_REVISION -: glfw3.h -
    • -
    • GLFW_CONTEXT_ROBUSTNESS -: glfw3.h -
    • -
    • GLFW_CONTEXT_VERSION_MAJOR -: glfw3.h -
    • -
    • GLFW_CONTEXT_VERSION_MINOR -: glfw3.h -
    • -
    • GLFW_CROSSHAIR_CURSOR -: glfw3.h -
    • -
    • GLFW_CURSOR -: glfw3.h -
    • -
    • GLFW_CURSOR_DISABLED -: glfw3.h -
    • -
    • GLFW_CURSOR_HIDDEN -: glfw3.h -
    • -
    • GLFW_CURSOR_NORMAL -: glfw3.h -
    • -
    -
    - - - diff --git a/ref/glfw/docs/html/globals_defs_d.html b/ref/glfw/docs/html/globals_defs_d.html deleted file mode 100644 index 41e5e3c1..00000000 --- a/ref/glfw/docs/html/globals_defs_d.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -  - -

    - d -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_defs_e.html b/ref/glfw/docs/html/globals_defs_e.html deleted file mode 100644 index 085ce994..00000000 --- a/ref/glfw/docs/html/globals_defs_e.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -  - -

    - e -

      -
    • GLFW_EGL_CONTEXT_API -: glfw3.h -
    • -
    -
    - - - diff --git a/ref/glfw/docs/html/globals_defs_f.html b/ref/glfw/docs/html/globals_defs_f.html deleted file mode 100644 index 367ad6b1..00000000 --- a/ref/glfw/docs/html/globals_defs_f.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -  - -

    - f -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_defs_g.html b/ref/glfw/docs/html/globals_defs_g.html deleted file mode 100644 index c43b2125..00000000 --- a/ref/glfw/docs/html/globals_defs_g.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -  - -

    - g -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_defs_h.html b/ref/glfw/docs/html/globals_defs_h.html deleted file mode 100644 index 11e61269..00000000 --- a/ref/glfw/docs/html/globals_defs_h.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -  - -

    - h -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_defs_i.html b/ref/glfw/docs/html/globals_defs_i.html deleted file mode 100644 index c7644665..00000000 --- a/ref/glfw/docs/html/globals_defs_i.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -  - -

    - i -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_defs_j.html b/ref/glfw/docs/html/globals_defs_j.html deleted file mode 100644 index d4aa6b4e..00000000 --- a/ref/glfw/docs/html/globals_defs_j.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -  - -

    - j -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_defs_k.html b/ref/glfw/docs/html/globals_defs_k.html deleted file mode 100644 index d4b3d3c2..00000000 --- a/ref/glfw/docs/html/globals_defs_k.html +++ /dev/null @@ -1,494 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -  - -

    - k -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_defs_l.html b/ref/glfw/docs/html/globals_defs_l.html deleted file mode 100644 index be21e39e..00000000 --- a/ref/glfw/docs/html/globals_defs_l.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -  - -

    - l -

      -
    • GLFW_LOSE_CONTEXT_ON_RESET -: glfw3.h -
    • -
    -
    - - - diff --git a/ref/glfw/docs/html/globals_defs_m.html b/ref/glfw/docs/html/globals_defs_m.html deleted file mode 100644 index 543c5a51..00000000 --- a/ref/glfw/docs/html/globals_defs_m.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -  - -

    - m -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_defs_n.html b/ref/glfw/docs/html/globals_defs_n.html deleted file mode 100644 index fbbaf73e..00000000 --- a/ref/glfw/docs/html/globals_defs_n.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -  - -

    - n -

      -
    • GLFW_NATIVE_CONTEXT_API -: glfw3.h -
    • -
    • GLFW_NO_API -: glfw3.h -
    • -
    • GLFW_NO_CURRENT_CONTEXT -: glfw3.h -
    • -
    • GLFW_NO_RESET_NOTIFICATION -: glfw3.h -
    • -
    • GLFW_NO_ROBUSTNESS -: glfw3.h -
    • -
    • GLFW_NO_WINDOW_CONTEXT -: glfw3.h -
    • -
    • GLFW_NOT_INITIALIZED -: glfw3.h -
    • -
    -
    - - - diff --git a/ref/glfw/docs/html/globals_defs_o.html b/ref/glfw/docs/html/globals_defs_o.html deleted file mode 100644 index ceda2152..00000000 --- a/ref/glfw/docs/html/globals_defs_o.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -  - -

    - o -

      -
    • GLFW_OPENGL_ANY_PROFILE -: glfw3.h -
    • -
    • GLFW_OPENGL_API -: glfw3.h -
    • -
    • GLFW_OPENGL_COMPAT_PROFILE -: glfw3.h -
    • -
    • GLFW_OPENGL_CORE_PROFILE -: glfw3.h -
    • -
    • GLFW_OPENGL_DEBUG_CONTEXT -: glfw3.h -
    • -
    • GLFW_OPENGL_ES_API -: glfw3.h -
    • -
    • GLFW_OPENGL_FORWARD_COMPAT -: glfw3.h -
    • -
    • GLFW_OPENGL_PROFILE -: glfw3.h -
    • -
    • GLFW_OUT_OF_MEMORY -: glfw3.h -
    • -
    -
    - - - diff --git a/ref/glfw/docs/html/globals_defs_p.html b/ref/glfw/docs/html/globals_defs_p.html deleted file mode 100644 index e635f05a..00000000 --- a/ref/glfw/docs/html/globals_defs_p.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -  - -

    - p -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_defs_r.html b/ref/glfw/docs/html/globals_defs_r.html deleted file mode 100644 index 582e7283..00000000 --- a/ref/glfw/docs/html/globals_defs_r.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -  - -

    - r -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_defs_s.html b/ref/glfw/docs/html/globals_defs_s.html deleted file mode 100644 index 00e62f39..00000000 --- a/ref/glfw/docs/html/globals_defs_s.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -  - -

    - s -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_defs_t.html b/ref/glfw/docs/html/globals_defs_t.html deleted file mode 100644 index d1077610..00000000 --- a/ref/glfw/docs/html/globals_defs_t.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -  - -

    - t -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_defs_v.html b/ref/glfw/docs/html/globals_defs_v.html deleted file mode 100644 index 9c4c15ca..00000000 --- a/ref/glfw/docs/html/globals_defs_v.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -  - -

    - v -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_e.html b/ref/glfw/docs/html/globals_e.html deleted file mode 100644 index 5dc432b1..00000000 --- a/ref/glfw/docs/html/globals_e.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
    - -

    - e -

      -
    • GLFW_EGL_CONTEXT_API -: glfw3.h -
    • -
    • glfwExtensionSupported() -: glfw3.h -
    • -
    -
    - - - diff --git a/ref/glfw/docs/html/globals_f.html b/ref/glfw/docs/html/globals_f.html deleted file mode 100644 index dce88b78..00000000 --- a/ref/glfw/docs/html/globals_f.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
    - -

    - f -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_func.html b/ref/glfw/docs/html/globals_func.html deleted file mode 100644 index 26df0a70..00000000 --- a/ref/glfw/docs/html/globals_func.html +++ /dev/null @@ -1,530 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -  - -

    - c -

      -
    • glfwCreateCursor() -: glfw3.h -
    • -
    • glfwCreateStandardCursor() -: glfw3.h -
    • -
    • glfwCreateWindow() -: glfw3.h -
    • -
    • glfwCreateWindowSurface() -: glfw3.h -
    • -
    - - -

    - d -

      -
    • glfwDefaultWindowHints() -: glfw3.h -
    • -
    • glfwDestroyCursor() -: glfw3.h -
    • -
    • glfwDestroyWindow() -: glfw3.h -
    • -
    - - -

    - e -

      -
    • glfwExtensionSupported() -: glfw3.h -
    • -
    - - -

    - f -

    - - -

    - g -

    - - -

    - h -

    - - -

    - i -

    - - -

    - j -

      -
    • glfwJoystickPresent() -: glfw3.h -
    • -
    - - -

    - m -

      -
    • glfwMakeContextCurrent() -: glfw3.h -
    • -
    • glfwMaximizeWindow() -: glfw3.h -
    • -
    - - -

    - p -

    - - -

    - r -

      -
    • glfwRestoreWindow() -: glfw3.h -
    • -
    - - -

    - s -

      -
    • glfwSetCharCallback() -: glfw3.h -
    • -
    • glfwSetCharModsCallback() -: glfw3.h -
    • -
    • glfwSetClipboardString() -: glfw3.h -
    • -
    • glfwSetCursor() -: glfw3.h -
    • -
    • glfwSetCursorEnterCallback() -: glfw3.h -
    • -
    • glfwSetCursorPos() -: glfw3.h -
    • -
    • glfwSetCursorPosCallback() -: glfw3.h -
    • -
    • glfwSetDropCallback() -: glfw3.h -
    • -
    • glfwSetErrorCallback() -: glfw3.h -
    • -
    • glfwSetFramebufferSizeCallback() -: glfw3.h -
    • -
    • glfwSetGamma() -: glfw3.h -
    • -
    • glfwSetGammaRamp() -: glfw3.h -
    • -
    • glfwSetInputMode() -: glfw3.h -
    • -
    • glfwSetJoystickCallback() -: glfw3.h -
    • -
    • glfwSetKeyCallback() -: glfw3.h -
    • -
    • glfwSetMonitorCallback() -: glfw3.h -
    • -
    • glfwSetMouseButtonCallback() -: glfw3.h -
    • -
    • glfwSetScrollCallback() -: glfw3.h -
    • -
    • glfwSetTime() -: glfw3.h -
    • -
    • glfwSetWindowAspectRatio() -: glfw3.h -
    • -
    • glfwSetWindowCloseCallback() -: glfw3.h -
    • -
    • glfwSetWindowFocusCallback() -: glfw3.h -
    • -
    • glfwSetWindowIcon() -: glfw3.h -
    • -
    • glfwSetWindowIconifyCallback() -: glfw3.h -
    • -
    • glfwSetWindowMonitor() -: glfw3.h -
    • -
    • glfwSetWindowPos() -: glfw3.h -
    • -
    • glfwSetWindowPosCallback() -: glfw3.h -
    • -
    • glfwSetWindowRefreshCallback() -: glfw3.h -
    • -
    • glfwSetWindowShouldClose() -: glfw3.h -
    • -
    • glfwSetWindowSize() -: glfw3.h -
    • -
    • glfwSetWindowSizeCallback() -: glfw3.h -
    • -
    • glfwSetWindowSizeLimits() -: glfw3.h -
    • -
    • glfwSetWindowTitle() -: glfw3.h -
    • -
    • glfwSetWindowUserPointer() -: glfw3.h -
    • -
    • glfwShowWindow() -: glfw3.h -
    • -
    • glfwSwapBuffers() -: glfw3.h -
    • -
    • glfwSwapInterval() -: glfw3.h -
    • -
    - - -

    - t -

    - - -

    - v -

      -
    • glfwVulkanSupported() -: glfw3.h -
    • -
    - - -

    - w -

      -
    • glfwWaitEvents() -: glfw3.h -
    • -
    • glfwWaitEventsTimeout() -: glfw3.h -
    • -
    • glfwWindowHint() -: glfw3.h -
    • -
    • glfwWindowShouldClose() -: glfw3.h -
    • -
    -
    - - - diff --git a/ref/glfw/docs/html/globals_g.html b/ref/glfw/docs/html/globals_g.html deleted file mode 100644 index 869528e7..00000000 --- a/ref/glfw/docs/html/globals_g.html +++ /dev/null @@ -1,378 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
    - -

    - g -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_h.html b/ref/glfw/docs/html/globals_h.html deleted file mode 100644 index d592add4..00000000 --- a/ref/glfw/docs/html/globals_h.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
    - -

    - h -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_i.html b/ref/glfw/docs/html/globals_i.html deleted file mode 100644 index 1ca490dc..00000000 --- a/ref/glfw/docs/html/globals_i.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
    - -

    - i -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_j.html b/ref/glfw/docs/html/globals_j.html deleted file mode 100644 index 4612118b..00000000 --- a/ref/glfw/docs/html/globals_j.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
    - -

    - j -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_k.html b/ref/glfw/docs/html/globals_k.html deleted file mode 100644 index 9772072b..00000000 --- a/ref/glfw/docs/html/globals_k.html +++ /dev/null @@ -1,495 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
    - -

    - k -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_l.html b/ref/glfw/docs/html/globals_l.html deleted file mode 100644 index df41f2c3..00000000 --- a/ref/glfw/docs/html/globals_l.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
    - -

    - l -

      -
    • GLFW_LOSE_CONTEXT_ON_RESET -: glfw3.h -
    • -
    -
    - - - diff --git a/ref/glfw/docs/html/globals_m.html b/ref/glfw/docs/html/globals_m.html deleted file mode 100644 index 3d774e69..00000000 --- a/ref/glfw/docs/html/globals_m.html +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
    - -

    - m -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_n.html b/ref/glfw/docs/html/globals_n.html deleted file mode 100644 index a271f2c7..00000000 --- a/ref/glfw/docs/html/globals_n.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
    - -

    - n -

      -
    • GLFW_NATIVE_CONTEXT_API -: glfw3.h -
    • -
    • GLFW_NO_API -: glfw3.h -
    • -
    • GLFW_NO_CURRENT_CONTEXT -: glfw3.h -
    • -
    • GLFW_NO_RESET_NOTIFICATION -: glfw3.h -
    • -
    • GLFW_NO_ROBUSTNESS -: glfw3.h -
    • -
    • GLFW_NO_WINDOW_CONTEXT -: glfw3.h -
    • -
    • GLFW_NOT_INITIALIZED -: glfw3.h -
    • -
    -
    - - - diff --git a/ref/glfw/docs/html/globals_o.html b/ref/glfw/docs/html/globals_o.html deleted file mode 100644 index bf3044ba..00000000 --- a/ref/glfw/docs/html/globals_o.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
    - -

    - o -

      -
    • GLFW_OPENGL_ANY_PROFILE -: glfw3.h -
    • -
    • GLFW_OPENGL_API -: glfw3.h -
    • -
    • GLFW_OPENGL_COMPAT_PROFILE -: glfw3.h -
    • -
    • GLFW_OPENGL_CORE_PROFILE -: glfw3.h -
    • -
    • GLFW_OPENGL_DEBUG_CONTEXT -: glfw3.h -
    • -
    • GLFW_OPENGL_ES_API -: glfw3.h -
    • -
    • GLFW_OPENGL_FORWARD_COMPAT -: glfw3.h -
    • -
    • GLFW_OPENGL_PROFILE -: glfw3.h -
    • -
    • GLFW_OUT_OF_MEMORY -: glfw3.h -
    • -
    -
    - - - diff --git a/ref/glfw/docs/html/globals_p.html b/ref/glfw/docs/html/globals_p.html deleted file mode 100644 index 4c539620..00000000 --- a/ref/glfw/docs/html/globals_p.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
    - -

    - p -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_r.html b/ref/glfw/docs/html/globals_r.html deleted file mode 100644 index c3ac301a..00000000 --- a/ref/glfw/docs/html/globals_r.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
    - -

    - r -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_s.html b/ref/glfw/docs/html/globals_s.html deleted file mode 100644 index 59cec9d3..00000000 --- a/ref/glfw/docs/html/globals_s.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
    - -

    - s -

      -
    • GLFW_SAMPLES -: glfw3.h -
    • -
    • GLFW_SRGB_CAPABLE -: glfw3.h -
    • -
    • GLFW_STENCIL_BITS -: glfw3.h -
    • -
    • GLFW_STEREO -: glfw3.h -
    • -
    • GLFW_STICKY_KEYS -: glfw3.h -
    • -
    • GLFW_STICKY_MOUSE_BUTTONS -: glfw3.h -
    • -
    • glfwSetCharCallback() -: glfw3.h -
    • -
    • glfwSetCharModsCallback() -: glfw3.h -
    • -
    • glfwSetClipboardString() -: glfw3.h -
    • -
    • glfwSetCursor() -: glfw3.h -
    • -
    • glfwSetCursorEnterCallback() -: glfw3.h -
    • -
    • glfwSetCursorPos() -: glfw3.h -
    • -
    • glfwSetCursorPosCallback() -: glfw3.h -
    • -
    • glfwSetDropCallback() -: glfw3.h -
    • -
    • glfwSetErrorCallback() -: glfw3.h -
    • -
    • glfwSetFramebufferSizeCallback() -: glfw3.h -
    • -
    • glfwSetGamma() -: glfw3.h -
    • -
    • glfwSetGammaRamp() -: glfw3.h -
    • -
    • glfwSetInputMode() -: glfw3.h -
    • -
    • glfwSetJoystickCallback() -: glfw3.h -
    • -
    • glfwSetKeyCallback() -: glfw3.h -
    • -
    • glfwSetMonitorCallback() -: glfw3.h -
    • -
    • glfwSetMouseButtonCallback() -: glfw3.h -
    • -
    • glfwSetScrollCallback() -: glfw3.h -
    • -
    • glfwSetTime() -: glfw3.h -
    • -
    • glfwSetWindowAspectRatio() -: glfw3.h -
    • -
    • glfwSetWindowCloseCallback() -: glfw3.h -
    • -
    • glfwSetWindowFocusCallback() -: glfw3.h -
    • -
    • glfwSetWindowIcon() -: glfw3.h -
    • -
    • glfwSetWindowIconifyCallback() -: glfw3.h -
    • -
    • glfwSetWindowMonitor() -: glfw3.h -
    • -
    • glfwSetWindowPos() -: glfw3.h -
    • -
    • glfwSetWindowPosCallback() -: glfw3.h -
    • -
    • glfwSetWindowRefreshCallback() -: glfw3.h -
    • -
    • glfwSetWindowShouldClose() -: glfw3.h -
    • -
    • glfwSetWindowSize() -: glfw3.h -
    • -
    • glfwSetWindowSizeCallback() -: glfw3.h -
    • -
    • glfwSetWindowSizeLimits() -: glfw3.h -
    • -
    • glfwSetWindowTitle() -: glfw3.h -
    • -
    • glfwSetWindowUserPointer() -: glfw3.h -
    • -
    • glfwShowWindow() -: glfw3.h -
    • -
    • glfwSwapBuffers() -: glfw3.h -
    • -
    • glfwSwapInterval() -: glfw3.h -
    • -
    -
    - - - diff --git a/ref/glfw/docs/html/globals_t.html b/ref/glfw/docs/html/globals_t.html deleted file mode 100644 index 9f85daf7..00000000 --- a/ref/glfw/docs/html/globals_t.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
    - -

    - t -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_type.html b/ref/glfw/docs/html/globals_type.html deleted file mode 100644 index 30dffe4e..00000000 --- a/ref/glfw/docs/html/globals_type.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    - - - diff --git a/ref/glfw/docs/html/globals_v.html b/ref/glfw/docs/html/globals_v.html deleted file mode 100644 index 87ed5860..00000000 --- a/ref/glfw/docs/html/globals_v.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
    - -

    - v -

    -
    - - - diff --git a/ref/glfw/docs/html/globals_w.html b/ref/glfw/docs/html/globals_w.html deleted file mode 100644 index 695cb02f..00000000 --- a/ref/glfw/docs/html/globals_w.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - -GLFW: Globals - - - - - - - - - - - -
    - - - - - - - - -
    - -
    -
    - - -
    - -
    - -
    -
    Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
    - -

    - w -

      -
    • glfwWaitEvents() -: glfw3.h -
    • -
    • glfwWaitEventsTimeout() -: glfw3.h -
    • -
    • glfwWindowHint() -: glfw3.h -
    • -
    • glfwWindowShouldClose() -: glfw3.h -
    • -
    -
    - - - diff --git a/ref/glfw/docs/html/group__buttons.html b/ref/glfw/docs/html/group__buttons.html index 1947b7e0..d70cfed3 100644 --- a/ref/glfw/docs/html/group__buttons.html +++ b/ref/glfw/docs/html/group__buttons.html @@ -3,7 +3,7 @@ - + GLFW: Mouse buttons @@ -11,9 +11,6 @@ - @@ -21,45 +18,31 @@
    - + - + + + +
    Mouse buttons
    +

    Description

    +

    See mouse button input for how these are used.

    @@ -110,10 +95,10 @@ Macros

    Macros

    #define GLFW_MOUSE_BUTTON_MIDDLE   GLFW_MOUSE_BUTTON_3
     
    -

    Detailed Description

    -

    See mouse button input for how these are used.

    Macro Definition Documentation

    - + +

    ◆ GLFW_MOUSE_BUTTON_1

    +
    @@ -125,7 +110,9 @@ Macros - + +

    ◆ GLFW_MOUSE_BUTTON_2

    +
    @@ -137,7 +124,9 @@ Macros - + +

    ◆ GLFW_MOUSE_BUTTON_3

    +
    @@ -149,7 +138,9 @@ Macros - + +

    ◆ GLFW_MOUSE_BUTTON_4

    +
    @@ -161,7 +152,9 @@ Macros - + +

    ◆ GLFW_MOUSE_BUTTON_5

    +
    @@ -173,7 +166,9 @@ Macros - + +

    ◆ GLFW_MOUSE_BUTTON_6

    +
    @@ -185,7 +180,9 @@ Macros - + +

    ◆ GLFW_MOUSE_BUTTON_7

    +
    @@ -197,7 +194,9 @@ Macros - + +

    ◆ GLFW_MOUSE_BUTTON_8

    +
    @@ -209,7 +208,9 @@ Macros - + +

    ◆ GLFW_MOUSE_BUTTON_LAST

    +
    @@ -221,7 +222,9 @@ Macros - + +

    ◆ GLFW_MOUSE_BUTTON_LEFT

    +
    @@ -233,19 +236,9 @@ Macros - -
    -
    -
    - - - -
    #define GLFW_MOUSE_BUTTON_MIDDLE   GLFW_MOUSE_BUTTON_3
    -
    + +

    ◆ GLFW_MOUSE_BUTTON_RIGHT

    -
    -
    -
    @@ -255,12 +248,26 @@ Macros
    +
    +
    + +

    ◆ GLFW_MOUSE_BUTTON_MIDDLE

    + +
    +
    + + + + +
    #define GLFW_MOUSE_BUTTON_MIDDLE   GLFW_MOUSE_BUTTON_3
    +
    +
    diff --git a/ref/glfw/docs/html/group__context.html b/ref/glfw/docs/html/group__context.html index e4fff470..e0084bf2 100644 --- a/ref/glfw/docs/html/group__context.html +++ b/ref/glfw/docs/html/group__context.html @@ -3,7 +3,7 @@ - + GLFW: Context reference @@ -11,9 +11,6 @@ - @@ -21,45 +18,31 @@
    - + - + + + +
    Context reference
    +

    Description

    +

    This is the reference documentation for OpenGL and OpenGL ES context related functions. For more task-oriented information, see the Context guide.

    @@ -108,10 +93,10 @@ Functions

    Typedefs

     Returns the address of the specified function for the current context. More...
     
    -

    Detailed Description

    -

    This is the reference documentation for OpenGL and OpenGL ES context related functions. For more task-oriented information, see the Context guide.

    Typedef Documentation

    - + +

    ◆ GLFWglproc

    +
    @@ -123,13 +108,112 @@ Functions

    Generic function pointer used for returning client API function pointers without forcing a cast from a regular pointer.

    See also
    OpenGL and OpenGL ES extensions
    -glfwGetProcAddress
    +glfwGetProcAddress
    Since
    Added in version 3.0.

    Function Documentation

    - + +

    ◆ glfwMakeContextCurrent()

    + +
    +
    +
    + + + + + + + +
    void glfwMakeContextCurrent (GLFWwindowwindow)
    +
    +

    This function makes the OpenGL or OpenGL ES context of the specified window current on the calling thread. A context must only be made current on a single thread at a time and each thread can have only a single current context at a time.

    +

    When moving a context between threads, you must make it non-current on the old thread before making it current on the new one.

    +

    By default, making a context non-current implicitly forces a pipeline flush. On machines that support GL_KHR_context_flush_control, you can control whether a context performs this flush by setting the GLFW_CONTEXT_RELEASE_BEHAVIOR hint.

    +

    The specified window must have an OpenGL or OpenGL ES context. Specifying a window without a context will generate a GLFW_NO_WINDOW_CONTEXT error.

    +
    Parameters
    + + +
    [in]windowThe window whose context to make current, or NULL to detach the current context.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_NO_WINDOW_CONTEXT and GLFW_PLATFORM_ERROR.
    +
    Thread safety
    This function may be called from any thread.
    +
    See also
    Current context
    +
    +glfwGetCurrentContext
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ glfwGetCurrentContext()

    + +
    +
    + + + + + + + + +
    GLFWwindow* glfwGetCurrentContext (void )
    +
    +

    This function returns the window whose OpenGL or OpenGL ES context is current on the calling thread.

    +
    Returns
    The window whose context is current, or NULL if no window's context is current.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function may be called from any thread.
    +
    See also
    Current context
    +
    +glfwMakeContextCurrent
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ glfwSwapInterval()

    + +
    +
    + + + + + + + + +
    void glfwSwapInterval (int interval)
    +
    +

    This function sets the swap interval for the current OpenGL or OpenGL ES context, i.e. the number of screen updates to wait from the time glfwSwapBuffers was called before swapping the buffers and returning. This is sometimes called vertical synchronization, vertical retrace synchronization or just vsync.

    +

    A context that supports either of the WGL_EXT_swap_control_tear and GLX_EXT_swap_control_tear extensions also accepts negative swap intervals, which allows the driver to swap immediately even if a frame arrives a little bit late. You can check for these extensions with glfwExtensionSupported.

    +

    A context must be current on the calling thread. Calling this function without a current context will cause a GLFW_NO_CURRENT_CONTEXT error.

    +

    This function does not apply to Vulkan. If you are rendering with Vulkan, see the present mode of your swapchain instead.

    +
    Parameters
    + + +
    [in]intervalThe minimum number of screen updates to wait for until the buffers are swapped by glfwSwapBuffers.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_NO_CURRENT_CONTEXT and GLFW_PLATFORM_ERROR.
    +
    Remarks
    This function is not called during context creation, leaving the swap interval set to whatever is the default on that platform. This is done because some swap interval extensions used by GLFW do not allow the swap interval to be reset to zero once it has been set to a non-zero value.
    +
    +Some GPU drivers do not honor the requested swap interval, either because of a user setting that overrides the application's request or due to bugs in the driver.
    +
    Thread safety
    This function may be called from any thread.
    +
    See also
    Buffer swapping
    +
    +glfwSwapBuffers
    +
    Since
    Added in version 1.0.
    + +
    +
    + +

    ◆ glfwExtensionSupported()

    +
    @@ -157,36 +241,14 @@ Functions
    Thread safety
    This function may be called from any thread.
    See also
    OpenGL and OpenGL ES extensions
    -glfwGetProcAddress
    +glfwGetProcAddress
    Since
    Added in version 1.0.
    - -
    -
    -
    - - - - - - - -
    GLFWwindow* glfwGetCurrentContext (void )
    -
    -

    This function returns the window whose OpenGL or OpenGL ES context is current on the calling thread.

    -
    Returns
    The window whose context is current, or NULL if no window's context is current.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    -
    Thread safety
    This function may be called from any thread.
    -
    See also
    Current context
    -
    -glfwMakeContextCurrent
    -
    Since
    Added in version 3.0.
    + +

    ◆ glfwGetProcAddress()

    -
    -
    -
    @@ -217,73 +279,7 @@ This function may return a non-NULL address despite the associated
    Thread safety
    This function may be called from any thread.
    See also
    OpenGL and OpenGL ES extensions
    -glfwExtensionSupported
    -
    Since
    Added in version 1.0.
    - - - - -
    -
    -
    - - - - - - - -
    void glfwMakeContextCurrent (GLFWwindowwindow)
    -
    -

    This function makes the OpenGL or OpenGL ES context of the specified window current on the calling thread. A context can only be made current on a single thread at a time and each thread can have only a single current context at a time.

    -

    By default, making a context non-current implicitly forces a pipeline flush. On machines that support GL_KHR_context_flush_control, you can control whether a context performs this flush by setting the GLFW_CONTEXT_RELEASE_BEHAVIOR window hint.

    -

    The specified window must have an OpenGL or OpenGL ES context. Specifying a window without a context will generate a GLFW_NO_WINDOW_CONTEXT error.

    -
    Parameters
    - - -
    [in]windowThe window whose context to make current, or NULL to detach the current context.
    -
    -
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_NO_WINDOW_CONTEXT and GLFW_PLATFORM_ERROR.
    -
    Thread safety
    This function may be called from any thread.
    -
    See also
    Current context
    -
    -glfwGetCurrentContext
    -
    Since
    Added in version 3.0.
    - -
    -
    - -
    -
    - - - - - - - - -
    void glfwSwapInterval (int interval)
    -
    -

    This function sets the swap interval for the current OpenGL or OpenGL ES context, i.e. the number of screen updates to wait from the time glfwSwapBuffers was called before swapping the buffers and returning. This is sometimes called vertical synchronization, vertical retrace synchronization or just vsync.

    -

    Contexts that support either of the WGL_EXT_swap_control_tear and GLX_EXT_swap_control_tear extensions also accept negative swap intervals, which allow the driver to swap even if a frame arrives a little bit late. You can check for the presence of these extensions using glfwExtensionSupported. For more information about swap tearing, see the extension specifications.

    -

    A context must be current on the calling thread. Calling this function without a current context will cause a GLFW_NO_CURRENT_CONTEXT error.

    -

    This function does not apply to Vulkan. If you are rendering with Vulkan, see the present mode of your swapchain instead.

    -
    Parameters
    - - -
    [in]intervalThe minimum number of screen updates to wait for until the buffers are swapped by glfwSwapBuffers.
    -
    -
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_NO_CURRENT_CONTEXT and GLFW_PLATFORM_ERROR.
    -
    Remarks
    This function is not called during context creation, leaving the swap interval set to whatever is the default on that platform. This is done because some swap interval extensions used by GLFW do not allow the swap interval to be reset to zero once it has been set to a non-zero value.
    -
    -Some GPU drivers do not honor the requested swap interval, either because of a user setting that overrides the application's request or due to bugs in the driver.
    -
    Thread safety
    This function may be called from any thread.
    -
    See also
    Buffer swapping
    -
    -glfwSwapBuffers
    +glfwExtensionSupported
    Since
    Added in version 1.0.
    @@ -291,7 +287,7 @@ Some GPU drivers do not honor the requested swap interval, either because of a u
    diff --git a/ref/glfw/docs/html/group__errors.html b/ref/glfw/docs/html/group__errors.html index 16abcd07..c33628cf 100644 --- a/ref/glfw/docs/html/group__errors.html +++ b/ref/glfw/docs/html/group__errors.html @@ -3,7 +3,7 @@ - + GLFW: Error codes @@ -11,9 +11,6 @@ - @@ -21,45 +18,31 @@
    - + - + + + +
    +

    Description

    +

    See error handling for how these are used.

    + + + @@ -116,10 +104,107 @@ Macros

    Macros

    #define GLFW_NO_ERROR   0
     No error has occurred. More...
     
    #define GLFW_NOT_INITIALIZED   0x00010001
     GLFW has not been initialized. More...
     
     The specified window does not have an OpenGL or OpenGL ES context. More...
     
    -

    Detailed Description

    -

    See error handling for how these are used.

    Macro Definition Documentation

    - + +

    ◆ GLFW_NO_ERROR

    + +
    +
    + + + + +
    #define GLFW_NO_ERROR   0
    +
    +

    No error has occurred.

    +
    Analysis
    Yay.
    + +
    +
    + +

    ◆ GLFW_NOT_INITIALIZED

    + +
    +
    + + + + +
    #define GLFW_NOT_INITIALIZED   0x00010001
    +
    +

    This occurs if a GLFW function was called that must not be called unless the library is initialized.

    +
    Analysis
    Application programmer error. Initialize GLFW before calling any function that requires initialization.
    + +
    +
    + +

    ◆ GLFW_NO_CURRENT_CONTEXT

    + +
    +
    + + + + +
    #define GLFW_NO_CURRENT_CONTEXT   0x00010002
    +
    +

    This occurs if a GLFW function was called that needs and operates on the current OpenGL or OpenGL ES context but no context is current on the calling thread. One such function is glfwSwapInterval.

    +
    Analysis
    Application programmer error. Ensure a context is current before calling functions that require a current context.
    + +
    +
    + +

    ◆ GLFW_INVALID_ENUM

    + +
    +
    + + + + +
    #define GLFW_INVALID_ENUM   0x00010003
    +
    +

    One of the arguments to the function was an invalid enum value, for example requesting GLFW_RED_BITS with glfwGetWindowAttrib.

    +
    Analysis
    Application programmer error. Fix the offending call.
    + +
    +
    + +

    ◆ GLFW_INVALID_VALUE

    + +
    +
    + + + + +
    #define GLFW_INVALID_VALUE   0x00010004
    +
    +

    One of the arguments to the function was an invalid value, for example requesting a non-existent OpenGL or OpenGL ES version like 2.7.

    +

    Requesting a valid but unavailable OpenGL or OpenGL ES version will instead result in a GLFW_VERSION_UNAVAILABLE error.

    +
    Analysis
    Application programmer error. Fix the offending call.
    + +
    +
    + +

    ◆ GLFW_OUT_OF_MEMORY

    + +
    +
    + + + + +
    #define GLFW_OUT_OF_MEMORY   0x00010005
    +
    +

    A memory allocation failed.

    +
    Analysis
    A bug in GLFW or the underlying operating system. Report the bug to our issue tracker.
    + +
    +
    + +

    ◆ GLFW_API_UNAVAILABLE

    +
    @@ -130,11 +215,46 @@ Macros

    GLFW could not find support for the requested API on the system.

    Analysis
    The installed graphics driver does not support the requested API, or does not support it via the chosen context creation backend. Below are a few examples.
    -
    Some pre-installed Windows graphics drivers do not support OpenGL. AMD only supports OpenGL ES via EGL, while Nvidia and Intel only support it via a WGL or GLX extension. OS X does not provide OpenGL ES at all. The Mesa EGL, OpenGL and OpenGL ES libraries do not interface with the Nvidia binary driver. Older graphics drivers do not support Vulkan.
    +
    Some pre-installed Windows graphics drivers do not support OpenGL. AMD only supports OpenGL ES via EGL, while Nvidia and Intel only support it via a WGL or GLX extension. macOS does not provide OpenGL ES at all. The Mesa EGL, OpenGL and OpenGL ES libraries do not interface with the Nvidia binary driver. Older graphics drivers do not support Vulkan.
    - + +

    ◆ GLFW_VERSION_UNAVAILABLE

    + +
    +
    +
    + + + +
    #define GLFW_VERSION_UNAVAILABLE   0x00010007
    +
    +

    The requested OpenGL or OpenGL ES version (including any requested context or framebuffer hints) is not available on this machine.

    +
    Analysis
    The machine does not support your requirements. If your application is sufficiently flexible, downgrade your requirements and try again. Otherwise, inform the user that their machine does not match your requirements.
    +
    Future invalid OpenGL and OpenGL ES versions, for example OpenGL 4.8 if 5.0 comes out before the 4.x series gets that far, also fail with this error and not GLFW_INVALID_VALUE, because GLFW cannot know what future versions will exist.
    + +
    +
    + +

    ◆ GLFW_PLATFORM_ERROR

    + +
    +
    + + + + +
    #define GLFW_PLATFORM_ERROR   0x00010008
    +
    +

    A platform-specific error occurred that does not match any of the more specific categories.

    +
    Analysis
    A bug or configuration error in GLFW, the underlying operating system or its drivers, or a lack of required resources. Report the issue to our issue tracker.
    + +
    +
    + +

    ◆ GLFW_FORMAT_UNAVAILABLE

    +
    @@ -150,50 +270,9 @@ Macros - -
    -
    -
    - - - -
    #define GLFW_INVALID_ENUM   0x00010003
    -
    -

    One of the arguments to the function was an invalid enum value, for example requesting GLFW_RED_BITS with glfwGetWindowAttrib.

    -
    Analysis
    Application programmer error. Fix the offending call.
    + +

    ◆ GLFW_NO_WINDOW_CONTEXT

    -
    -
    - -
    -
    - - - - -
    #define GLFW_INVALID_VALUE   0x00010004
    -
    -

    One of the arguments to the function was an invalid value, for example requesting a non-existent OpenGL or OpenGL ES version like 2.7.

    -

    Requesting a valid but unavailable OpenGL or OpenGL ES version will instead result in a GLFW_VERSION_UNAVAILABLE error.

    -
    Analysis
    Application programmer error. Fix the offending call.
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_NO_CURRENT_CONTEXT   0x00010002
    -
    -

    This occurs if a GLFW function was called that needs and operates on the current OpenGL or OpenGL ES context but no context is current on the calling thread. One such function is glfwSwapInterval.

    -
    Analysis
    Application programmer error. Ensure a context is current before calling functions that require a current context.
    - -
    -
    -
    @@ -205,69 +284,12 @@ Macros

    A window that does not have an OpenGL or OpenGL ES context was passed to a function that requires it to have one.

    Analysis
    Application programmer error. Fix the offending call.
    - - - -
    -
    -
    - - - -
    #define GLFW_NOT_INITIALIZED   0x00010001
    -
    -

    This occurs if a GLFW function was called that must not be called unless the library is initialized.

    -
    Analysis
    Application programmer error. Initialize GLFW before calling any function that requires initialization.
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_OUT_OF_MEMORY   0x00010005
    -
    -

    A memory allocation failed.

    -
    Analysis
    A bug in GLFW or the underlying operating system. Report the bug to our issue tracker.
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_PLATFORM_ERROR   0x00010008
    -
    -

    A platform-specific error occurred that does not match any of the more specific categories.

    -
    Analysis
    A bug or configuration error in GLFW, the underlying operating system or its drivers, or a lack of required resources. Report the issue to our issue tracker.
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_VERSION_UNAVAILABLE   0x00010007
    -
    -

    The requested OpenGL or OpenGL ES version (including any requested context or framebuffer hints) is not available on this machine.

    -
    Analysis
    The machine does not support your requirements. If your application is sufficiently flexible, downgrade your requirements and try again. Otherwise, inform the user that their machine does not match your requirements.
    -
    Future invalid OpenGL and OpenGL ES versions, for example OpenGL 4.8 if 5.0 comes out before the 4.x series gets that far, also fail with this error and not GLFW_INVALID_VALUE, because GLFW cannot know what future versions will exist.
    -
    diff --git a/ref/glfw/docs/html/group__init.html b/ref/glfw/docs/html/group__init.html index 7e3eeec4..61a19351 100644 --- a/ref/glfw/docs/html/group__init.html +++ b/ref/glfw/docs/html/group__init.html @@ -3,7 +3,7 @@ - + GLFW: Initialization, version and error reference @@ -11,9 +11,6 @@ - @@ -21,45 +18,31 @@
    - + - + + + +
    Initialization, version and error reference
    +

    Description

    +

    This is the reference documentation for initialization and termination of the library, version management and error handling. For more task-oriented information, see the Introduction to the API.

    +

    Modules

     Error codes
     Error codes.
     
    + + + + + + + + + + + + + + + + +

    +Macros

    #define GLFW_TRUE   1
     One. More...
     
    #define GLFW_FALSE   0
     Zero. More...
     
    #define GLFW_JOYSTICK_HAT_BUTTONS   0x00050001
     Joystick hat buttons init hint. More...
     
    #define GLFW_COCOA_CHDIR_RESOURCES   0x00051001
     macOS specific init hint. More...
     
    #define GLFW_COCOA_MENUBAR   0x00051002
     macOS specific init hint. More...
     
    @@ -104,32 +109,26 @@ Functions + + + + + + -

    Typedefs

    typedef void(* GLFWerrorfun) (int, const char *)
    void glfwTerminate (void)
     Terminates the GLFW library. More...
     
    void glfwInitHint (int hint, int value)
     Sets the specified init hint to the desired value. More...
     
    void glfwGetVersion (int *major, int *minor, int *rev)
     Retrieves the version of the GLFW library. More...
     
    const char * glfwGetVersionString (void)
     Returns a string describing the compile-time configuration. More...
     
    int glfwGetError (const char **description)
     Returns and clears the last error for the calling thread. More...
     
    GLFWerrorfun glfwSetErrorCallback (GLFWerrorfun cbfun)
     Sets the error callback. More...
     
    - - - - - - - - - -

    -GLFW version macros

    #define GLFW_VERSION_MAJOR   3
     The major version number of the GLFW library. More...
     
    #define GLFW_VERSION_MINOR   2
     The minor version number of the GLFW library. More...
     
    #define GLFW_VERSION_REVISION   1
     The revision number of the GLFW library. More...
     
    -

    Detailed Description

    -

    This is the reference documentation for initialization and termination of the library, version management and error handling. For more task-oriented information, see the Introduction to the API.

    Macro Definition Documentation

    - + +

    ◆ GLFW_VERSION_MAJOR

    +
    @@ -142,12 +141,14 @@ GLFW version macros - + +

    ◆ GLFW_VERSION_MINOR

    +
    - +
    #define GLFW_VERSION_MINOR   2#define GLFW_VERSION_MINOR   3
    @@ -155,21 +156,100 @@ GLFW version macros
    - +
    #define GLFW_VERSION_REVISION   1#define GLFW_VERSION_REVISION   0

    This is incremented when a bug fix release is made that does not contain any API changes.

    +
    + + +

    ◆ GLFW_TRUE

    + +
    +
    + + + + +
    #define GLFW_TRUE   1
    +
    +

    This is only semantic sugar for the number 1. You can instead use 1 or true or _True or GL_TRUE or VK_TRUE or anything else that is equal to one.

    + +
    +
    + +

    ◆ GLFW_FALSE

    + +
    +
    + + + + +
    #define GLFW_FALSE   0
    +
    +

    This is only semantic sugar for the number 0. You can instead use 0 or false or _False or GL_FALSE or VK_FALSE or anything else that is equal to zero.

    + +
    +
    + +

    ◆ GLFW_JOYSTICK_HAT_BUTTONS

    + +
    +
    + + + + +
    #define GLFW_JOYSTICK_HAT_BUTTONS   0x00050001
    +
    +

    Joystick hat buttons init hint.

    + +
    +
    + +

    ◆ GLFW_COCOA_CHDIR_RESOURCES

    + +
    +
    + + + + +
    #define GLFW_COCOA_CHDIR_RESOURCES   0x00051001
    +
    +

    macOS specific init hint.

    + +
    +
    + +

    ◆ GLFW_COCOA_MENUBAR

    + +
    +
    + + + + +
    #define GLFW_COCOA_MENUBAR   0x00051002
    +
    +

    macOS specific init hint.

    +

    Typedef Documentation

    - + +

    ◆ GLFWerrorfun

    +
    @@ -188,13 +268,118 @@ GLFW version macros
    See also
    Error handling
    -glfwSetErrorCallback
    +glfwSetErrorCallback
    Since
    Added in version 3.0.

    Function Documentation

    - + +

    ◆ glfwInit()

    + +
    +
    +
    + + + + + + + +
    int glfwInit (void )
    +
    +

    This function initializes the GLFW library. Before most GLFW functions can be used, GLFW must be initialized, and before an application terminates GLFW should be terminated in order to free any resources allocated during or after initialization.

    +

    If this function fails, it calls glfwTerminate before returning. If it succeeds, you should call glfwTerminate before the application exits.

    +

    Additional calls to this function after successful initialization but before termination will return GLFW_TRUE immediately.

    +
    Returns
    GLFW_TRUE if successful, or GLFW_FALSE if an error occurred.
    +
    Errors
    Possible errors include GLFW_PLATFORM_ERROR.
    +
    Remarks
    macOS: This function will change the current directory of the application to the Contents/Resources subdirectory of the application's bundle, if present. This can be disabled with the GLFW_COCOA_CHDIR_RESOURCES init hint.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Initialization and termination
    +
    +glfwTerminate
    +
    Since
    Added in version 1.0.
    + +
    +
    + +

    ◆ glfwTerminate()

    + +
    +
    + + + + + + + + +
    void glfwTerminate (void )
    +
    +

    This function destroys all remaining windows and cursors, restores any modified gamma ramps and frees any other allocated resources. Once this function is called, you must again call glfwInit successfully before you will be able to use most GLFW functions.

    +

    If GLFW has been successfully initialized, this function should be called before the application exits. If initialization fails, there is no need to call this function, as it is called by glfwInit before it returns failure.

    +
    Errors
    Possible errors include GLFW_PLATFORM_ERROR.
    +
    Remarks
    This function may be called before glfwInit.
    +
    Warning
    The contexts of any remaining windows must not be current on any other thread when this function is called.
    +
    Reentrancy
    This function must not be called from a callback.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Initialization and termination
    +
    +glfwInit
    +
    Since
    Added in version 1.0.
    + +
    +
    + +

    ◆ glfwInitHint()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void glfwInitHint (int hint,
    int value 
    )
    +
    +

    This function sets hints for the next initialization of GLFW.

    +

    The values you set hints to are never reset by GLFW, but they only take effect during initialization. Once GLFW has been initialized, any values you set will be ignored until the library is terminated and initialized again.

    +

    Some hints are platform specific. These may be set on any platform but they will only affect their specific platform. Other platforms will ignore them. Setting these hints requires no platform specific headers or functions.

    +
    Parameters
    + + + +
    [in]hintThe init hint to set.
    [in]valueThe new value of the init hint.
    +
    +
    +
    Errors
    Possible errors include GLFW_INVALID_ENUM and GLFW_INVALID_VALUE.
    +
    Remarks
    This function may be called before glfwInit.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    init_hints
    +
    +glfwInit
    +
    Since
    Added in version 3.3.
    + +
    +
    + +

    ◆ glfwGetVersion()

    +
    @@ -238,12 +423,14 @@ GLFW version macros
    Thread safety
    This function may be called from any thread.
    See also
    Version management
    -glfwGetVersionString
    +glfwGetVersionString
    Since
    Added in version 1.0.
    - + +

    ◆ glfwGetVersionString()

    +
    @@ -265,39 +452,48 @@ GLFW version macros
    Thread safety
    This function may be called from any thread.
    See also
    Version management
    -glfwGetVersion
    +glfwGetVersion
    Since
    Added in version 3.0.
    - + +

    ◆ glfwGetError()

    +
    - + - - + +
    int glfwInit int glfwGetError (void )const char ** description)
    -

    This function initializes the GLFW library. Before most GLFW functions can be used, GLFW must be initialized, and before an application terminates GLFW should be terminated in order to free any resources allocated during or after initialization.

    -

    If this function fails, it calls glfwTerminate before returning. If it succeeds, you should call glfwTerminate before the application exits.

    -

    Additional calls to this function after successful initialization but before termination will return GLFW_TRUE immediately.

    -
    Returns
    GLFW_TRUE if successful, or GLFW_FALSE if an error occurred.
    -
    Errors
    Possible errors include GLFW_PLATFORM_ERROR.
    -
    Remarks
    OS X: This function will change the current directory of the application to the Contents/Resources subdirectory of the application's bundle, if present. This can be disabled with a compile-time option.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Initialization and termination
    +

    This function returns and clears the error code of the last error that occurred on the calling thread, and optionally a UTF-8 encoded human-readable description of it. If no error has occurred since the last call, it returns GLFW_NO_ERROR (zero) and the description pointer is set to NULL.

    +
    Parameters
    + + +
    [in]descriptionWhere to store the error description pointer, or NULL.
    +
    +
    +
    Returns
    The last error code for the calling thread, or GLFW_NO_ERROR (zero).
    +
    Errors
    None.
    +
    Pointer lifetime
    The returned string is allocated and freed by GLFW. You should not free it yourself. It is guaranteed to be valid only until the next error occurs or the library is terminated.
    +
    Remarks
    This function may be called before glfwInit.
    +
    Thread safety
    This function may be called from any thread.
    +
    See also
    Error handling
    -glfwTerminate
    -
    Since
    Added in version 1.0.
    +glfwSetErrorCallback
    +
    Since
    Added in version 3.3.
    - + +

    ◆ glfwSetErrorCallback()

    +
    @@ -311,6 +507,7 @@ GLFW version macros

    This function sets the error callback, which is called with an error code and a human-readable description each time a GLFW error occurs.

    +

    The error code is set before the callback is called. Calling glfwGetError from the error callback will return the same value as the error code argument.

    The error callback is called on the thread where the error occurred. If you are using GLFW from multiple threads, your error callback needs to be written accordingly.

    Because the description string may have been generated specifically for that error, it is not guaranteed to be valid after the callback has returned. If you wish to use it after the callback returns, you need to make a copy.

    Once set, the error callback remains set even after the library has been terminated.

    @@ -324,42 +521,17 @@ GLFW version macros
    - - - - - - - -
    void glfwTerminate (void )
    -
    -

    This function destroys all remaining windows and cursors, restores any modified gamma ramps and frees any other allocated resources. Once this function is called, you must again call glfwInit successfully before you will be able to use most GLFW functions.

    -

    If GLFW has been successfully initialized, this function should be called before the application exits. If initialization fails, there is no need to call this function, as it is called by glfwInit before it returns failure.

    -
    Errors
    Possible errors include GLFW_PLATFORM_ERROR.
    -
    Remarks
    This function may be called before glfwInit.
    -
    Warning
    The contexts of any remaining windows must not be current on any other thread when this function is called.
    -
    Reentrancy
    This function must not be called from a callback.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Initialization and termination
    +
    See also
    Error handling
    -glfwInit
    -
    Since
    Added in version 1.0.
    +glfwGetError
    +
    Since
    Added in version 3.0.
    diff --git a/ref/glfw/docs/html/group__input.html b/ref/glfw/docs/html/group__input.html index dec3352a..9c8ce136 100644 --- a/ref/glfw/docs/html/group__input.html +++ b/ref/glfw/docs/html/group__input.html @@ -3,7 +3,7 @@ - + GLFW: Input reference @@ -11,9 +11,6 @@ - @@ -21,45 +18,31 @@
    - + - + + + +
    Input reference
    +

    Description

    +

    This is the reference documentation for input related functions and types. For more task-oriented information, see the Input guide.

    + + + + + + + + + + + + + +

    Modules

     Gamepad axes
     Gamepad axes.
     
     Gamepad buttons
     Gamepad buttons.
     
     Joystick hat states
     Joystick hat states.
     
     Joysticks
     Joystick IDs.
     
     Keyboard keys
     Keyboard key IDs.
     
     Modifier key flags
     Modifier key flags.
     
     Mouse buttons
     Mouse button IDs.
     
     Standard cursor shapes
     Standard system cursor shapes.
     
    + + + @@ -127,6 +129,9 @@ Typedefs + + +

    Typedefs

    typedef struct GLFWcursor GLFWcursor
     Opaque cursor object. More...
     
    typedef void(* GLFWmousebuttonfun) (GLFWwindow *, int, int, int)
     The function signature for mouse button callbacks. More...
     
    typedef void(* GLFWjoystickfun) (int, int)
     The function signature for joystick configuration callbacks. More...
     
    typedef struct GLFWgamepadstate GLFWgamepadstate
     Gamepad input state. More...
     
    @@ -136,9 +141,15 @@ Functions + + + - + + + + @@ -146,21 +157,21 @@ Functions - + - + - + - + - + - + @@ -187,21 +198,45 @@ Functions - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -220,36 +255,11 @@ Functions -

    Functions

    void glfwSetInputMode (GLFWwindow *window, int mode, int value)
     Sets an input option for the specified window. More...
     
    int glfwRawMouseMotionSupported (void)
     Returns whether raw mouse motion is supported. More...
     
    const char * glfwGetKeyName (int key, int scancode)
     Returns the localized name of the specified printable key. More...
     Returns the layout-specific name of the specified printable key. More...
     
    int glfwGetKeyScancode (int key)
     Returns the platform-specific scancode of the specified key. More...
     
    int glfwGetKey (GLFWwindow *window, int key)
     Returns the last reported state of a keyboard key for the specified window. More...
     
     Returns the last reported state of a mouse button for the specified window. More...
     
    void glfwGetCursorPos (GLFWwindow *window, double *xpos, double *ypos)
     Retrieves the position of the cursor relative to the client area of the window. More...
     Retrieves the position of the cursor relative to the content area of the window. More...
     
    void glfwSetCursorPos (GLFWwindow *window, double xpos, double ypos)
     Sets the position of the cursor, relative to the client area of the window. More...
     Sets the position of the cursor, relative to the content area of the window. More...
     
    GLFWcursorglfwCreateCursor (const GLFWimage *image, int xhot, int yhot)
    GLFWcursorglfwCreateCursor (const GLFWimage *image, int xhot, int yhot)
     Creates a custom cursor. More...
     
    GLFWcursorglfwCreateStandardCursor (int shape)
    GLFWcursorglfwCreateStandardCursor (int shape)
     Creates a cursor with a standard shape. More...
     
    void glfwDestroyCursor (GLFWcursor *cursor)
    void glfwDestroyCursor (GLFWcursor *cursor)
     Destroys a cursor. More...
     
    void glfwSetCursor (GLFWwindow *window, GLFWcursor *cursor)
    void glfwSetCursor (GLFWwindow *window, GLFWcursor *cursor)
     Sets the cursor for the window. More...
     
    GLFWkeyfun glfwSetKeyCallback (GLFWwindow *window, GLFWkeyfun cbfun)
    GLFWdropfun glfwSetDropCallback (GLFWwindow *window, GLFWdropfun cbfun)
     Sets the file drop callback. More...
     
    int glfwJoystickPresent (int joy)
     Returns whether the specified joystick is present. More...
     
    const float * glfwGetJoystickAxes (int joy, int *count)
     Returns the values of all axes of the specified joystick. More...
     
    const unsigned char * glfwGetJoystickButtons (int joy, int *count)
     Returns the state of all buttons of the specified joystick. More...
     
    const char * glfwGetJoystickName (int joy)
     Returns the name of the specified joystick. More...
     
    int glfwJoystickPresent (int jid)
     Returns whether the specified joystick is present. More...
     
    const float * glfwGetJoystickAxes (int jid, int *count)
     Returns the values of all axes of the specified joystick. More...
     
    const unsigned char * glfwGetJoystickButtons (int jid, int *count)
     Returns the state of all buttons of the specified joystick. More...
     
    const unsigned char * glfwGetJoystickHats (int jid, int *count)
     Returns the state of all hats of the specified joystick. More...
     
    const char * glfwGetJoystickName (int jid)
     Returns the name of the specified joystick. More...
     
    const char * glfwGetJoystickGUID (int jid)
     Returns the SDL comaptible GUID of the specified joystick. More...
     
    void glfwSetJoystickUserPointer (int jid, void *pointer)
     Sets the user pointer of the specified joystick. More...
     
    void * glfwGetJoystickUserPointer (int jid)
     Returns the user pointer of the specified joystick. More...
     
    int glfwJoystickIsGamepad (int jid)
     Returns whether the specified joystick has a gamepad mapping. More...
     
    GLFWjoystickfun glfwSetJoystickCallback (GLFWjoystickfun cbfun)
     Sets the joystick configuration callback. More...
     
    int glfwUpdateGamepadMappings (const char *string)
     Adds the specified SDL_GameControllerDB gamepad mappings. More...
     
    const char * glfwGetGamepadName (int jid)
     Returns the human-readable gamepad name for the specified joystick. More...
     
    int glfwGetGamepadState (int jid, GLFWgamepadstate *state)
     Retrieves the state of the specified joystick remapped as a gamepad. More...
     
    void glfwSetClipboardString (GLFWwindow *window, const char *string)
     Sets the clipboard to the specified string. More...
     
    uint64_t glfwGetTimerFrequency (void)
     Returns the frequency, in Hz, of the raw timer. More...
     
    - - - - - - - - - -

    -Key and button actions

    #define GLFW_RELEASE   0
     The key or mouse button was released. More...
     
    #define GLFW_PRESS   1
     The key or mouse button was pressed. More...
     
    #define GLFW_REPEAT   2
     The key was held down until it repeated. More...
     
    -

    Detailed Description

    -

    This is the reference documentation for input related functions and types. For more task-oriented information, see the Input guide.

    Macro Definition Documentation

    - -
    -
    - - - - -
    #define GLFW_PRESS   1
    -
    -

    The key or mouse button was pressed.

    + +

    ◆ GLFW_RELEASE

    -
    -
    -
    @@ -262,7 +272,24 @@ Key and button actions - + +

    ◆ GLFW_PRESS

    + +
    +
    +
    + + + +
    #define GLFW_PRESS   1
    +
    +

    The key or mouse button was pressed.

    + +
    +
    + +

    ◆ GLFW_REPEAT

    +
    @@ -276,81 +303,54 @@ Key and button actions

    Typedef Documentation

    - -
    -
    -
    - - - -
    typedef void(* GLFWcharfun) (GLFWwindow *, unsigned int)
    -
    -

    This is the function signature for Unicode character callback functions.

    -
    Parameters
    - - - -
    [in]windowThe window that received the event.
    [in]codepointThe Unicode code point of the character.
    -
    -
    -
    See also
    Text input
    -
    -glfwSetCharCallback
    -
    Since
    Added in version 2.4.
    -
    GLFW 3: Added window handle parameter.
    + +

    ◆ GLFWcursor

    -
    -
    -
    - +
    typedef void(* GLFWcharmodsfun) (GLFWwindow *, unsigned int, int)typedef struct GLFWcursor GLFWcursor
    -

    This is the function signature for Unicode character with modifiers callback functions. It is called for each input character, regardless of what modifier keys are held down.

    -
    Parameters
    - - - - -
    [in]windowThe window that received the event.
    [in]codepointThe Unicode code point of the character.
    [in]modsBit field describing which modifier keys were held down.
    -
    -
    -
    See also
    Text input
    -
    -glfwSetCharModsCallback
    +

    Opaque cursor object.

    +
    See also
    Cursor objects
    Since
    Added in version 3.1.
    - + +

    ◆ GLFWmousebuttonfun

    +
    - +
    typedef void(* GLFWcursorenterfun) (GLFWwindow *, int)typedef void(* GLFWmousebuttonfun) (GLFWwindow *, int, int, int)
    -

    This is the function signature for cursor enter/leave callback functions.

    +

    This is the function signature for mouse button callback functions.

    Parameters
    - + + +
    [in]windowThe window that received the event.
    [in]enteredGLFW_TRUE if the cursor entered the window's client area, or GLFW_FALSE if it left it.
    [in]buttonThe mouse button that was pressed or released.
    [in]actionOne of GLFW_PRESS or GLFW_RELEASE.
    [in]modsBit field describing which modifier keys were held down.
    -
    See also
    Cursor enter/leave events
    +
    See also
    Mouse button input
    -glfwSetCursorEnterCallback
    -
    Since
    Added in version 3.0.
    +glfwSetMouseButtonCallback
    +
    Since
    Added in version 1.0. GLFW 3: Added window handle and modifier mask parameters.
    - + +

    ◆ GLFWcursorposfun

    +
    @@ -363,68 +363,74 @@ Key and button actions
    Parameters
    - - + +
    [in]windowThe window that received the event.
    [in]xposThe new cursor x-coordinate, relative to the left edge of the client area.
    [in]yposThe new cursor y-coordinate, relative to the top edge of the client area.
    [in]xposThe new cursor x-coordinate, relative to the left edge of the content area.
    [in]yposThe new cursor y-coordinate, relative to the top edge of the content area.
    See also
    Cursor position
    -glfwSetCursorPosCallback
    +glfwSetCursorPosCallback
    Since
    Added in version 3.0. Replaces GLFWmouseposfun.
    - + +

    ◆ GLFWcursorenterfun

    +
    - +
    typedef void(* GLFWdropfun) (GLFWwindow *, int, const char **)typedef void(* GLFWcursorenterfun) (GLFWwindow *, int)
    -

    This is the function signature for file drop callbacks.

    +

    This is the function signature for cursor enter/leave callback functions.

    Parameters
    - - +
    [in]windowThe window that received the event.
    [in]countThe number of dropped files.
    [in]pathsThe UTF-8 encoded file and/or directory path names.
    [in]enteredGLFW_TRUE if the cursor entered the window's content area, or GLFW_FALSE if it left it.
    -
    See also
    Path drop input
    +
    See also
    Cursor enter/leave events
    -glfwSetDropCallback
    -
    Since
    Added in version 3.1.
    +glfwSetCursorEnterCallback
    +
    Since
    Added in version 3.0.
    - + +

    ◆ GLFWscrollfun

    +
    - +
    typedef void(* GLFWjoystickfun) (int, int)typedef void(* GLFWscrollfun) (GLFWwindow *, double, double)
    -

    This is the function signature for joystick configuration callback functions.

    +

    This is the function signature for scroll callback functions.

    Parameters
    - - + + +
    [in]joyThe joystick that was connected or disconnected.
    [in]eventOne of GLFW_CONNECTED or GLFW_DISCONNECTED.
    [in]windowThe window that received the event.
    [in]xoffsetThe scroll offset along the x-axis.
    [in]yoffsetThe scroll offset along the y-axis.
    -
    See also
    Joystick configuration changes
    +
    See also
    Scroll input
    -glfwSetJoystickCallback
    -
    Since
    Added in version 3.2.
    +glfwSetScrollCallback
    +
    Since
    Added in version 3.0. Replaces GLFWmousewheelfun.
    - + +

    ◆ GLFWkeyfun

    +
    @@ -446,262 +452,141 @@ Key and button actions
    See also
    Key input
    -glfwSetKeyCallback
    -
    Since
    Added in version 1.0.
    -
    GLFW 3: Added window handle, scancode and modifier mask parameters.
    +glfwSetKeyCallback +
    Since
    Added in version 1.0. GLFW 3: Added window handle, scancode and modifier mask parameters.
    - + +

    ◆ GLFWcharfun

    +
    - +
    typedef void(* GLFWmousebuttonfun) (GLFWwindow *, int, int, int)typedef void(* GLFWcharfun) (GLFWwindow *, unsigned int)
    -

    This is the function signature for mouse button callback functions.

    +

    This is the function signature for Unicode character callback functions.

    Parameters
    - - + +
    [in]windowThe window that received the event.
    [in]buttonThe mouse button that was pressed or released.
    [in]actionOne of GLFW_PRESS or GLFW_RELEASE.
    [in]codepointThe Unicode code point of the character.
    +
    +
    +
    See also
    Text input
    +
    +glfwSetCharCallback
    +
    Since
    Added in version 2.4. GLFW 3: Added window handle parameter.
    + +
    +
    + +

    ◆ GLFWcharmodsfun

    + +
    +
    + + + + +
    typedef void(* GLFWcharmodsfun) (GLFWwindow *, unsigned int, int)
    +
    +

    This is the function signature for Unicode character with modifiers callback functions. It is called for each input character, regardless of what modifier keys are held down.

    +
    Parameters
    + + +
    [in]windowThe window that received the event.
    [in]codepointThe Unicode code point of the character.
    [in]modsBit field describing which modifier keys were held down.
    -
    See also
    Mouse button input
    +
    See also
    Text input
    -glfwSetMouseButtonCallback
    -
    Since
    Added in version 1.0.
    -
    GLFW 3: Added window handle and modifier mask parameters.
    +glfwSetCharModsCallback
    +
    Deprecated:
    Scheduled for removal in version 4.0.
    +
    Since
    Added in version 3.1.
    - + +

    ◆ GLFWdropfun

    +
    - +
    typedef void(* GLFWscrollfun) (GLFWwindow *, double, double)typedef void(* GLFWdropfun) (GLFWwindow *, int, const char **)
    -

    This is the function signature for scroll callback functions.

    +

    This is the function signature for file drop callbacks.

    Parameters
    - - + +
    [in]windowThe window that received the event.
    [in]xoffsetThe scroll offset along the x-axis.
    [in]yoffsetThe scroll offset along the y-axis.
    [in]countThe number of dropped files.
    [in]pathsThe UTF-8 encoded file and/or directory path names.
    -
    See also
    Scroll input
    +
    See also
    Path drop input
    -glfwSetScrollCallback
    -
    Since
    Added in version 3.0. Replaces GLFWmousewheelfun.
    +glfwSetDropCallback
    +
    Since
    Added in version 3.1.
    + +
    +
    + +

    ◆ GLFWjoystickfun

    + +
    +
    + + + + +
    typedef void(* GLFWjoystickfun) (int, int)
    +
    +

    This is the function signature for joystick configuration callback functions.

    +
    Parameters
    + + + +
    [in]jidThe joystick that was connected or disconnected.
    [in]eventOne of GLFW_CONNECTED or GLFW_DISCONNECTED. Remaining values reserved for future use.
    +
    +
    +
    See also
    Joystick configuration changes
    +
    +glfwSetJoystickCallback
    +
    Since
    Added in version 3.2.
    + +
    +
    + +

    ◆ GLFWgamepadstate

    + +
    +
    + + + + +
    typedef struct GLFWgamepadstate GLFWgamepadstate
    +
    +

    This describes the input state of a gamepad.

    +
    See also
    Gamepad input
    +
    +glfwGetGamepadState
    +
    Since
    Added in version 3.3.

    Function Documentation

    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    GLFWcursor* glfwCreateCursor (const GLFWimageimage,
    int xhot,
    int yhot 
    )
    -
    -

    Creates a new custom cursor image that can be set for a window with glfwSetCursor. The cursor can be destroyed with glfwDestroyCursor. Any remaining cursors are destroyed by glfwTerminate.

    -

    The pixels are 32-bit, little-endian, non-premultiplied RGBA, i.e. eight bits per channel. They are arranged canonically as packed sequential rows, starting from the top-left corner.

    -

    The cursor hotspot is specified in pixels, relative to the upper-left corner of the cursor image. Like all other coordinate systems in GLFW, the X-axis points to the right and the Y-axis points down.

    -
    Parameters
    - - - - -
    [in]imageThe desired cursor image.
    [in]xhotThe desired x-coordinate, in pixels, of the cursor hotspot.
    [in]yhotThe desired y-coordinate, in pixels, of the cursor hotspot.
    -
    -
    -
    Returns
    The handle of the created cursor, or NULL if an error occurred.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    -
    Pointer lifetime
    The specified image data is copied before this function returns.
    -
    Reentrancy
    This function must not be called from a callback.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Cursor objects
    -
    -glfwDestroyCursor
    -
    -glfwCreateStandardCursor
    -
    Since
    Added in version 3.1.
    + +

    ◆ glfwGetInputMode()

    -
    -
    - -
    -
    - - - - - - - - -
    GLFWcursor* glfwCreateStandardCursor (int shape)
    -
    -

    Returns a cursor with a standard shape, that can be set for a window with glfwSetCursor.

    -
    Parameters
    - - -
    [in]shapeOne of the standard shapes.
    -
    -
    -
    Returns
    A new cursor ready to use or NULL if an error occurred.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_INVALID_ENUM and GLFW_PLATFORM_ERROR.
    -
    Reentrancy
    This function must not be called from a callback.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Cursor objects
    -
    -glfwCreateCursor
    -
    Since
    Added in version 3.1.
    - -
    -
    - -
    -
    - - - - - - - - -
    void glfwDestroyCursor (GLFWcursorcursor)
    -
    -

    This function destroys a cursor previously created with glfwCreateCursor. Any remaining cursors will be destroyed by glfwTerminate.

    -
    Parameters
    - - -
    [in]cursorThe cursor object to destroy.
    -
    -
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    -
    Reentrancy
    This function must not be called from a callback.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Cursor objects
    -
    -glfwCreateCursor
    -
    Since
    Added in version 3.1.
    - -
    -
    - -
    -
    - - - - - - - - -
    const char* glfwGetClipboardString (GLFWwindowwindow)
    -
    -

    This function returns the contents of the system clipboard, if it contains or is convertible to a UTF-8 encoded string. If the clipboard is empty or if its contents cannot be converted, NULL is returned and a GLFW_FORMAT_UNAVAILABLE error is generated.

    -
    Parameters
    - - -
    [in]windowThe window that will request the clipboard contents.
    -
    -
    -
    Returns
    The contents of the clipboard as a UTF-8 encoded string, or NULL if an error occurred.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    -
    Pointer lifetime
    The returned string is allocated and freed by GLFW. You should not free it yourself. It is valid until the next call to glfwGetClipboardString or glfwSetClipboardString, or until the library is terminated.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Clipboard input and output
    -
    -glfwSetClipboardString
    -
    Since
    Added in version 3.0.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void glfwGetCursorPos (GLFWwindowwindow,
    double * xpos,
    double * ypos 
    )
    -
    -

    This function returns the position of the cursor, in screen coordinates, relative to the upper-left corner of the client area of the specified window.

    -

    If the cursor is disabled (with GLFW_CURSOR_DISABLED) then the cursor position is unbounded and limited only by the minimum and maximum values of a double.

    -

    The coordinate can be converted to their integer equivalents with the floor function. Casting directly to an integer type works for positive coordinates, but fails for negative ones.

    -

    Any or all of the position arguments may be NULL. If an error occurs, all non-NULL position arguments will be set to zero.

    -
    Parameters
    - - - - -
    [in]windowThe desired window.
    [out]xposWhere to store the cursor x-coordinate, relative to the left edge of the client area, or NULL.
    [out]yposWhere to store the cursor y-coordinate, relative to the to top edge of the client area, or NULL.
    -
    -
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Cursor position
    -
    -glfwSetCursorPos
    -
    Since
    Added in version 3.0. Replaces glfwGetMousePos.
    - -
    -
    -
    @@ -724,713 +609,24 @@ Key and button actions
    -

    This function returns the value of an input option for the specified window. The mode must be one of GLFW_CURSOR, GLFW_STICKY_KEYS or GLFW_STICKY_MOUSE_BUTTONS.

    +

    This function returns the value of an input option for the specified window. The mode must be one of GLFW_CURSOR, GLFW_STICKY_KEYS, GLFW_STICKY_MOUSE_BUTTONS, GLFW_LOCK_KEY_MODS or GLFW_RAW_MOUSE_MOTION.

    Parameters
    - +
    [in]windowThe window to query.
    [in]modeOne of GLFW_CURSOR, GLFW_STICKY_KEYS or GLFW_STICKY_MOUSE_BUTTONS.
    [in]modeOne of GLFW_CURSOR, GLFW_STICKY_KEYS, GLFW_STICKY_MOUSE_BUTTONS, GLFW_LOCK_KEY_MODS or GLFW_RAW_MOUSE_MOTION.
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_INVALID_ENUM.
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    glfwSetInputMode
    +
    See also
    glfwSetInputMode
    Since
    Added in version 3.0.
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    const float* glfwGetJoystickAxes (int joy,
    int * count 
    )
    -
    -

    This function returns the values of all axes of the specified joystick. Each element in the array is a value between -1.0 and 1.0.

    -

    Querying a joystick slot with no device present is not an error, but will cause this function to return NULL. Call glfwJoystickPresent to check device presence.

    -
    Parameters
    - - - -
    [in]joyThe joystick to query.
    [out]countWhere to store the number of axis values in the returned array. This is set to zero if the joystick is not present or an error occurred.
    -
    -
    -
    Returns
    An array of axis values, or NULL if the joystick is not present or an error occurred.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_INVALID_ENUM and GLFW_PLATFORM_ERROR.
    -
    Pointer lifetime
    The returned array is allocated and freed by GLFW. You should not free it yourself. It is valid until the specified joystick is disconnected, this function is called again for that joystick or the library is terminated.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Joystick axis states
    -
    Since
    Added in version 3.0. Replaces glfwGetJoystickPos.
    + +

    ◆ glfwSetInputMode()

    -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    const unsigned char* glfwGetJoystickButtons (int joy,
    int * count 
    )
    -
    -

    This function returns the state of all buttons of the specified joystick. Each element in the array is either GLFW_PRESS or GLFW_RELEASE.

    -

    Querying a joystick slot with no device present is not an error, but will cause this function to return NULL. Call glfwJoystickPresent to check device presence.

    -
    Parameters
    - - - -
    [in]joyThe joystick to query.
    [out]countWhere to store the number of button states in the returned array. This is set to zero if the joystick is not present or an error occurred.
    -
    -
    -
    Returns
    An array of button states, or NULL if the joystick is not present or an error occurred.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_INVALID_ENUM and GLFW_PLATFORM_ERROR.
    -
    Pointer lifetime
    The returned array is allocated and freed by GLFW. You should not free it yourself. It is valid until the specified joystick is disconnected, this function is called again for that joystick or the library is terminated.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Joystick button states
    -
    Since
    Added in version 2.2.
    -
    GLFW 3: Changed to return a dynamic array.
    - -
    -
    - -
    -
    - - - - - - - - -
    const char* glfwGetJoystickName (int joy)
    -
    -

    This function returns the name, encoded as UTF-8, of the specified joystick. The returned string is allocated and freed by GLFW. You should not free it yourself.

    -

    Querying a joystick slot with no device present is not an error, but will cause this function to return NULL. Call glfwJoystickPresent to check device presence.

    -
    Parameters
    - - -
    [in]joyThe joystick to query.
    -
    -
    -
    Returns
    The UTF-8 encoded name of the joystick, or NULL if the joystick is not present or an error occurred.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_INVALID_ENUM and GLFW_PLATFORM_ERROR.
    -
    Pointer lifetime
    The returned string is allocated and freed by GLFW. You should not free it yourself. It is valid until the specified joystick is disconnected, this function is called again for that joystick or the library is terminated.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Joystick name
    -
    Since
    Added in version 3.0.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    int glfwGetKey (GLFWwindowwindow,
    int key 
    )
    -
    -

    This function returns the last state reported for the specified key to the specified window. The returned state is one of GLFW_PRESS or GLFW_RELEASE. The higher-level action GLFW_REPEAT is only reported to the key callback.

    -

    If the GLFW_STICKY_KEYS input mode is enabled, this function returns GLFW_PRESS the first time you call it for a key that was pressed, even if that key has already been released.

    -

    The key functions deal with physical keys, with key tokens named after their use on the standard US keyboard layout. If you want to input text, use the Unicode character callback instead.

    -

    The modifier key bit masks are not key tokens and cannot be used with this function.

    -

    Do not use this function to implement text input.

    -
    Parameters
    - - - -
    [in]windowThe desired window.
    [in]keyThe desired keyboard key. GLFW_KEY_UNKNOWN is not a valid key for this function.
    -
    -
    -
    Returns
    One of GLFW_PRESS or GLFW_RELEASE.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_INVALID_ENUM.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Key input
    -
    Since
    Added in version 1.0.
    -
    GLFW 3: Added window handle parameter.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    const char* glfwGetKeyName (int key,
    int scancode 
    )
    -
    -

    This function returns the localized name of the specified printable key. This is intended for displaying key bindings to the user.

    -

    If the key is GLFW_KEY_UNKNOWN, the scancode is used instead, otherwise the scancode is ignored. If a non-printable key or (if the key is GLFW_KEY_UNKNOWN) a scancode that maps to a non-printable key is specified, this function returns NULL.

    -

    This behavior allows you to pass in the arguments passed to the key callback without modification.

    -

    The printable keys are:

      -
    • GLFW_KEY_APOSTROPHE
    • -
    • GLFW_KEY_COMMA
    • -
    • GLFW_KEY_MINUS
    • -
    • GLFW_KEY_PERIOD
    • -
    • GLFW_KEY_SLASH
    • -
    • GLFW_KEY_SEMICOLON
    • -
    • GLFW_KEY_EQUAL
    • -
    • GLFW_KEY_LEFT_BRACKET
    • -
    • GLFW_KEY_RIGHT_BRACKET
    • -
    • GLFW_KEY_BACKSLASH
    • -
    • GLFW_KEY_WORLD_1
    • -
    • GLFW_KEY_WORLD_2
    • -
    • GLFW_KEY_0 to GLFW_KEY_9
    • -
    • GLFW_KEY_A to GLFW_KEY_Z
    • -
    • GLFW_KEY_KP_0 to GLFW_KEY_KP_9
    • -
    • GLFW_KEY_KP_DECIMAL
    • -
    • GLFW_KEY_KP_DIVIDE
    • -
    • GLFW_KEY_KP_MULTIPLY
    • -
    • GLFW_KEY_KP_SUBTRACT
    • -
    • GLFW_KEY_KP_ADD
    • -
    • GLFW_KEY_KP_EQUAL
    • -
    -
    Parameters
    - - - -
    [in]keyThe key to query, or GLFW_KEY_UNKNOWN.
    [in]scancodeThe scancode of the key to query.
    -
    -
    -
    Returns
    The localized name of the key, or NULL.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    -
    Pointer lifetime
    The returned string is allocated and freed by GLFW. You should not free it yourself. It is valid until the next call to glfwGetKeyName, or until the library is terminated.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Key names
    -
    Since
    Added in version 3.2.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    int glfwGetMouseButton (GLFWwindowwindow,
    int button 
    )
    -
    -

    This function returns the last state reported for the specified mouse button to the specified window. The returned state is one of GLFW_PRESS or GLFW_RELEASE.

    -

    If the GLFW_STICKY_MOUSE_BUTTONS input mode is enabled, this function GLFW_PRESS the first time you call it for a mouse button that was pressed, even if that mouse button has already been released.

    -
    Parameters
    - - - -
    [in]windowThe desired window.
    [in]buttonThe desired mouse button.
    -
    -
    -
    Returns
    One of GLFW_PRESS or GLFW_RELEASE.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_INVALID_ENUM.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Mouse button input
    -
    Since
    Added in version 1.0.
    -
    GLFW 3: Added window handle parameter.
    - -
    -
    - -
    -
    - - - - - - - - -
    double glfwGetTime (void )
    -
    -

    This function returns the value of the GLFW timer. Unless the timer has been set using glfwSetTime, the timer measures time elapsed since GLFW was initialized.

    -

    The resolution of the timer is system dependent, but is usually on the order of a few micro- or nanoseconds. It uses the highest-resolution monotonic time source on each supported platform.

    -
    Returns
    The current value, in seconds, or zero if an error occurred.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    -
    Thread safety
    This function may be called from any thread. Reading and writing of the internal timer offset is not atomic, so it needs to be externally synchronized with calls to glfwSetTime.
    -
    See also
    Time input
    -
    Since
    Added in version 1.0.
    - -
    -
    - -
    -
    - - - - - - - - -
    uint64_t glfwGetTimerFrequency (void )
    -
    -

    This function returns the frequency, in Hz, of the raw timer.

    -
    Returns
    The frequency of the timer, in Hz, or zero if an error occurred.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    -
    Thread safety
    This function may be called from any thread.
    -
    See also
    Time input
    -
    -glfwGetTimerValue
    -
    Since
    Added in version 3.2.
    - -
    -
    - -
    -
    - - - - - - - - -
    uint64_t glfwGetTimerValue (void )
    -
    -

    This function returns the current value of the raw timer, measured in 1 / frequency seconds. To get the frequency, call glfwGetTimerFrequency.

    -
    Returns
    The value of the timer, or zero if an error occurred.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    -
    Thread safety
    This function may be called from any thread.
    -
    See also
    Time input
    -
    -glfwGetTimerFrequency
    -
    Since
    Added in version 3.2.
    - -
    -
    - -
    -
    - - - - - - - - -
    int glfwJoystickPresent (int joy)
    -
    -

    This function returns whether the specified joystick is present.

    -
    Parameters
    - - -
    [in]joyThe joystick to query.
    -
    -
    -
    Returns
    GLFW_TRUE if the joystick is present, or GLFW_FALSE otherwise.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_INVALID_ENUM and GLFW_PLATFORM_ERROR.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Joystick input
    -
    Since
    Added in version 3.0. Replaces glfwGetJoystickParam.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLFWcharfun glfwSetCharCallback (GLFWwindowwindow,
    GLFWcharfun cbfun 
    )
    -
    -

    This function sets the character callback of the specified window, which is called when a Unicode character is input.

    -

    The character callback is intended for Unicode text input. As it deals with characters, it is keyboard layout dependent, whereas the key callback is not. Characters do not map 1:1 to physical keys, as a key may produce zero, one or more characters. If you want to know whether a specific physical key was pressed or released, see the key callback instead.

    -

    The character callback behaves as system text input normally does and will not be called if modifier keys are held down that would prevent normal text input on that platform, for example a Super (Command) key on OS X or Alt key on Windows. There is a character with modifiers callback that receives these events.

    -
    Parameters
    - - - -
    [in]windowThe window whose callback to set.
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    -
    -
    -
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Text input
    -
    Since
    Added in version 2.4.
    -
    GLFW 3: Added window handle parameter and return value.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLFWcharmodsfun glfwSetCharModsCallback (GLFWwindowwindow,
    GLFWcharmodsfun cbfun 
    )
    -
    -

    This function sets the character with modifiers callback of the specified window, which is called when a Unicode character is input regardless of what modifier keys are used.

    -

    The character with modifiers callback is intended for implementing custom Unicode character input. For regular Unicode text input, see the character callback. Like the character callback, the character with modifiers callback deals with characters and is keyboard layout dependent. Characters do not map 1:1 to physical keys, as a key may produce zero, one or more characters. If you want to know whether a specific physical key was pressed or released, see the key callback instead.

    -
    Parameters
    - - - -
    [in]windowThe window whose callback to set.
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    -
    -
    -
    Returns
    The previously set callback, or NULL if no callback was set or an error occurred.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Text input
    -
    Since
    Added in version 3.1.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void glfwSetClipboardString (GLFWwindowwindow,
    const char * string 
    )
    -
    -

    This function sets the system clipboard to the specified, UTF-8 encoded string.

    -
    Parameters
    - - - -
    [in]windowThe window that will own the clipboard contents.
    [in]stringA UTF-8 encoded string.
    -
    -
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    -
    Pointer lifetime
    The specified string is copied before this function returns.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Clipboard input and output
    -
    -glfwGetClipboardString
    -
    Since
    Added in version 3.0.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void glfwSetCursor (GLFWwindowwindow,
    GLFWcursorcursor 
    )
    -
    -

    This function sets the cursor image to be used when the cursor is over the client area of the specified window. The set cursor will only be visible when the cursor mode of the window is GLFW_CURSOR_NORMAL.

    -

    On some platforms, the set cursor may not be visible unless the window also has input focus.

    -
    Parameters
    - - - -
    [in]windowThe window to set the cursor for.
    [in]cursorThe cursor to set, or NULL to switch back to the default arrow cursor.
    -
    -
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Cursor objects
    -
    Since
    Added in version 3.1.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLFWcursorenterfun glfwSetCursorEnterCallback (GLFWwindowwindow,
    GLFWcursorenterfun cbfun 
    )
    -
    -

    This function sets the cursor boundary crossing callback of the specified window, which is called when the cursor enters or leaves the client area of the window.

    -
    Parameters
    - - - -
    [in]windowThe window whose callback to set.
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    -
    -
    -
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Cursor enter/leave events
    -
    Since
    Added in version 3.0.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void glfwSetCursorPos (GLFWwindowwindow,
    double xpos,
    double ypos 
    )
    -
    -

    This function sets the position, in screen coordinates, of the cursor relative to the upper-left corner of the client area of the specified window. The window must have input focus. If the window does not have input focus when this function is called, it fails silently.

    -

    Do not use this function to implement things like camera controls. GLFW already provides the GLFW_CURSOR_DISABLED cursor mode that hides the cursor, transparently re-centers it and provides unconstrained cursor motion. See glfwSetInputMode for more information.

    -

    If the cursor mode is GLFW_CURSOR_DISABLED then the cursor position is unconstrained and limited only by the minimum and maximum values of a double.

    -
    Parameters
    - - - - -
    [in]windowThe desired window.
    [in]xposThe desired x-coordinate, relative to the left edge of the client area.
    [in]yposThe desired y-coordinate, relative to the top edge of the client area.
    -
    -
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Cursor position
    -
    -glfwGetCursorPos
    -
    Since
    Added in version 3.0. Replaces glfwSetMousePos.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLFWcursorposfun glfwSetCursorPosCallback (GLFWwindowwindow,
    GLFWcursorposfun cbfun 
    )
    -
    -

    This function sets the cursor position callback of the specified window, which is called when the cursor is moved. The callback is provided with the position, in screen coordinates, relative to the upper-left corner of the client area of the window.

    -
    Parameters
    - - - -
    [in]windowThe window whose callback to set.
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    -
    -
    -
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Cursor position
    -
    Since
    Added in version 3.0. Replaces glfwSetMousePosCallback.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLFWdropfun glfwSetDropCallback (GLFWwindowwindow,
    GLFWdropfun cbfun 
    )
    -
    -

    This function sets the file drop callback of the specified window, which is called when one or more dragged files are dropped on the window.

    -

    Because the path array and its strings may have been generated specifically for that event, they are not guaranteed to be valid after the callback has returned. If you wish to use them after the callback returns, you need to make a deep copy.

    -
    Parameters
    - - - -
    [in]windowThe window whose callback to set.
    [in]cbfunThe new file drop callback, or NULL to remove the currently set callback.
    -
    -
    -
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Path drop input
    -
    Since
    Added in version 3.1.
    - -
    -
    -
    @@ -1459,58 +655,513 @@ Key and button actions
    -

    This function sets an input mode option for the specified window. The mode must be one of GLFW_CURSOR, GLFW_STICKY_KEYS or GLFW_STICKY_MOUSE_BUTTONS.

    +

    This function sets an input mode option for the specified window. The mode must be one of GLFW_CURSOR, GLFW_STICKY_KEYS, GLFW_STICKY_MOUSE_BUTTONS, GLFW_LOCK_KEY_MODS or GLFW_RAW_MOUSE_MOTION.

    If the mode is GLFW_CURSOR, the value must be one of the following cursor modes:

    • GLFW_CURSOR_NORMAL makes the cursor visible and behaving normally.
    • -
    • GLFW_CURSOR_HIDDEN makes the cursor invisible when it is over the client area of the window but does not restrict the cursor from leaving.
    • +
    • GLFW_CURSOR_HIDDEN makes the cursor invisible when it is over the content area of the window but does not restrict the cursor from leaving.
    • GLFW_CURSOR_DISABLED hides and grabs the cursor, providing virtual and unlimited cursor movement. This is useful for implementing for example 3D camera controls.

    If the mode is GLFW_STICKY_KEYS, the value must be either GLFW_TRUE to enable sticky keys, or GLFW_FALSE to disable it. If sticky keys are enabled, a key press will ensure that glfwGetKey returns GLFW_PRESS the next time it is called even if the key had been released before the call. This is useful when you are only interested in whether keys have been pressed but not when or in which order.

    If the mode is GLFW_STICKY_MOUSE_BUTTONS, the value must be either GLFW_TRUE to enable sticky mouse buttons, or GLFW_FALSE to disable it. If sticky mouse buttons are enabled, a mouse button press will ensure that glfwGetMouseButton returns GLFW_PRESS the next time it is called even if the mouse button had been released before the call. This is useful when you are only interested in whether mouse buttons have been pressed but not when or in which order.

    +

    If the mode is GLFW_LOCK_KEY_MODS, the value must be either GLFW_TRUE to enable lock key modifier bits, or GLFW_FALSE to disable them. If enabled, callbacks that receive modifier bits will also have the GLFW_MOD_CAPS_LOCK bit set when the event was generated with Caps Lock on, and the GLFW_MOD_NUM_LOCK bit when Num Lock was on.

    +

    If the mode is GLFW_RAW_MOUSE_MOTION, the value must be either GLFW_TRUE to enable raw (unscaled and unaccelerated) mouse motion when the cursor is disabled, or GLFW_FALSE to disable it. If raw motion is not supported, attempting to set this will emit GLFW_PLATFORM_ERROR. Call glfwRawMouseMotionSupported to check for support.

    Parameters
    - +
    [in]windowThe window whose input mode to set.
    [in]modeOne of GLFW_CURSOR, GLFW_STICKY_KEYS or GLFW_STICKY_MOUSE_BUTTONS.
    [in]modeOne of GLFW_CURSOR, GLFW_STICKY_KEYS, GLFW_STICKY_MOUSE_BUTTONS, GLFW_LOCK_KEY_MODS or GLFW_RAW_MOUSE_MOTION.
    [in]valueThe new value of the specified input mode.
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_INVALID_ENUM and GLFW_PLATFORM_ERROR.
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    glfwGetInputMode
    +
    See also
    glfwGetInputMode
    Since
    Added in version 3.0. Replaces glfwEnable and glfwDisable.
    - + +

    ◆ glfwRawMouseMotionSupported()

    +
    - + - - + +
    GLFWjoystickfun glfwSetJoystickCallback int glfwRawMouseMotionSupported (GLFWjoystickfun cbfun)void )
    -

    This function sets the joystick configuration callback, or removes the currently set callback. This is called when a joystick is connected to or disconnected from the system.

    +

    This function returns whether raw mouse motion is supported on the current system. This status does not change after GLFW has been initialized so you only need to check this once. If you attempt to enable raw motion on a system that does not support it, GLFW_PLATFORM_ERROR will be emitted.

    +

    Raw mouse motion is closer to the actual motion of the mouse across a surface. It is not affected by the scaling and acceleration applied to the motion of the desktop cursor. That processing is suitable for a cursor while raw motion is better for controlling for example a 3D camera. Because of this, raw mouse motion is only provided when the cursor is disabled.

    +
    Returns
    GLFW_TRUE if raw mouse motion is supported on the current machine, or GLFW_FALSE otherwise.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Raw mouse motion
    +
    +glfwSetInputMode
    +
    Since
    Added in version 3.3.
    + +
    +
    + +

    ◆ glfwGetKeyName()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    const char* glfwGetKeyName (int key,
    int scancode 
    )
    +
    +

    This function returns the name of the specified printable key, encoded as UTF-8. This is typically the character that key would produce without any modifier keys, intended for displaying key bindings to the user. For dead keys, it is typically the diacritic it would add to a character.

    +

    Do not use this function for text input. You will break text input for many languages even if it happens to work for yours.

    +

    If the key is GLFW_KEY_UNKNOWN, the scancode is used to identify the key, otherwise the scancode is ignored. If you specify a non-printable key, or GLFW_KEY_UNKNOWN and a scancode that maps to a non-printable key, this function returns NULL but does not emit an error.

    +

    This behavior allows you to always pass in the arguments in the key callback without modification.

    +

    The printable keys are:

      +
    • GLFW_KEY_APOSTROPHE
    • +
    • GLFW_KEY_COMMA
    • +
    • GLFW_KEY_MINUS
    • +
    • GLFW_KEY_PERIOD
    • +
    • GLFW_KEY_SLASH
    • +
    • GLFW_KEY_SEMICOLON
    • +
    • GLFW_KEY_EQUAL
    • +
    • GLFW_KEY_LEFT_BRACKET
    • +
    • GLFW_KEY_RIGHT_BRACKET
    • +
    • GLFW_KEY_BACKSLASH
    • +
    • GLFW_KEY_WORLD_1
    • +
    • GLFW_KEY_WORLD_2
    • +
    • GLFW_KEY_0 to GLFW_KEY_9
    • +
    • GLFW_KEY_A to GLFW_KEY_Z
    • +
    • GLFW_KEY_KP_0 to GLFW_KEY_KP_9
    • +
    • GLFW_KEY_KP_DECIMAL
    • +
    • GLFW_KEY_KP_DIVIDE
    • +
    • GLFW_KEY_KP_MULTIPLY
    • +
    • GLFW_KEY_KP_SUBTRACT
    • +
    • GLFW_KEY_KP_ADD
    • +
    • GLFW_KEY_KP_EQUAL
    • +
    +

    Names for printable keys depend on keyboard layout, while names for non-printable keys are the same across layouts but depend on the application language and should be localized along with other user interface text.

    Parameters
    - + +
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    [in]keyThe key to query, or GLFW_KEY_UNKNOWN.
    [in]scancodeThe scancode of the key to query.
    -
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Returns
    The UTF-8 encoded, layout-specific name of the key, or NULL.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Pointer lifetime
    The returned string is allocated and freed by GLFW. You should not free it yourself. It is valid until the next call to glfwGetKeyName, or until the library is terminated.
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Joystick configuration changes
    +
    See also
    Key names
    Since
    Added in version 3.2.
    - + +

    ◆ glfwGetKeyScancode()

    + +
    +
    + + + + + + + + +
    int glfwGetKeyScancode (int key)
    +
    +

    This function returns the platform-specific scancode of the specified key.

    +

    If the key is GLFW_KEY_UNKNOWN or does not exist on the keyboard this method will return -1.

    +
    Parameters
    + + +
    [in]keyAny named key.
    +
    +
    +
    Returns
    The platform-specific scancode for the key, or -1 if an error occurred.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_INVALID_ENUM and GLFW_PLATFORM_ERROR.
    +
    Thread safety
    This function may be called from any thread.
    +
    See also
    Key input
    +
    Since
    Added in version 3.3.
    + +
    +
    + +

    ◆ glfwGetKey()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    int glfwGetKey (GLFWwindowwindow,
    int key 
    )
    +
    +

    This function returns the last state reported for the specified key to the specified window. The returned state is one of GLFW_PRESS or GLFW_RELEASE. The higher-level action GLFW_REPEAT is only reported to the key callback.

    +

    If the GLFW_STICKY_KEYS input mode is enabled, this function returns GLFW_PRESS the first time you call it for a key that was pressed, even if that key has already been released.

    +

    The key functions deal with physical keys, with key tokens named after their use on the standard US keyboard layout. If you want to input text, use the Unicode character callback instead.

    +

    The modifier key bit masks are not key tokens and cannot be used with this function.

    +

    Do not use this function to implement text input.

    +
    Parameters
    + + + +
    [in]windowThe desired window.
    [in]keyThe desired keyboard key. GLFW_KEY_UNKNOWN is not a valid key for this function.
    +
    +
    +
    Returns
    One of GLFW_PRESS or GLFW_RELEASE.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_INVALID_ENUM.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Key input
    +
    Since
    Added in version 1.0. GLFW 3: Added window handle parameter.
    + +
    +
    + +

    ◆ glfwGetMouseButton()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    int glfwGetMouseButton (GLFWwindowwindow,
    int button 
    )
    +
    +

    This function returns the last state reported for the specified mouse button to the specified window. The returned state is one of GLFW_PRESS or GLFW_RELEASE.

    +

    If the GLFW_STICKY_MOUSE_BUTTONS input mode is enabled, this function returns GLFW_PRESS the first time you call it for a mouse button that was pressed, even if that mouse button has already been released.

    +
    Parameters
    + + + +
    [in]windowThe desired window.
    [in]buttonThe desired mouse button.
    +
    +
    +
    Returns
    One of GLFW_PRESS or GLFW_RELEASE.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_INVALID_ENUM.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Mouse button input
    +
    Since
    Added in version 1.0. GLFW 3: Added window handle parameter.
    + +
    +
    + +

    ◆ glfwGetCursorPos()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void glfwGetCursorPos (GLFWwindowwindow,
    double * xpos,
    double * ypos 
    )
    +
    +

    This function returns the position of the cursor, in screen coordinates, relative to the upper-left corner of the content area of the specified window.

    +

    If the cursor is disabled (with GLFW_CURSOR_DISABLED) then the cursor position is unbounded and limited only by the minimum and maximum values of a double.

    +

    The coordinate can be converted to their integer equivalents with the floor function. Casting directly to an integer type works for positive coordinates, but fails for negative ones.

    +

    Any or all of the position arguments may be NULL. If an error occurs, all non-NULL position arguments will be set to zero.

    +
    Parameters
    + + + + +
    [in]windowThe desired window.
    [out]xposWhere to store the cursor x-coordinate, relative to the left edge of the content area, or NULL.
    [out]yposWhere to store the cursor y-coordinate, relative to the to top edge of the content area, or NULL.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Cursor position
    +
    +glfwSetCursorPos
    +
    Since
    Added in version 3.0. Replaces glfwGetMousePos.
    + +
    +
    + +

    ◆ glfwSetCursorPos()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void glfwSetCursorPos (GLFWwindowwindow,
    double xpos,
    double ypos 
    )
    +
    +

    This function sets the position, in screen coordinates, of the cursor relative to the upper-left corner of the content area of the specified window. The window must have input focus. If the window does not have input focus when this function is called, it fails silently.

    +

    Do not use this function to implement things like camera controls. GLFW already provides the GLFW_CURSOR_DISABLED cursor mode that hides the cursor, transparently re-centers it and provides unconstrained cursor motion. See glfwSetInputMode for more information.

    +

    If the cursor mode is GLFW_CURSOR_DISABLED then the cursor position is unconstrained and limited only by the minimum and maximum values of a double.

    +
    Parameters
    + + + + +
    [in]windowThe desired window.
    [in]xposThe desired x-coordinate, relative to the left edge of the content area.
    [in]yposThe desired y-coordinate, relative to the top edge of the content area.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Remarks
    Wayland: This function will only work when the cursor mode is GLFW_CURSOR_DISABLED, otherwise it will do nothing.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Cursor position
    +
    +glfwGetCursorPos
    +
    Since
    Added in version 3.0. Replaces glfwSetMousePos.
    + +
    +
    + +

    ◆ glfwCreateCursor()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GLFWcursor* glfwCreateCursor (const GLFWimageimage,
    int xhot,
    int yhot 
    )
    +
    +

    Creates a new custom cursor image that can be set for a window with glfwSetCursor. The cursor can be destroyed with glfwDestroyCursor. Any remaining cursors are destroyed by glfwTerminate.

    +

    The pixels are 32-bit, little-endian, non-premultiplied RGBA, i.e. eight bits per channel with the red channel first. They are arranged canonically as packed sequential rows, starting from the top-left corner.

    +

    The cursor hotspot is specified in pixels, relative to the upper-left corner of the cursor image. Like all other coordinate systems in GLFW, the X-axis points to the right and the Y-axis points down.

    +
    Parameters
    + + + + +
    [in]imageThe desired cursor image.
    [in]xhotThe desired x-coordinate, in pixels, of the cursor hotspot.
    [in]yhotThe desired y-coordinate, in pixels, of the cursor hotspot.
    +
    +
    +
    Returns
    The handle of the created cursor, or NULL if an error occurred.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Pointer lifetime
    The specified image data is copied before this function returns.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Cursor objects
    +
    +glfwDestroyCursor
    +
    +glfwCreateStandardCursor
    +
    Since
    Added in version 3.1.
    + +
    +
    + +

    ◆ glfwCreateStandardCursor()

    + +
    +
    + + + + + + + + +
    GLFWcursor* glfwCreateStandardCursor (int shape)
    +
    +

    Returns a cursor with a standard shape, that can be set for a window with glfwSetCursor.

    +
    Parameters
    + + +
    [in]shapeOne of the standard shapes.
    +
    +
    +
    Returns
    A new cursor ready to use or NULL if an error occurred.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_INVALID_ENUM and GLFW_PLATFORM_ERROR.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Cursor objects
    +
    +glfwCreateCursor
    +
    Since
    Added in version 3.1.
    + +
    +
    + +

    ◆ glfwDestroyCursor()

    + +
    +
    + + + + + + + + +
    void glfwDestroyCursor (GLFWcursorcursor)
    +
    +

    This function destroys a cursor previously created with glfwCreateCursor. Any remaining cursors will be destroyed by glfwTerminate.

    +

    If the specified cursor is current for any window, that window will be reverted to the default cursor. This does not affect the cursor mode.

    +
    Parameters
    + + +
    [in]cursorThe cursor object to destroy.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Reentrancy
    This function must not be called from a callback.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Cursor objects
    +
    +glfwCreateCursor
    +
    Since
    Added in version 3.1.
    + +
    +
    + +

    ◆ glfwSetCursor()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void glfwSetCursor (GLFWwindowwindow,
    GLFWcursorcursor 
    )
    +
    +

    This function sets the cursor image to be used when the cursor is over the content area of the specified window. The set cursor will only be visible when the cursor mode of the window is GLFW_CURSOR_NORMAL.

    +

    On some platforms, the set cursor may not be visible unless the window also has input focus.

    +
    Parameters
    + + + +
    [in]windowThe window to set the cursor for.
    [in]cursorThe cursor to set, or NULL to switch back to the default arrow cursor.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Cursor objects
    +
    Since
    Added in version 3.1.
    + +
    +
    + +

    ◆ glfwSetKeyCallback()

    +
    @@ -1549,12 +1200,99 @@ Key and button actions
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    Thread safety
    This function must only be called from the main thread.
    See also
    Key input
    -
    Since
    Added in version 1.0.
    -
    GLFW 3: Added window handle parameter and return value.
    +
    Since
    Added in version 1.0. GLFW 3: Added window handle parameter and return value.
    - + +

    ◆ glfwSetCharCallback()

    + +
    +
    +
    + + + + + + + + + + + + + + + + + +
    GLFWcharfun glfwSetCharCallback (GLFWwindowwindow,
    GLFWcharfun cbfun 
    )
    +
    +

    This function sets the character callback of the specified window, which is called when a Unicode character is input.

    +

    The character callback is intended for Unicode text input. As it deals with characters, it is keyboard layout dependent, whereas the key callback is not. Characters do not map 1:1 to physical keys, as a key may produce zero, one or more characters. If you want to know whether a specific physical key was pressed or released, see the key callback instead.

    +

    The character callback behaves as system text input normally does and will not be called if modifier keys are held down that would prevent normal text input on that platform, for example a Super (Command) key on macOS or Alt key on Windows.

    +
    Parameters
    + + + +
    [in]windowThe window whose callback to set.
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    +
    +
    +
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Text input
    +
    Since
    Added in version 2.4. GLFW 3: Added window handle parameter and return value.
    + +
    +
    + +

    ◆ glfwSetCharModsCallback()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLFWcharmodsfun glfwSetCharModsCallback (GLFWwindowwindow,
    GLFWcharmodsfun cbfun 
    )
    +
    +

    This function sets the character with modifiers callback of the specified window, which is called when a Unicode character is input regardless of what modifier keys are used.

    +

    The character with modifiers callback is intended for implementing custom Unicode character input. For regular Unicode text input, see the character callback. Like the character callback, the character with modifiers callback deals with characters and is keyboard layout dependent. Characters do not map 1:1 to physical keys, as a key may produce zero, one or more characters. If you want to know whether a specific physical key was pressed or released, see the key callback instead.

    +
    Parameters
    + + + +
    [in]windowThe window whose callback to set.
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    +
    +
    +
    Returns
    The previously set callback, or NULL if no callback was set or an error occurred.
    +
    Deprecated:
    Scheduled for removal in version 4.0.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Text input
    +
    Since
    Added in version 3.1.
    + +
    +
    + +

    ◆ glfwSetMouseButtonCallback()

    +
    @@ -1590,12 +1328,95 @@ Key and button actions
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    Thread safety
    This function must only be called from the main thread.
    See also
    Mouse button input
    -
    Since
    Added in version 1.0.
    -
    GLFW 3: Added window handle parameter and return value.
    +
    Since
    Added in version 1.0. GLFW 3: Added window handle parameter and return value.
    - + +

    ◆ glfwSetCursorPosCallback()

    + +
    +
    +
    + + + + + + + + + + + + + + + + + +
    GLFWcursorposfun glfwSetCursorPosCallback (GLFWwindowwindow,
    GLFWcursorposfun cbfun 
    )
    +
    +

    This function sets the cursor position callback of the specified window, which is called when the cursor is moved. The callback is provided with the position, in screen coordinates, relative to the upper-left corner of the content area of the window.

    +
    Parameters
    + + + +
    [in]windowThe window whose callback to set.
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    +
    +
    +
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Cursor position
    +
    Since
    Added in version 3.0. Replaces glfwSetMousePosCallback.
    + +
    +
    + +

    ◆ glfwSetCursorEnterCallback()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLFWcursorenterfun glfwSetCursorEnterCallback (GLFWwindowwindow,
    GLFWcursorenterfun cbfun 
    )
    +
    +

    This function sets the cursor boundary crossing callback of the specified window, which is called when the cursor enters or leaves the content area of the window.

    +
    Parameters
    + + + +
    [in]windowThe window whose callback to set.
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    +
    +
    +
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Cursor enter/leave events
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ glfwSetScrollCallback()

    +
    @@ -1635,7 +1456,659 @@ Key and button actions - + +

    ◆ glfwSetDropCallback()

    + +
    +
    +
    + + + + + + + + + + + + + + + + + +
    GLFWdropfun glfwSetDropCallback (GLFWwindowwindow,
    GLFWdropfun cbfun 
    )
    +
    +

    This function sets the file drop callback of the specified window, which is called when one or more dragged files are dropped on the window.

    +

    Because the path array and its strings may have been generated specifically for that event, they are not guaranteed to be valid after the callback has returned. If you wish to use them after the callback returns, you need to make a deep copy.

    +
    Parameters
    + + + +
    [in]windowThe window whose callback to set.
    [in]cbfunThe new file drop callback, or NULL to remove the currently set callback.
    +
    +
    +
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Remarks
    Wayland: File drop is currently unimplemented.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Path drop input
    +
    Since
    Added in version 3.1.
    + +
    +
    + +

    ◆ glfwJoystickPresent()

    + +
    +
    + + + + + + + + +
    int glfwJoystickPresent (int jid)
    +
    +

    This function returns whether the specified joystick is present.

    +

    There is no need to call this function before other functions that accept a joystick ID, as they all check for presence before performing any other work.

    +
    Parameters
    + + +
    [in]jidThe joystick to query.
    +
    +
    +
    Returns
    GLFW_TRUE if the joystick is present, or GLFW_FALSE otherwise.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_INVALID_ENUM and GLFW_PLATFORM_ERROR.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Joystick input
    +
    Since
    Added in version 3.0. Replaces glfwGetJoystickParam.
    + +
    +
    + +

    ◆ glfwGetJoystickAxes()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    const float* glfwGetJoystickAxes (int jid,
    int * count 
    )
    +
    +

    This function returns the values of all axes of the specified joystick. Each element in the array is a value between -1.0 and 1.0.

    +

    If the specified joystick is not present this function will return NULL but will not generate an error. This can be used instead of first calling glfwJoystickPresent.

    +
    Parameters
    + + + +
    [in]jidThe joystick to query.
    [out]countWhere to store the number of axis values in the returned array. This is set to zero if the joystick is not present or an error occurred.
    +
    +
    +
    Returns
    An array of axis values, or NULL if the joystick is not present or an error occurred.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_INVALID_ENUM and GLFW_PLATFORM_ERROR.
    +
    Pointer lifetime
    The returned array is allocated and freed by GLFW. You should not free it yourself. It is valid until the specified joystick is disconnected or the library is terminated.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Joystick axis states
    +
    Since
    Added in version 3.0. Replaces glfwGetJoystickPos.
    + +
    +
    + +

    ◆ glfwGetJoystickButtons()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    const unsigned char* glfwGetJoystickButtons (int jid,
    int * count 
    )
    +
    +

    This function returns the state of all buttons of the specified joystick. Each element in the array is either GLFW_PRESS or GLFW_RELEASE.

    +

    For backward compatibility with earlier versions that did not have glfwGetJoystickHats, the button array also includes all hats, each represented as four buttons. The hats are in the same order as returned by glfwGetJoystickHats and are in the order up, right, down and left. To disable these extra buttons, set the GLFW_JOYSTICK_HAT_BUTTONS init hint before initialization.

    +

    If the specified joystick is not present this function will return NULL but will not generate an error. This can be used instead of first calling glfwJoystickPresent.

    +
    Parameters
    + + + +
    [in]jidThe joystick to query.
    [out]countWhere to store the number of button states in the returned array. This is set to zero if the joystick is not present or an error occurred.
    +
    +
    +
    Returns
    An array of button states, or NULL if the joystick is not present or an error occurred.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_INVALID_ENUM and GLFW_PLATFORM_ERROR.
    +
    Pointer lifetime
    The returned array is allocated and freed by GLFW. You should not free it yourself. It is valid until the specified joystick is disconnected or the library is terminated.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Joystick button states
    +
    Since
    Added in version 2.2. GLFW 3: Changed to return a dynamic array.
    + +
    +
    + +

    ◆ glfwGetJoystickHats()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    const unsigned char* glfwGetJoystickHats (int jid,
    int * count 
    )
    +
    +

    This function returns the state of all hats of the specified joystick. Each element in the array is one of the following values:

    + + + + + + + + + + + + + + + + + + + + + +
    Name Value
    GLFW_HAT_CENTERED 0
    GLFW_HAT_UP 1
    GLFW_HAT_RIGHT 2
    GLFW_HAT_DOWN 4
    GLFW_HAT_LEFT 8
    GLFW_HAT_RIGHT_UP GLFW_HAT_RIGHT | GLFW_HAT_UP
    GLFW_HAT_RIGHT_DOWN GLFW_HAT_RIGHT | GLFW_HAT_DOWN
    GLFW_HAT_LEFT_UP GLFW_HAT_LEFT | GLFW_HAT_UP
    GLFW_HAT_LEFT_DOWN GLFW_HAT_LEFT | GLFW_HAT_DOWN
    +

    The diagonal directions are bitwise combinations of the primary (up, right, down and left) directions and you can test for these individually by ANDing it with the corresponding direction.

    +
    if (hats[2] & GLFW_HAT_RIGHT)
    {
    // State of hat 2 could be right-up, right or right-down
    }

    If the specified joystick is not present this function will return NULL but will not generate an error. This can be used instead of first calling glfwJoystickPresent.

    +
    Parameters
    + + + +
    [in]jidThe joystick to query.
    [out]countWhere to store the number of hat states in the returned array. This is set to zero if the joystick is not present or an error occurred.
    +
    +
    +
    Returns
    An array of hat states, or NULL if the joystick is not present or an error occurred.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_INVALID_ENUM and GLFW_PLATFORM_ERROR.
    +
    Pointer lifetime
    The returned array is allocated and freed by GLFW. You should not free it yourself. It is valid until the specified joystick is disconnected, this function is called again for that joystick or the library is terminated.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Joystick hat states
    +
    Since
    Added in version 3.3.
    + +
    +
    + +

    ◆ glfwGetJoystickName()

    + +
    +
    + + + + + + + + +
    const char* glfwGetJoystickName (int jid)
    +
    +

    This function returns the name, encoded as UTF-8, of the specified joystick. The returned string is allocated and freed by GLFW. You should not free it yourself.

    +

    If the specified joystick is not present this function will return NULL but will not generate an error. This can be used instead of first calling glfwJoystickPresent.

    +
    Parameters
    + + +
    [in]jidThe joystick to query.
    +
    +
    +
    Returns
    The UTF-8 encoded name of the joystick, or NULL if the joystick is not present or an error occurred.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_INVALID_ENUM and GLFW_PLATFORM_ERROR.
    +
    Pointer lifetime
    The returned string is allocated and freed by GLFW. You should not free it yourself. It is valid until the specified joystick is disconnected or the library is terminated.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Joystick name
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ glfwGetJoystickGUID()

    + +
    +
    + + + + + + + + +
    const char* glfwGetJoystickGUID (int jid)
    +
    +

    This function returns the SDL compatible GUID, as a UTF-8 encoded hexadecimal string, of the specified joystick. The returned string is allocated and freed by GLFW. You should not free it yourself.

    +

    The GUID is what connects a joystick to a gamepad mapping. A connected joystick will always have a GUID even if there is no gamepad mapping assigned to it.

    +

    If the specified joystick is not present this function will return NULL but will not generate an error. This can be used instead of first calling glfwJoystickPresent.

    +

    The GUID uses the format introduced in SDL 2.0.5. This GUID tries to uniquely identify the make and model of a joystick but does not identify a specific unit, e.g. all wired Xbox 360 controllers will have the same GUID on that platform. The GUID for a unit may vary between platforms depending on what hardware information the platform specific APIs provide.

    +
    Parameters
    + + +
    [in]jidThe joystick to query.
    +
    +
    +
    Returns
    The UTF-8 encoded GUID of the joystick, or NULL if the joystick is not present or an error occurred.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_INVALID_ENUM and GLFW_PLATFORM_ERROR.
    +
    Pointer lifetime
    The returned string is allocated and freed by GLFW. You should not free it yourself. It is valid until the specified joystick is disconnected or the library is terminated.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Gamepad input
    +
    Since
    Added in version 3.3.
    + +
    +
    + +

    ◆ glfwSetJoystickUserPointer()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void glfwSetJoystickUserPointer (int jid,
    void * pointer 
    )
    +
    +

    This function sets the user-defined pointer of the specified joystick. The current value is retained until the joystick is disconnected. The initial value is NULL.

    +

    This function may be called from the joystick callback, even for a joystick that is being disconnected.

    +
    Parameters
    + + + +
    [in]jidThe joystick whose pointer to set.
    [in]pointerThe new value.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    +
    See also
    Joystick user pointer
    +
    +glfwGetJoystickUserPointer
    +
    Since
    Added in version 3.3.
    + +
    +
    + +

    ◆ glfwGetJoystickUserPointer()

    + +
    +
    + + + + + + + + +
    void* glfwGetJoystickUserPointer (int jid)
    +
    +

    This function returns the current value of the user-defined pointer of the specified joystick. The initial value is NULL.

    +

    This function may be called from the joystick callback, even for a joystick that is being disconnected.

    +
    Parameters
    + + +
    [in]jidThe joystick whose pointer to return.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    +
    See also
    Joystick user pointer
    +
    +glfwSetJoystickUserPointer
    +
    Since
    Added in version 3.3.
    + +
    +
    + +

    ◆ glfwJoystickIsGamepad()

    + +
    +
    + + + + + + + + +
    int glfwJoystickIsGamepad (int jid)
    +
    +

    This function returns whether the specified joystick is both present and has a gamepad mapping.

    +

    If the specified joystick is present but does not have a gamepad mapping this function will return GLFW_FALSE but will not generate an error. Call glfwJoystickPresent to check if a joystick is present regardless of whether it has a mapping.

    +
    Parameters
    + + +
    [in]jidThe joystick to query.
    +
    +
    +
    Returns
    GLFW_TRUE if a joystick is both present and has a gamepad mapping, or GLFW_FALSE otherwise.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_INVALID_ENUM.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Gamepad input
    +
    +glfwGetGamepadState
    +
    Since
    Added in version 3.3.
    + +
    +
    + +

    ◆ glfwSetJoystickCallback()

    + +
    +
    + + + + + + + + +
    GLFWjoystickfun glfwSetJoystickCallback (GLFWjoystickfun cbfun)
    +
    +

    This function sets the joystick configuration callback, or removes the currently set callback. This is called when a joystick is connected to or disconnected from the system.

    +

    For joystick connection and disconnection events to be delivered on all platforms, you need to call one of the event processing functions. Joystick disconnection may also be detected and the callback called by joystick functions. The function will then return whatever it returns if the joystick is not present.

    +
    Parameters
    + + +
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    +
    +
    +
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Joystick configuration changes
    +
    Since
    Added in version 3.2.
    + +
    +
    + +

    ◆ glfwUpdateGamepadMappings()

    + +
    +
    + + + + + + + + +
    int glfwUpdateGamepadMappings (const char * string)
    +
    +

    This function parses the specified ASCII encoded string and updates the internal list with any gamepad mappings it finds. This string may contain either a single gamepad mapping or many mappings separated by newlines. The parser supports the full format of the gamecontrollerdb.txt source file including empty lines and comments.

    +

    See Gamepad mappings for a description of the format.

    +

    If there is already a gamepad mapping for a given GUID in the internal list, it will be replaced by the one passed to this function. If the library is terminated and re-initialized the internal list will revert to the built-in default.

    +
    Parameters
    + + +
    [in]stringThe string containing the gamepad mappings.
    +
    +
    +
    Returns
    GLFW_TRUE if successful, or GLFW_FALSE if an error occurred.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_INVALID_VALUE.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Gamepad input
    +
    +glfwJoystickIsGamepad
    +
    +glfwGetGamepadName
    +
    Since
    Added in version 3.3.
    + +
    +
    + +

    ◆ glfwGetGamepadName()

    + +
    +
    + + + + + + + + +
    const char* glfwGetGamepadName (int jid)
    +
    +

    This function returns the human-readable name of the gamepad from the gamepad mapping assigned to the specified joystick.

    +

    If the specified joystick is not present or does not have a gamepad mapping this function will return NULL but will not generate an error. Call glfwJoystickPresent to check whether it is present regardless of whether it has a mapping.

    +
    Parameters
    + + +
    [in]jidThe joystick to query.
    +
    +
    +
    Returns
    The UTF-8 encoded name of the gamepad, or NULL if the joystick is not present, does not have a mapping or an error occurred.
    +
    Pointer lifetime
    The returned string is allocated and freed by GLFW. You should not free it yourself. It is valid until the specified joystick is disconnected, the gamepad mappings are updated or the library is terminated.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Gamepad input
    +
    +glfwJoystickIsGamepad
    +
    Since
    Added in version 3.3.
    + +
    +
    + +

    ◆ glfwGetGamepadState()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    int glfwGetGamepadState (int jid,
    GLFWgamepadstatestate 
    )
    +
    +

    This function retrives the state of the specified joystick remapped to an Xbox-like gamepad.

    +

    If the specified joystick is not present or does not have a gamepad mapping this function will return GLFW_FALSE but will not generate an error. Call glfwJoystickPresent to check whether it is present regardless of whether it has a mapping.

    +

    The Guide button may not be available for input as it is often hooked by the system or the Steam client.

    +

    Not all devices have all the buttons or axes provided by GLFWgamepadstate. Unavailable buttons and axes will always report GLFW_RELEASE and 0.0 respectively.

    +
    Parameters
    + + + +
    [in]jidThe joystick to query.
    [out]stateThe gamepad input state of the joystick.
    +
    +
    +
    Returns
    GLFW_TRUE if successful, or GLFW_FALSE if no joystick is connected, it has no gamepad mapping or an error occurred.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_INVALID_ENUM.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Gamepad input
    +
    +glfwUpdateGamepadMappings
    +
    +glfwJoystickIsGamepad
    +
    Since
    Added in version 3.3.
    + +
    +
    + +

    ◆ glfwSetClipboardString()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void glfwSetClipboardString (GLFWwindowwindow,
    const char * string 
    )
    +
    +

    This function sets the system clipboard to the specified, UTF-8 encoded string.

    +
    Parameters
    + + + +
    [in]windowDeprecated. Any valid window or NULL.
    [in]stringA UTF-8 encoded string.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Pointer lifetime
    The specified string is copied before this function returns.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Clipboard input and output
    +
    +glfwGetClipboardString
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ glfwGetClipboardString()

    + +
    +
    + + + + + + + + +
    const char* glfwGetClipboardString (GLFWwindowwindow)
    +
    +

    This function returns the contents of the system clipboard, if it contains or is convertible to a UTF-8 encoded string. If the clipboard is empty or if its contents cannot be converted, NULL is returned and a GLFW_FORMAT_UNAVAILABLE error is generated.

    +
    Parameters
    + + +
    [in]windowDeprecated. Any valid window or NULL.
    +
    +
    +
    Returns
    The contents of the clipboard as a UTF-8 encoded string, or NULL if an error occurred.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Pointer lifetime
    The returned string is allocated and freed by GLFW. You should not free it yourself. It is valid until the next call to glfwGetClipboardString or glfwSetClipboardString, or until the library is terminated.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Clipboard input and output
    +
    +glfwSetClipboardString
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ glfwGetTime()

    + +
    +
    + + + + + + + + +
    double glfwGetTime (void )
    +
    +

    This function returns the value of the GLFW timer. Unless the timer has been set using glfwSetTime, the timer measures time elapsed since GLFW was initialized.

    +

    The resolution of the timer is system dependent, but is usually on the order of a few micro- or nanoseconds. It uses the highest-resolution monotonic time source on each supported platform.

    +
    Returns
    The current value, in seconds, or zero if an error occurred.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function may be called from any thread. Reading and writing of the internal timer offset is not atomic, so it needs to be externally synchronized with calls to glfwSetTime.
    +
    See also
    Time input
    +
    Since
    Added in version 1.0.
    + +
    +
    + +

    ◆ glfwSetTime()

    +
    @@ -1661,12 +2134,64 @@ Key and button actions
    See also
    Time input
    Since
    Added in version 2.2.
    + + + +

    ◆ glfwGetTimerValue()

    + +
    +
    +
    + + + + + + + +
    uint64_t glfwGetTimerValue (void )
    +
    +

    This function returns the current value of the raw timer, measured in 1 / frequency seconds. To get the frequency, call glfwGetTimerFrequency.

    +
    Returns
    The value of the timer, or zero if an error occurred.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function may be called from any thread.
    +
    See also
    Time input
    +
    +glfwGetTimerFrequency
    +
    Since
    Added in version 3.2.
    + +
    +
    + +

    ◆ glfwGetTimerFrequency()

    + +
    +
    + + + + + + + + +
    uint64_t glfwGetTimerFrequency (void )
    +
    +

    This function returns the frequency, in Hz, of the raw timer.

    +
    Returns
    The frequency of the timer, in Hz, or zero if an error occurred.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function may be called from any thread.
    +
    See also
    Time input
    +
    +glfwGetTimerValue
    +
    Since
    Added in version 3.2.
    +
    diff --git a/ref/glfw/docs/html/group__joysticks.html b/ref/glfw/docs/html/group__joysticks.html index d6c31b2b..8c86681b 100644 --- a/ref/glfw/docs/html/group__joysticks.html +++ b/ref/glfw/docs/html/group__joysticks.html @@ -3,7 +3,7 @@ - + GLFW: Joysticks @@ -11,9 +11,6 @@ - @@ -21,45 +18,31 @@
    - + - + + + +
    +

    Description

    +

    See joystick input for how these are used.

    @@ -120,10 +105,10 @@ Macros

    Macros

    #define GLFW_JOYSTICK_LAST   GLFW_JOYSTICK_16
     
    -

    Detailed Description

    -

    See joystick input for how these are used.

    Macro Definition Documentation

    - + +

    ◆ GLFW_JOYSTICK_1

    +
    @@ -135,91 +120,9 @@ Macros - -
    -
    -
    - - - -
    #define GLFW_JOYSTICK_10   9
    -
    + +

    ◆ GLFW_JOYSTICK_2

    -
    -
    - -
    -
    - - - - -
    #define GLFW_JOYSTICK_11   10
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_JOYSTICK_12   11
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_JOYSTICK_13   12
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_JOYSTICK_14   13
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_JOYSTICK_15   14
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_JOYSTICK_16   15
    -
    - -
    -
    -
    @@ -231,7 +134,9 @@ Macros - + +

    ◆ GLFW_JOYSTICK_3

    +
    @@ -243,7 +148,9 @@ Macros - + +

    ◆ GLFW_JOYSTICK_4

    +
    @@ -255,7 +162,9 @@ Macros - + +

    ◆ GLFW_JOYSTICK_5

    +
    @@ -267,7 +176,9 @@ Macros - + +

    ◆ GLFW_JOYSTICK_6

    +
    @@ -279,7 +190,9 @@ Macros - + +

    ◆ GLFW_JOYSTICK_7

    +
    @@ -291,7 +204,9 @@ Macros - + +

    ◆ GLFW_JOYSTICK_8

    +
    @@ -303,7 +218,9 @@ Macros - + +

    ◆ GLFW_JOYSTICK_9

    +
    @@ -315,7 +232,107 @@ Macros - + +

    ◆ GLFW_JOYSTICK_10

    + +
    +
    +
    + + + +
    #define GLFW_JOYSTICK_10   9
    +
    + +
    +
    + +

    ◆ GLFW_JOYSTICK_11

    + +
    +
    + + + + +
    #define GLFW_JOYSTICK_11   10
    +
    + +
    +
    + +

    ◆ GLFW_JOYSTICK_12

    + +
    +
    + + + + +
    #define GLFW_JOYSTICK_12   11
    +
    + +
    +
    + +

    ◆ GLFW_JOYSTICK_13

    + +
    +
    + + + + +
    #define GLFW_JOYSTICK_13   12
    +
    + +
    +
    + +

    ◆ GLFW_JOYSTICK_14

    + +
    +
    + + + + +
    #define GLFW_JOYSTICK_14   13
    +
    + +
    +
    + +

    ◆ GLFW_JOYSTICK_15

    + +
    +
    + + + + +
    #define GLFW_JOYSTICK_15   14
    +
    + +
    +
    + +

    ◆ GLFW_JOYSTICK_16

    + +
    +
    + + + + +
    #define GLFW_JOYSTICK_16   15
    +
    + +
    +
    + +

    ◆ GLFW_JOYSTICK_LAST

    +
    @@ -330,7 +347,7 @@ Macros diff --git a/ref/glfw/docs/html/group__keys.html b/ref/glfw/docs/html/group__keys.html index 8d81090a..6bc922fc 100644 --- a/ref/glfw/docs/html/group__keys.html +++ b/ref/glfw/docs/html/group__keys.html @@ -3,7 +3,7 @@ - +GLFW: Keyboard keys @@ -11,9 +11,6 @@ - @@ -21,45 +18,31 @@
    - + - + + + +
    Keyboard keys
    +

    Description

    +

    See key input for how these are used.

    +

    These key codes are inspired by the USB HID Usage Tables v1.12 (p. 53-60), but re-arranged to map to 7-bit ASCII for printable keys (function keys are put in the 256+ range).

    +

    The naming of the key codes follow these rules:

      +
    • The US keyboard layout is used
    • +
    • Names of printable alpha-numeric characters are used (e.g. "A", "R", "3", etc.)
    • +
    • For non-alphanumeric characters, Unicode:ish names are used (e.g. "COMMA", "LEFT_SQUARE_BRACKET", etc.). Note that some names do not correspond to the Unicode standard (usually for brevity)
    • +
    • Keys that lack a clear US mapping are named "WORLD_x"
    • +
    • For non-printable keys, custom names are used (e.g. "F4", "BACKSPACE", etc.)
    • +
    @@ -330,1374 +323,10 @@ Macros

    Macros

    #define GLFW_KEY_LAST   GLFW_KEY_MENU
     
    -

    Detailed Description

    -

    See key input for how these are used.

    -

    These key codes are inspired by the USB HID Usage Tables v1.12 (p. 53-60), but re-arranged to map to 7-bit ASCII for printable keys (function keys are put in the 256+ range).

    -

    The naming of the key codes follow these rules:

      -
    • The US keyboard layout is used
    • -
    • Names of printable alpha-numeric characters are used (e.g. "A", "R", "3", etc.)
    • -
    • For non-alphanumeric characters, Unicode:ish names are used (e.g. "COMMA", "LEFT_SQUARE_BRACKET", etc.). Note that some names do not correspond to the Unicode standard (usually for brevity)
    • -
    • Keys that lack a clear US mapping are named "WORLD_x"
    • -
    • For non-printable keys, custom names are used (e.g. "F4", "BACKSPACE", etc.)
    • -

    Macro Definition Documentation

    - -
    -
    - - - - -
    #define GLFW_KEY_0   48
    -
    + +

    ◆ GLFW_KEY_UNKNOWN

    -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_1   49
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_2   50
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_3   51
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_4   52
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_5   53
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_6   54
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_7   55
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_8   56
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_9   57
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_A   65
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_APOSTROPHE   39 /* ' */
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_B   66
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_BACKSLASH   92 /* \ */
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_BACKSPACE   259
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_C   67
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_CAPS_LOCK   280
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_COMMA   44 /* , */
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_D   68
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_DELETE   261
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_DOWN   264
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_E   69
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_END   269
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_ENTER   257
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_EQUAL   61 /* = */
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_ESCAPE   256
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_F   70
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_F1   290
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_F10   299
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_F11   300
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_F12   301
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_F13   302
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_F14   303
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_F15   304
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_F16   305
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_F17   306
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_F18   307
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_F19   308
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_F2   291
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_F20   309
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_F21   310
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_F22   311
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_F23   312
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_F24   313
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_F25   314
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_F3   292
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_F4   293
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_F5   294
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_F6   295
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_F7   296
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_F8   297
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_F9   298
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_G   71
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_GRAVE_ACCENT   96 /* ` */
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_H   72
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_HOME   268
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_I   73
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_INSERT   260
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_J   74
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_K   75
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_KP_0   320
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_KP_1   321
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_KP_2   322
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_KP_3   323
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_KP_4   324
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_KP_5   325
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_KP_6   326
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_KP_7   327
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_KP_8   328
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_KP_9   329
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_KP_ADD   334
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_KP_DECIMAL   330
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_KP_DIVIDE   331
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_KP_ENTER   335
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_KP_EQUAL   336
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_KP_MULTIPLY   332
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_KP_SUBTRACT   333
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_L   76
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_LAST   GLFW_KEY_MENU
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_LEFT   263
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_LEFT_ALT   342
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_LEFT_BRACKET   91 /* [ */
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_LEFT_CONTROL   341
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_LEFT_SHIFT   340
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_LEFT_SUPER   343
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_M   77
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_MENU   348
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_MINUS   45 /* - */
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_N   78
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_NUM_LOCK   282
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_O   79
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_P   80
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_PAGE_DOWN   267
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_PAGE_UP   266
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_PAUSE   284
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_PERIOD   46 /* . */
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_PRINT_SCREEN   283
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_Q   81
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_R   82
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_RIGHT   262
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_RIGHT_ALT   346
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_RIGHT_BRACKET   93 /* ] */
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_RIGHT_CONTROL   345
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_RIGHT_SHIFT   344
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_RIGHT_SUPER   347
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_S   83
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_SCROLL_LOCK   281
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_SEMICOLON   59 /* ; */
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_SLASH   47 /* / */
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_SPACE   32
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_T   84
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_TAB   258
    -
    - -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_U   85
    -
    - -
    -
    -
    @@ -1709,19 +338,555 @@ Macros - + +

    ◆ GLFW_KEY_SPACE

    +
    - +
    #define GLFW_KEY_UP   265#define GLFW_KEY_SPACE   32
    - + +

    ◆ GLFW_KEY_APOSTROPHE

    + +
    +
    + + + + +
    #define GLFW_KEY_APOSTROPHE   39 /* ' */
    +
    + +
    +
    + +

    ◆ GLFW_KEY_COMMA

    + +
    +
    + + + + +
    #define GLFW_KEY_COMMA   44 /* , */
    +
    + +
    +
    + +

    ◆ GLFW_KEY_MINUS

    + +
    +
    + + + + +
    #define GLFW_KEY_MINUS   45 /* - */
    +
    + +
    +
    + +

    ◆ GLFW_KEY_PERIOD

    + +
    +
    + + + + +
    #define GLFW_KEY_PERIOD   46 /* . */
    +
    + +
    +
    + +

    ◆ GLFW_KEY_SLASH

    + +
    +
    + + + + +
    #define GLFW_KEY_SLASH   47 /* / */
    +
    + +
    +
    + +

    ◆ GLFW_KEY_0

    + +
    +
    + + + + +
    #define GLFW_KEY_0   48
    +
    + +
    +
    + +

    ◆ GLFW_KEY_1

    + +
    +
    + + + + +
    #define GLFW_KEY_1   49
    +
    + +
    +
    + +

    ◆ GLFW_KEY_2

    + +
    +
    + + + + +
    #define GLFW_KEY_2   50
    +
    + +
    +
    + +

    ◆ GLFW_KEY_3

    + +
    +
    + + + + +
    #define GLFW_KEY_3   51
    +
    + +
    +
    + +

    ◆ GLFW_KEY_4

    + +
    +
    + + + + +
    #define GLFW_KEY_4   52
    +
    + +
    +
    + +

    ◆ GLFW_KEY_5

    + +
    +
    + + + + +
    #define GLFW_KEY_5   53
    +
    + +
    +
    + +

    ◆ GLFW_KEY_6

    + +
    +
    + + + + +
    #define GLFW_KEY_6   54
    +
    + +
    +
    + +

    ◆ GLFW_KEY_7

    + +
    +
    + + + + +
    #define GLFW_KEY_7   55
    +
    + +
    +
    + +

    ◆ GLFW_KEY_8

    + +
    +
    + + + + +
    #define GLFW_KEY_8   56
    +
    + +
    +
    + +

    ◆ GLFW_KEY_9

    + +
    +
    + + + + +
    #define GLFW_KEY_9   57
    +
    + +
    +
    + +

    ◆ GLFW_KEY_SEMICOLON

    + +
    +
    + + + + +
    #define GLFW_KEY_SEMICOLON   59 /* ; */
    +
    + +
    +
    + +

    ◆ GLFW_KEY_EQUAL

    + +
    +
    + + + + +
    #define GLFW_KEY_EQUAL   61 /* = */
    +
    + +
    +
    + +

    ◆ GLFW_KEY_A

    + +
    +
    + + + + +
    #define GLFW_KEY_A   65
    +
    + +
    +
    + +

    ◆ GLFW_KEY_B

    + +
    +
    + + + + +
    #define GLFW_KEY_B   66
    +
    + +
    +
    + +

    ◆ GLFW_KEY_C

    + +
    +
    + + + + +
    #define GLFW_KEY_C   67
    +
    + +
    +
    + +

    ◆ GLFW_KEY_D

    + +
    +
    + + + + +
    #define GLFW_KEY_D   68
    +
    + +
    +
    + +

    ◆ GLFW_KEY_E

    + +
    +
    + + + + +
    #define GLFW_KEY_E   69
    +
    + +
    +
    + +

    ◆ GLFW_KEY_F

    + +
    +
    + + + + +
    #define GLFW_KEY_F   70
    +
    + +
    +
    + +

    ◆ GLFW_KEY_G

    + +
    +
    + + + + +
    #define GLFW_KEY_G   71
    +
    + +
    +
    + +

    ◆ GLFW_KEY_H

    + +
    +
    + + + + +
    #define GLFW_KEY_H   72
    +
    + +
    +
    + +

    ◆ GLFW_KEY_I

    + +
    +
    + + + + +
    #define GLFW_KEY_I   73
    +
    + +
    +
    + +

    ◆ GLFW_KEY_J

    + +
    +
    + + + + +
    #define GLFW_KEY_J   74
    +
    + +
    +
    + +

    ◆ GLFW_KEY_K

    + +
    +
    + + + + +
    #define GLFW_KEY_K   75
    +
    + +
    +
    + +

    ◆ GLFW_KEY_L

    + +
    +
    + + + + +
    #define GLFW_KEY_L   76
    +
    + +
    +
    + +

    ◆ GLFW_KEY_M

    + +
    +
    + + + + +
    #define GLFW_KEY_M   77
    +
    + +
    +
    + +

    ◆ GLFW_KEY_N

    + +
    +
    + + + + +
    #define GLFW_KEY_N   78
    +
    + +
    +
    + +

    ◆ GLFW_KEY_O

    + +
    +
    + + + + +
    #define GLFW_KEY_O   79
    +
    + +
    +
    + +

    ◆ GLFW_KEY_P

    + +
    +
    + + + + +
    #define GLFW_KEY_P   80
    +
    + +
    +
    + +

    ◆ GLFW_KEY_Q

    + +
    +
    + + + + +
    #define GLFW_KEY_Q   81
    +
    + +
    +
    + +

    ◆ GLFW_KEY_R

    + +
    +
    + + + + +
    #define GLFW_KEY_R   82
    +
    + +
    +
    + +

    ◆ GLFW_KEY_S

    + +
    +
    + + + + +
    #define GLFW_KEY_S   83
    +
    + +
    +
    + +

    ◆ GLFW_KEY_T

    + +
    +
    + + + + +
    #define GLFW_KEY_T   84
    +
    + +
    +
    + +

    ◆ GLFW_KEY_U

    + +
    +
    + + + + +
    #define GLFW_KEY_U   85
    +
    + +
    +
    + +

    ◆ GLFW_KEY_V

    +
    @@ -1733,7 +898,9 @@ Macros - + +

    ◆ GLFW_KEY_W

    +
    @@ -1745,31 +912,9 @@ Macros - -
    -
    -
    - - - -
    #define GLFW_KEY_WORLD_1   161 /* non-US #1 */
    -
    + +

    ◆ GLFW_KEY_X

    -
    -
    - -
    -
    - - - - -
    #define GLFW_KEY_WORLD_2   162 /* non-US #2 */
    -
    - -
    -
    -
    @@ -1781,7 +926,9 @@ Macros - + +

    ◆ GLFW_KEY_Y

    +
    @@ -1793,7 +940,9 @@ Macros - + +

    ◆ GLFW_KEY_Z

    +
    @@ -1803,12 +952,1090 @@ Macros
    +
    +
    + +

    ◆ GLFW_KEY_LEFT_BRACKET

    + +
    +
    + + + + +
    #define GLFW_KEY_LEFT_BRACKET   91 /* [ */
    +
    + +
    +
    + +

    ◆ GLFW_KEY_BACKSLASH

    + +
    +
    + + + + +
    #define GLFW_KEY_BACKSLASH   92 /* \ */
    +
    + +
    +
    + +

    ◆ GLFW_KEY_RIGHT_BRACKET

    + +
    +
    + + + + +
    #define GLFW_KEY_RIGHT_BRACKET   93 /* ] */
    +
    + +
    +
    + +

    ◆ GLFW_KEY_GRAVE_ACCENT

    + +
    +
    + + + + +
    #define GLFW_KEY_GRAVE_ACCENT   96 /* ` */
    +
    + +
    +
    + +

    ◆ GLFW_KEY_WORLD_1

    + +
    +
    + + + + +
    #define GLFW_KEY_WORLD_1   161 /* non-US #1 */
    +
    + +
    +
    + +

    ◆ GLFW_KEY_WORLD_2

    + +
    +
    + + + + +
    #define GLFW_KEY_WORLD_2   162 /* non-US #2 */
    +
    + +
    +
    + +

    ◆ GLFW_KEY_ESCAPE

    + +
    +
    + + + + +
    #define GLFW_KEY_ESCAPE   256
    +
    + +
    +
    + +

    ◆ GLFW_KEY_ENTER

    + +
    +
    + + + + +
    #define GLFW_KEY_ENTER   257
    +
    + +
    +
    + +

    ◆ GLFW_KEY_TAB

    + +
    +
    + + + + +
    #define GLFW_KEY_TAB   258
    +
    + +
    +
    + +

    ◆ GLFW_KEY_BACKSPACE

    + +
    +
    + + + + +
    #define GLFW_KEY_BACKSPACE   259
    +
    + +
    +
    + +

    ◆ GLFW_KEY_INSERT

    + +
    +
    + + + + +
    #define GLFW_KEY_INSERT   260
    +
    + +
    +
    + +

    ◆ GLFW_KEY_DELETE

    + +
    +
    + + + + +
    #define GLFW_KEY_DELETE   261
    +
    + +
    +
    + +

    ◆ GLFW_KEY_RIGHT

    + +
    +
    + + + + +
    #define GLFW_KEY_RIGHT   262
    +
    + +
    +
    + +

    ◆ GLFW_KEY_LEFT

    + +
    +
    + + + + +
    #define GLFW_KEY_LEFT   263
    +
    + +
    +
    + +

    ◆ GLFW_KEY_DOWN

    + +
    +
    + + + + +
    #define GLFW_KEY_DOWN   264
    +
    + +
    +
    + +

    ◆ GLFW_KEY_UP

    + +
    +
    + + + + +
    #define GLFW_KEY_UP   265
    +
    + +
    +
    + +

    ◆ GLFW_KEY_PAGE_UP

    + +
    +
    + + + + +
    #define GLFW_KEY_PAGE_UP   266
    +
    + +
    +
    + +

    ◆ GLFW_KEY_PAGE_DOWN

    + +
    +
    + + + + +
    #define GLFW_KEY_PAGE_DOWN   267
    +
    + +
    +
    + +

    ◆ GLFW_KEY_HOME

    + +
    +
    + + + + +
    #define GLFW_KEY_HOME   268
    +
    + +
    +
    + +

    ◆ GLFW_KEY_END

    + +
    +
    + + + + +
    #define GLFW_KEY_END   269
    +
    + +
    +
    + +

    ◆ GLFW_KEY_CAPS_LOCK

    + +
    +
    + + + + +
    #define GLFW_KEY_CAPS_LOCK   280
    +
    + +
    +
    + +

    ◆ GLFW_KEY_SCROLL_LOCK

    + +
    +
    + + + + +
    #define GLFW_KEY_SCROLL_LOCK   281
    +
    + +
    +
    + +

    ◆ GLFW_KEY_NUM_LOCK

    + +
    +
    + + + + +
    #define GLFW_KEY_NUM_LOCK   282
    +
    + +
    +
    + +

    ◆ GLFW_KEY_PRINT_SCREEN

    + +
    +
    + + + + +
    #define GLFW_KEY_PRINT_SCREEN   283
    +
    + +
    +
    + +

    ◆ GLFW_KEY_PAUSE

    + +
    +
    + + + + +
    #define GLFW_KEY_PAUSE   284
    +
    + +
    +
    + +

    ◆ GLFW_KEY_F1

    + +
    +
    + + + + +
    #define GLFW_KEY_F1   290
    +
    + +
    +
    + +

    ◆ GLFW_KEY_F2

    + +
    +
    + + + + +
    #define GLFW_KEY_F2   291
    +
    + +
    +
    + +

    ◆ GLFW_KEY_F3

    + +
    +
    + + + + +
    #define GLFW_KEY_F3   292
    +
    + +
    +
    + +

    ◆ GLFW_KEY_F4

    + +
    +
    + + + + +
    #define GLFW_KEY_F4   293
    +
    + +
    +
    + +

    ◆ GLFW_KEY_F5

    + +
    +
    + + + + +
    #define GLFW_KEY_F5   294
    +
    + +
    +
    + +

    ◆ GLFW_KEY_F6

    + +
    +
    + + + + +
    #define GLFW_KEY_F6   295
    +
    + +
    +
    + +

    ◆ GLFW_KEY_F7

    + +
    +
    + + + + +
    #define GLFW_KEY_F7   296
    +
    + +
    +
    + +

    ◆ GLFW_KEY_F8

    + +
    +
    + + + + +
    #define GLFW_KEY_F8   297
    +
    + +
    +
    + +

    ◆ GLFW_KEY_F9

    + +
    +
    + + + + +
    #define GLFW_KEY_F9   298
    +
    + +
    +
    + +

    ◆ GLFW_KEY_F10

    + +
    +
    + + + + +
    #define GLFW_KEY_F10   299
    +
    + +
    +
    + +

    ◆ GLFW_KEY_F11

    + +
    +
    + + + + +
    #define GLFW_KEY_F11   300
    +
    + +
    +
    + +

    ◆ GLFW_KEY_F12

    + +
    +
    + + + + +
    #define GLFW_KEY_F12   301
    +
    + +
    +
    + +

    ◆ GLFW_KEY_F13

    + +
    +
    + + + + +
    #define GLFW_KEY_F13   302
    +
    + +
    +
    + +

    ◆ GLFW_KEY_F14

    + +
    +
    + + + + +
    #define GLFW_KEY_F14   303
    +
    + +
    +
    + +

    ◆ GLFW_KEY_F15

    + +
    +
    + + + + +
    #define GLFW_KEY_F15   304
    +
    + +
    +
    + +

    ◆ GLFW_KEY_F16

    + +
    +
    + + + + +
    #define GLFW_KEY_F16   305
    +
    + +
    +
    + +

    ◆ GLFW_KEY_F17

    + +
    +
    + + + + +
    #define GLFW_KEY_F17   306
    +
    + +
    +
    + +

    ◆ GLFW_KEY_F18

    + +
    +
    + + + + +
    #define GLFW_KEY_F18   307
    +
    + +
    +
    + +

    ◆ GLFW_KEY_F19

    + +
    +
    + + + + +
    #define GLFW_KEY_F19   308
    +
    + +
    +
    + +

    ◆ GLFW_KEY_F20

    + +
    +
    + + + + +
    #define GLFW_KEY_F20   309
    +
    + +
    +
    + +

    ◆ GLFW_KEY_F21

    + +
    +
    + + + + +
    #define GLFW_KEY_F21   310
    +
    + +
    +
    + +

    ◆ GLFW_KEY_F22

    + +
    +
    + + + + +
    #define GLFW_KEY_F22   311
    +
    + +
    +
    + +

    ◆ GLFW_KEY_F23

    + +
    +
    + + + + +
    #define GLFW_KEY_F23   312
    +
    + +
    +
    + +

    ◆ GLFW_KEY_F24

    + +
    +
    + + + + +
    #define GLFW_KEY_F24   313
    +
    + +
    +
    + +

    ◆ GLFW_KEY_F25

    + +
    +
    + + + + +
    #define GLFW_KEY_F25   314
    +
    + +
    +
    + +

    ◆ GLFW_KEY_KP_0

    + +
    +
    + + + + +
    #define GLFW_KEY_KP_0   320
    +
    + +
    +
    + +

    ◆ GLFW_KEY_KP_1

    + +
    +
    + + + + +
    #define GLFW_KEY_KP_1   321
    +
    + +
    +
    + +

    ◆ GLFW_KEY_KP_2

    + +
    +
    + + + + +
    #define GLFW_KEY_KP_2   322
    +
    + +
    +
    + +

    ◆ GLFW_KEY_KP_3

    + +
    +
    + + + + +
    #define GLFW_KEY_KP_3   323
    +
    + +
    +
    + +

    ◆ GLFW_KEY_KP_4

    + +
    +
    + + + + +
    #define GLFW_KEY_KP_4   324
    +
    + +
    +
    + +

    ◆ GLFW_KEY_KP_5

    + +
    +
    + + + + +
    #define GLFW_KEY_KP_5   325
    +
    + +
    +
    + +

    ◆ GLFW_KEY_KP_6

    + +
    +
    + + + + +
    #define GLFW_KEY_KP_6   326
    +
    + +
    +
    + +

    ◆ GLFW_KEY_KP_7

    + +
    +
    + + + + +
    #define GLFW_KEY_KP_7   327
    +
    + +
    +
    + +

    ◆ GLFW_KEY_KP_8

    + +
    +
    + + + + +
    #define GLFW_KEY_KP_8   328
    +
    + +
    +
    + +

    ◆ GLFW_KEY_KP_9

    + +
    +
    + + + + +
    #define GLFW_KEY_KP_9   329
    +
    + +
    +
    + +

    ◆ GLFW_KEY_KP_DECIMAL

    + +
    +
    + + + + +
    #define GLFW_KEY_KP_DECIMAL   330
    +
    + +
    +
    + +

    ◆ GLFW_KEY_KP_DIVIDE

    + +
    +
    + + + + +
    #define GLFW_KEY_KP_DIVIDE   331
    +
    + +
    +
    + +

    ◆ GLFW_KEY_KP_MULTIPLY

    + +
    +
    + + + + +
    #define GLFW_KEY_KP_MULTIPLY   332
    +
    + +
    +
    + +

    ◆ GLFW_KEY_KP_SUBTRACT

    + +
    +
    + + + + +
    #define GLFW_KEY_KP_SUBTRACT   333
    +
    + +
    +
    + +

    ◆ GLFW_KEY_KP_ADD

    + +
    +
    + + + + +
    #define GLFW_KEY_KP_ADD   334
    +
    + +
    +
    + +

    ◆ GLFW_KEY_KP_ENTER

    + +
    +
    + + + + +
    #define GLFW_KEY_KP_ENTER   335
    +
    + +
    +
    + +

    ◆ GLFW_KEY_KP_EQUAL

    + +
    +
    + + + + +
    #define GLFW_KEY_KP_EQUAL   336
    +
    + +
    +
    + +

    ◆ GLFW_KEY_LEFT_SHIFT

    + +
    +
    + + + + +
    #define GLFW_KEY_LEFT_SHIFT   340
    +
    + +
    +
    + +

    ◆ GLFW_KEY_LEFT_CONTROL

    + +
    +
    + + + + +
    #define GLFW_KEY_LEFT_CONTROL   341
    +
    + +
    +
    + +

    ◆ GLFW_KEY_LEFT_ALT

    + +
    +
    + + + + +
    #define GLFW_KEY_LEFT_ALT   342
    +
    + +
    +
    + +

    ◆ GLFW_KEY_LEFT_SUPER

    + +
    +
    + + + + +
    #define GLFW_KEY_LEFT_SUPER   343
    +
    + +
    +
    + +

    ◆ GLFW_KEY_RIGHT_SHIFT

    + +
    +
    + + + + +
    #define GLFW_KEY_RIGHT_SHIFT   344
    +
    + +
    +
    + +

    ◆ GLFW_KEY_RIGHT_CONTROL

    + +
    +
    + + + + +
    #define GLFW_KEY_RIGHT_CONTROL   345
    +
    + +
    +
    + +

    ◆ GLFW_KEY_RIGHT_ALT

    + +
    +
    + + + + +
    #define GLFW_KEY_RIGHT_ALT   346
    +
    + +
    +
    + +

    ◆ GLFW_KEY_RIGHT_SUPER

    + +
    +
    + + + + +
    #define GLFW_KEY_RIGHT_SUPER   347
    +
    + +
    +
    + +

    ◆ GLFW_KEY_MENU

    + +
    +
    + + + + +
    #define GLFW_KEY_MENU   348
    +
    + +
    +
    + +

    ◆ GLFW_KEY_LAST

    + +
    +
    + + + + +
    #define GLFW_KEY_LAST   GLFW_KEY_MENU
    +
    +
    diff --git a/ref/glfw/docs/html/group__mods.html b/ref/glfw/docs/html/group__mods.html index 4bb150d5..8d51f7f4 100644 --- a/ref/glfw/docs/html/group__mods.html +++ b/ref/glfw/docs/html/group__mods.html @@ -3,7 +3,7 @@ - + GLFW: Modifier key flags @@ -11,9 +11,6 @@ - @@ -21,45 +18,31 @@
    - + - + + + +
    Modifier key flags
    +

    Description

    +

    See key input for how these are used.

    @@ -97,35 +82,17 @@ Macros + + + + + +

    Macros

    #define GLFW_MOD_SUPER   0x0008
     If this bit is set one or more Super keys were held down. More...
     
    #define GLFW_MOD_CAPS_LOCK   0x0010
     If this bit is set the Caps Lock key is enabled. More...
     
    #define GLFW_MOD_NUM_LOCK   0x0020
     If this bit is set the Num Lock key is enabled. More...
     
    -

    Detailed Description

    -

    See key input for how these are used.

    Macro Definition Documentation

    - -
    -
    - - - - -
    #define GLFW_MOD_ALT   0x0004
    -
    + +

    ◆ GLFW_MOD_SHIFT

    -
    -
    - -
    -
    - - - - -
    #define GLFW_MOD_CONTROL   0x0002
    -
    - -
    -
    -
    @@ -134,10 +101,43 @@ Macros
    +

    If this bit is set one or more Shift keys were held down.

    - + +

    ◆ GLFW_MOD_CONTROL

    + +
    +
    + + + + +
    #define GLFW_MOD_CONTROL   0x0002
    +
    +

    If this bit is set one or more Control keys were held down.

    + +
    +
    + +

    ◆ GLFW_MOD_ALT

    + +
    +
    + + + + +
    #define GLFW_MOD_ALT   0x0004
    +
    +

    If this bit is set one or more Alt keys were held down.

    + +
    +
    + +

    ◆ GLFW_MOD_SUPER

    +
    @@ -146,13 +146,44 @@ Macros
    +

    If this bit is set one or more Super keys were held down.

    + +
    +
    + +

    ◆ GLFW_MOD_CAPS_LOCK

    + +
    +
    + + + + +
    #define GLFW_MOD_CAPS_LOCK   0x0010
    +
    +

    If this bit is set the Caps Lock key is enabled and the GLFW_LOCK_KEY_MODS input mode is set.

    + +
    +
    + +

    ◆ GLFW_MOD_NUM_LOCK

    + +
    +
    + + + + +
    #define GLFW_MOD_NUM_LOCK   0x0020
    +
    +

    If this bit is set the Num Lock key is enabled and the GLFW_LOCK_KEY_MODS input mode is set.

    diff --git a/ref/glfw/docs/html/group__monitor.html b/ref/glfw/docs/html/group__monitor.html index 57f6566b..3f2bd285 100644 --- a/ref/glfw/docs/html/group__monitor.html +++ b/ref/glfw/docs/html/group__monitor.html @@ -3,7 +3,7 @@ - + GLFW: Monitor reference @@ -11,9 +11,6 @@ - @@ -21,45 +18,31 @@
    - + - + + + +
    Monitor reference
    +

    Description

    +

    This is the reference documentation for monitor related functions and types. For more task-oriented information, see the Monitor guide.

    - - - - - - - -

    -Data Structures

    struct  GLFWvidmode
     Video mode type. More...
     
    struct  GLFWgammaramp
     Gamma ramp. More...
     
    @@ -120,12 +95,24 @@ Functions + + + + + + + + + + + + @@ -145,27 +132,10 @@ Functions

    Typedefs

    typedef struct GLFWmonitor GLFWmonitor
    void glfwGetMonitorPos (GLFWmonitor *monitor, int *xpos, int *ypos)
     Returns the position of the monitor's viewport on the virtual screen. More...
     
    void glfwGetMonitorWorkarea (GLFWmonitor *monitor, int *xpos, int *ypos, int *width, int *height)
     Retrives the work area of the monitor. More...
     
    void glfwGetMonitorPhysicalSize (GLFWmonitor *monitor, int *widthMM, int *heightMM)
     Returns the physical size of the monitor. More...
     
    void glfwGetMonitorContentScale (GLFWmonitor *monitor, float *xscale, float *yscale)
     Retrieves the content scale for the specified monitor. More...
     
    const char * glfwGetMonitorName (GLFWmonitor *monitor)
     Returns the name of the specified monitor. More...
     
    void glfwSetMonitorUserPointer (GLFWmonitor *monitor, void *pointer)
     Sets the user pointer of the specified monitor. More...
     
    void * glfwGetMonitorUserPointer (GLFWmonitor *monitor)
     Returns the user pointer of the specified monitor. More...
     
    GLFWmonitorfun glfwSetMonitorCallback (GLFWmonitorfun cbfun)
     Sets the monitor configuration callback. More...
     
     Sets the current gamma ramp for the specified monitor. More...
     
    -

    Detailed Description

    -

    This is the reference documentation for monitor related functions and types. For more task-oriented information, see the Monitor guide.

    Typedef Documentation

    - -
    -
    - - - - -
    typedef struct GLFWgammaramp GLFWgammaramp
    -
    -

    This describes the gamma ramp for a monitor.

    -
    See also
    Gamma ramp
    -
    -glfwGetGammaRamp glfwSetGammaRamp
    -
    Since
    Added in version 3.0.
    + +

    ◆ GLFWmonitor

    -
    -
    -
    @@ -180,7 +150,9 @@ Functions - + +

    ◆ GLFWmonitorfun

    +
    @@ -193,18 +165,20 @@ Functions
    Parameters
    - +
    [in]monitorThe monitor that was connected or disconnected.
    [in]eventOne of GLFW_CONNECTED or GLFW_DISCONNECTED.
    [in]eventOne of GLFW_CONNECTED or GLFW_DISCONNECTED. Remaining values reserved for future use.
    See also
    Monitor configuration changes
    -glfwSetMonitorCallback
    +glfwSetMonitorCallback
    Since
    Added in version 3.0.
    - + +

    ◆ GLFWvidmode

    +
    @@ -216,72 +190,210 @@ Functions

    This describes a single video mode.

    See also
    Video modes
    -glfwGetVideoMode glfwGetVideoModes
    -
    Since
    Added in version 1.0.
    -
    GLFW 3: Added refresh rate member.
    +glfwGetVideoMode +
    +glfwGetVideoModes
    +
    Since
    Added in version 1.0. GLFW 3: Added refresh rate member.
    -

    Function Documentation

    - + +

    ◆ GLFWgammaramp

    +
    - - - - - +
    const GLFWgammaramp* glfwGetGammaRamp (GLFWmonitormonitor)typedef struct GLFWgammaramp GLFWgammaramp
    -

    This function returns the current gamma ramp of the specified monitor.

    -
    Parameters
    - - -
    [in]monitorThe monitor to query.
    -
    -
    -
    Returns
    The current gamma ramp, or NULL if an error occurred.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    -
    Pointer lifetime
    The returned structure and its arrays are allocated and freed by GLFW. You should not free them yourself. They are valid until the specified monitor is disconnected, this function is called again for that monitor or the library is terminated.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Gamma ramp
    +

    This describes the gamma ramp for a monitor.

    +
    See also
    Gamma ramp
    +
    +glfwGetGammaRamp
    +
    +glfwSetGammaRamp
    Since
    Added in version 3.0.
    - +

    Function Documentation

    + +

    ◆ glfwGetMonitors()

    +
    - + - - + +
    const char* glfwGetMonitorName GLFWmonitor** glfwGetMonitors (GLFWmonitormonitor)int * count)
    -

    This function returns a human-readable name, encoded as UTF-8, of the specified monitor. The name typically reflects the make and model of the monitor and is not guaranteed to be unique among the connected monitors.

    +

    This function returns an array of handles for all currently connected monitors. The primary monitor is always first in the returned array. If no monitors were found, this function returns NULL.

    Parameters
    - +
    [in]monitorThe monitor to query.
    [out]countWhere to store the number of monitors in the returned array. This is set to zero if an error occurred.
    -
    Returns
    The UTF-8 encoded name of the monitor, or NULL if an error occurred.
    +
    Returns
    An array of monitor handles, or NULL if no monitors were found or if an error occurred.
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    -
    Pointer lifetime
    The returned string is allocated and freed by GLFW. You should not free it yourself. It is valid until the specified monitor is disconnected or the library is terminated.
    +
    Pointer lifetime
    The returned array is allocated and freed by GLFW. You should not free it yourself. It is guaranteed to be valid only until the monitor configuration changes or the library is terminated.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Retrieving monitors
    +
    +Monitor configuration changes
    +
    +glfwGetPrimaryMonitor
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ glfwGetPrimaryMonitor()

    + +
    +
    + + + + + + + + +
    GLFWmonitor* glfwGetPrimaryMonitor (void )
    +
    +

    This function returns the primary monitor. This is usually the monitor where elements like the task bar or global menu bar are located.

    +
    Returns
    The primary monitor, or NULL if no monitors were found or if an error occurred.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    Remarks
    The primary monitor is always first in the array returned by glfwGetMonitors.
    +
    See also
    Retrieving monitors
    +
    +glfwGetMonitors
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ glfwGetMonitorPos()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void glfwGetMonitorPos (GLFWmonitormonitor,
    int * xpos,
    int * ypos 
    )
    +
    +

    This function returns the position, in screen coordinates, of the upper-left corner of the specified monitor.

    +

    Any or all of the position arguments may be NULL. If an error occurs, all non-NULL position arguments will be set to zero.

    +
    Parameters
    + + + + +
    [in]monitorThe monitor to query.
    [out]xposWhere to store the monitor x-coordinate, or NULL.
    [out]yposWhere to store the monitor y-coordinate, or NULL.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    Thread safety
    This function must only be called from the main thread.
    See also
    Monitor properties
    Since
    Added in version 3.0.
    - + +

    ◆ glfwGetMonitorWorkarea()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void glfwGetMonitorWorkarea (GLFWmonitormonitor,
    int * xpos,
    int * ypos,
    int * width,
    int * height 
    )
    +
    +

    This function returns the position, in screen coordinates, of the upper-left corner of the work area of the specified monitor along with the work area size in screen coordinates. The work area is defined as the area of the monitor not occluded by the operating system task bar where present. If no task bar exists then the work area is the monitor resolution in screen coordinates.

    +

    Any or all of the position and size arguments may be NULL. If an error occurs, all non-NULL position and size arguments will be set to zero.

    +
    Parameters
    + + + + + + +
    [in]monitorThe monitor to query.
    [out]xposWhere to store the monitor x-coordinate, or NULL.
    [out]yposWhere to store the monitor y-coordinate, or NULL.
    [out]widthWhere to store the monitor width, or NULL.
    [out]heightWhere to store the monitor height, or NULL.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Work area
    +
    Since
    Added in version 3.3.
    + +
    +
    + +

    ◆ glfwGetMonitorPhysicalSize()

    +
    @@ -329,12 +441,14 @@ Functions - + +

    ◆ glfwGetMonitorContentScale()

    +
    - + @@ -342,14 +456,14 @@ Functions - - + + - - + + @@ -358,87 +472,33 @@ Functions
    void glfwGetMonitorPos void glfwGetMonitorContentScale ( GLFWmonitor monitor,
    int * xpos, float * xscale,
    int * ypos float * yscale 
    -

    This function returns the position, in screen coordinates, of the upper-left corner of the specified monitor.

    -

    Any or all of the position arguments may be NULL. If an error occurs, all non-NULL position arguments will be set to zero.

    +

    This function retrieves the content scale for the specified monitor. The content scale is the ratio between the current DPI and the platform's default DPI. This is especially important for text and any UI elements. If the pixel dimensions of your UI scaled by this look appropriate on your machine then it should appear at a reasonable size on other machines regardless of their DPI and scaling settings. This relies on the system DPI and scaling settings being somewhat correct.

    +

    The content scale may depend on both the monitor resolution and pixel density and on user settings. It may be very different from the raw DPI calculated from the physical size and current resolution.

    Parameters
    - - + +
    [in]monitorThe monitor to query.
    [out]xposWhere to store the monitor x-coordinate, or NULL.
    [out]yposWhere to store the monitor y-coordinate, or NULL.
    [out]xscaleWhere to store the x-axis content scale, or NULL.
    [out]yscaleWhere to store the y-axis content scale, or NULL.
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Monitor properties
    -
    Since
    Added in version 3.0.
    +
    See also
    Content scale
    +
    +glfwGetWindowContentScale
    +
    Since
    Added in version 3.3.
    - + +

    ◆ glfwGetMonitorName()

    +
    - - - - - - -
    GLFWmonitor** glfwGetMonitors (int * count)
    -
    -

    This function returns an array of handles for all currently connected monitors. The primary monitor is always first in the returned array. If no monitors were found, this function returns NULL.

    -
    Parameters
    - - -
    [out]countWhere to store the number of monitors in the returned array. This is set to zero if an error occurred.
    -
    -
    -
    Returns
    An array of monitor handles, or NULL if no monitors were found or if an error occurred.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    -
    Pointer lifetime
    The returned array is allocated and freed by GLFW. You should not free it yourself. It is guaranteed to be valid only until the monitor configuration changes or the library is terminated.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Retrieving monitors
    -
    -Monitor configuration changes
    -
    -glfwGetPrimaryMonitor
    -
    Since
    Added in version 3.0.
    - -
    -
    - -
    -
    - - - - - - - - -
    GLFWmonitor* glfwGetPrimaryMonitor (void )
    -
    -

    This function returns the primary monitor. This is usually the monitor where elements like the task bar or global menu bar are located.

    -
    Returns
    The primary monitor, or NULL if no monitors were found or if an error occurred.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    Remarks
    The primary monitor is always first in the array returned by glfwGetMonitors.
    -
    See also
    Retrieving monitors
    -
    -glfwGetMonitors
    -
    Since
    Added in version 3.0.
    - -
    -
    - -
    -
    - - - + @@ -446,25 +506,130 @@ Functions
    const GLFWvidmode* glfwGetVideoMode const char* glfwGetMonitorName ( GLFWmonitor monitor)
    -

    This function returns the current video mode of the specified monitor. If you have created a full screen window for that monitor, the return value will depend on whether that window is iconified.

    +

    This function returns a human-readable name, encoded as UTF-8, of the specified monitor. The name typically reflects the make and model of the monitor and is not guaranteed to be unique among the connected monitors.

    Parameters
    [in]monitorThe monitor to query.
    -
    Returns
    The current mode of the monitor, or NULL if an error occurred.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    -
    Pointer lifetime
    The returned array is allocated and freed by GLFW. You should not free it yourself. It is valid until the specified monitor is disconnected or the library is terminated.
    +
    Returns
    The UTF-8 encoded name of the monitor, or NULL if an error occurred.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Pointer lifetime
    The returned string is allocated and freed by GLFW. You should not free it yourself. It is valid until the specified monitor is disconnected or the library is terminated.
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Video modes
    -
    -glfwGetVideoModes
    -
    Since
    Added in version 3.0. Replaces glfwGetDesktopMode.
    +
    See also
    Monitor properties
    +
    Since
    Added in version 3.0.
    - + +

    ◆ glfwSetMonitorUserPointer()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void glfwSetMonitorUserPointer (GLFWmonitormonitor,
    void * pointer 
    )
    +
    +

    This function sets the user-defined pointer of the specified monitor. The current value is retained until the monitor is disconnected. The initial value is NULL.

    +

    This function may be called from the monitor callback, even for a monitor that is being disconnected.

    +
    Parameters
    + + + +
    [in]monitorThe monitor whose pointer to set.
    [in]pointerThe new value.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    +
    See also
    User pointer
    +
    +glfwGetMonitorUserPointer
    +
    Since
    Added in version 3.3.
    + +
    +
    + +

    ◆ glfwGetMonitorUserPointer()

    + +
    +
    + + + + + + + + +
    void* glfwGetMonitorUserPointer (GLFWmonitormonitor)
    +
    +

    This function returns the current value of the user-defined pointer of the specified monitor. The initial value is NULL.

    +

    This function may be called from the monitor callback, even for a monitor that is being disconnected.

    +
    Parameters
    + + +
    [in]monitorThe monitor whose pointer to return.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    +
    See also
    User pointer
    +
    +glfwSetMonitorUserPointer
    +
    Since
    Added in version 3.3.
    + +
    +
    + +

    ◆ glfwSetMonitorCallback()

    + +
    +
    + + + + + + + + +
    GLFWmonitorfun glfwSetMonitorCallback (GLFWmonitorfun cbfun)
    +
    +

    This function sets the monitor configuration callback, or removes the currently set callback. This is called when a monitor is connected to or disconnected from the system.

    +
    Parameters
    + + +
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    +
    +
    +
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Monitor configuration changes
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ glfwGetVideoModes()

    +
    @@ -501,13 +666,47 @@ Functions
    Thread safety
    This function must only be called from the main thread.
    See also
    Video modes
    -glfwGetVideoMode
    -
    Since
    Added in version 1.0.
    -
    GLFW 3: Changed to return an array of modes for a specific monitor.
    +glfwGetVideoMode +
    Since
    Added in version 1.0. GLFW 3: Changed to return an array of modes for a specific monitor.
    - + +

    ◆ glfwGetVideoMode()

    + +
    +
    +
    + + + + + + + +
    const GLFWvidmode* glfwGetVideoMode (GLFWmonitormonitor)
    +
    +

    This function returns the current video mode of the specified monitor. If you have created a full screen window for that monitor, the return value will depend on whether that window is iconified.

    +
    Parameters
    + + +
    [in]monitorThe monitor to query.
    +
    +
    +
    Returns
    The current mode of the monitor, or NULL if an error occurred.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Pointer lifetime
    The returned array is allocated and freed by GLFW. You should not free it yourself. It is valid until the specified monitor is disconnected or the library is terminated.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Video modes
    +
    +glfwGetVideoModes
    +
    Since
    Added in version 3.0. Replaces glfwGetDesktopMode.
    + +
    +
    + +

    ◆ glfwSetGamma()

    +
    @@ -530,7 +729,9 @@ Functions
    -

    This function generates a 256-element gamma ramp from the specified exponent and then calls glfwSetGammaRamp with it. The value must be a finite number greater than zero.

    +

    This function generates an appropriately sized gamma ramp from the specified exponent and then calls glfwSetGammaRamp with it. The value must be a finite number greater than zero.

    +

    The software controlled gamma ramp is applied in addition to the hardware gamma correction, which today is usually an approximation of sRGB gamma. This means that setting a perfectly linear ramp, or gamma 1.0, will produce the default (usually sRGB-like) behavior.

    +

    For gamma correct rendering with OpenGL or OpenGL ES, see the GLFW_SRGB_CAPABLE hint.

    Parameters
    @@ -539,13 +740,48 @@ Functions
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_INVALID_VALUE and GLFW_PLATFORM_ERROR.
    +
    Remarks
    Wayland: Gamma handling is a priviledged protocol, this function will thus never be implemented and emits GLFW_PLATFORM_ERROR.
    Thread safety
    This function must only be called from the main thread.
    See also
    Gamma ramp
    Since
    Added in version 3.0.
    - + +

    ◆ glfwGetGammaRamp()

    + +
    +
    +
    [in]monitorThe monitor whose gamma ramp to set.
    + + + + + + + +
    const GLFWgammaramp* glfwGetGammaRamp (GLFWmonitormonitor)
    +
    +

    This function returns the current gamma ramp of the specified monitor.

    +
    Parameters
    + + +
    [in]monitorThe monitor to query.
    +
    +
    +
    Returns
    The current gamma ramp, or NULL if an error occurred.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Remarks
    Wayland: Gamma handling is a priviledged protocol, this function will thus never be implemented and emits GLFW_PLATFORM_ERROR while returning NULL.
    +
    Pointer lifetime
    The returned structure and its arrays are allocated and freed by GLFW. You should not free them yourself. They are valid until the specified monitor is disconnected, this function is called again for that monitor or the library is terminated.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Gamma ramp
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ glfwSetGammaRamp()

    +
    @@ -569,6 +805,8 @@ Functions

    This function sets the current gamma ramp for the specified monitor. The original gamma ramp for that monitor is saved by GLFW the first time this function is called and is restored by glfwTerminate.

    +

    The software controlled gamma ramp is applied in addition to the hardware gamma correction, which today is usually an approximation of sRGB gamma. This means that setting a perfectly linear ramp, or gamma 1.0, will produce the default (usually sRGB-like) behavior.

    +

    For gamma correct rendering with OpenGL or OpenGL ES, see the GLFW_SRGB_CAPABLE hint.

    Parameters
    @@ -577,48 +815,22 @@ Functions
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    -
    Remarks
    Gamma ramp sizes other than 256 are not supported by all platforms or graphics hardware.
    +
    Remarks
    The size of the specified gamma ramp should match the size of the current ramp for that monitor.
    -Windows: The gamma ramp size must be 256.
    +Windows: The gamma ramp size must be 256. +
    +Wayland: Gamma handling is a priviledged protocol, this function will thus never be implemented and emits GLFW_PLATFORM_ERROR.
    Pointer lifetime
    The specified gamma ramp is copied before this function returns.
    Thread safety
    This function must only be called from the main thread.
    See also
    Gamma ramp
    Since
    Added in version 3.0.
    - - - -
    -
    -
    [in]monitorThe monitor whose gamma ramp to set.
    - - - - - - - -
    GLFWmonitorfun glfwSetMonitorCallback (GLFWmonitorfun cbfun)
    -
    -

    This function sets the monitor configuration callback, or removes the currently set callback. This is called when a monitor is connected to or disconnected from the system.

    -
    Parameters
    - - -
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    -
    -
    -
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Monitor configuration changes
    -
    Since
    Added in version 3.0.
    -
    diff --git a/ref/glfw/docs/html/group__native.html b/ref/glfw/docs/html/group__native.html index ad9ef04b..8e3296e3 100644 --- a/ref/glfw/docs/html/group__native.html +++ b/ref/glfw/docs/html/group__native.html @@ -3,7 +3,7 @@ - + GLFW: Native access @@ -11,9 +11,6 @@ - @@ -21,45 +18,31 @@
    - + - + + + +
    Native access
    +

    Description

    +

    By using the native access functions you assert that you know what you're doing and how to fix problems caused by using them. If you don't, you shouldn't be using them.

    +

    Before the inclusion of glfw3native.h, you may define zero or more window system API macro and zero or more context creation API macros.

    +

    The chosen backends must match those the library was compiled for. Failure to do this will cause a link-time error.

    +

    The available window API macros are:

      +
    • GLFW_EXPOSE_NATIVE_WIN32
    • +
    • GLFW_EXPOSE_NATIVE_COCOA
    • +
    • GLFW_EXPOSE_NATIVE_X11
    • +
    • GLFW_EXPOSE_NATIVE_WAYLAND
    • +
    +

    The available context API macros are:

      +
    • GLFW_EXPOSE_NATIVE_WGL
    • +
    • GLFW_EXPOSE_NATIVE_NSGL
    • +
    • GLFW_EXPOSE_NATIVE_GLX
    • +
    • GLFW_EXPOSE_NATIVE_EGL
    • +
    • GLFW_EXPOSE_NATIVE_OSMESA
    • +
    +

    These macros select which of the native access functions that are declared and which platform-specific headers to include. It is then up your (by definition platform-specific) code to handle which of these should be defined.

    @@ -118,6 +119,12 @@ Functions + + + + + + @@ -133,15 +140,6 @@ Functions - - - - - - - - - @@ -151,312 +149,20 @@ Functions + + + + + + + + +

    Functions

    Window glfwGetX11Window (GLFWwindow *window)
     Returns the Window of the specified window. More...
     
    void glfwSetX11SelectionString (const char *string)
     Sets the current primary selection to the specified string. More...
     
    const char * glfwGetX11SelectionString (void)
     Returns the contents of the current primary selection as a string. More...
     
    GLXContext glfwGetGLXContext (GLFWwindow *window)
     Returns the GLXContext of the specified window. More...
     
    struct wl_surface * glfwGetWaylandWindow (GLFWwindow *window)
     Returns the main struct wl_surface* of the specified window. More...
     
    MirConnection * glfwGetMirDisplay (void)
     Returns the MirConnection* used by GLFW. More...
     
    int glfwGetMirMonitor (GLFWmonitor *monitor)
     Returns the Mir output ID of the specified monitor. More...
     
    MirSurface * glfwGetMirWindow (GLFWwindow *window)
     Returns the MirSurface* of the specified window. More...
     
    EGLDisplay glfwGetEGLDisplay (void)
     Returns the EGLDisplay used by GLFW. More...
     
    EGLSurface glfwGetEGLSurface (GLFWwindow *window)
     Returns the EGLSurface of the specified window. More...
     
    int glfwGetOSMesaColorBuffer (GLFWwindow *window, int *width, int *height, int *format, void **buffer)
     Retrieves the color buffer associated with the specified window. More...
     
    int glfwGetOSMesaDepthBuffer (GLFWwindow *window, int *width, int *height, int *bytesPerValue, void **buffer)
     Retrieves the depth buffer associated with the specified window. More...
     
    OSMesaContext glfwGetOSMesaContext (GLFWwindow *window)
     Returns the OSMesaContext of the specified window. More...
     
    -

    Detailed Description

    -

    By using the native access functions you assert that you know what you're doing and how to fix problems caused by using them. If you don't, you shouldn't be using them.

    -

    Before the inclusion of glfw3native.h, you may define exactly one window system API macro and zero or more context creation API macros.

    -

    The chosen backends must match those the library was compiled for. Failure to do this will cause a link-time error.

    -

    The available window API macros are:

      -
    • GLFW_EXPOSE_NATIVE_WIN32
    • -
    • GLFW_EXPOSE_NATIVE_COCOA
    • -
    • GLFW_EXPOSE_NATIVE_X11
    • -
    • GLFW_EXPOSE_NATIVE_WAYLAND
    • -
    • GLFW_EXPOSE_NATIVE_MIR
    • -
    -

    The available context API macros are:

      -
    • GLFW_EXPOSE_NATIVE_WGL
    • -
    • GLFW_EXPOSE_NATIVE_NSGL
    • -
    • GLFW_EXPOSE_NATIVE_GLX
    • -
    • GLFW_EXPOSE_NATIVE_EGL
    • -
    -

    These macros select which of the native access functions that are declared and which platform-specific headers to include. It is then up your (by definition platform-specific) code to handle which of these should be defined.

    Function Documentation

    - -
    -
    - - - - - - - - -
    CGDirectDisplayID glfwGetCocoaMonitor (GLFWmonitormonitor)
    -
    -
    Returns
    The CGDirectDisplayID of the specified monitor, or kCGNullDirectDisplay if an error occurred.
    -
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    -
    Since
    Added in version 3.1.
    + +

    ◆ glfwGetWin32Adapter()

    -
    -
    - -
    -
    - - - - - - - - -
    id glfwGetCocoaWindow (GLFWwindowwindow)
    -
    -
    Returns
    The NSWindow of the specified window, or nil if an error occurred.
    -
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    -
    Since
    Added in version 3.0.
    - -
    -
    - -
    -
    - - - - - - - - -
    EGLContext glfwGetEGLContext (GLFWwindowwindow)
    -
    -
    Returns
    The EGLContext of the specified window, or EGL_NO_CONTEXT if an error occurred.
    -
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    -
    Since
    Added in version 3.0.
    - -
    -
    - -
    -
    - - - - - - - - -
    EGLDisplay glfwGetEGLDisplay (void )
    -
    -
    Returns
    The EGLDisplay used by GLFW, or EGL_NO_DISPLAY if an error occurred.
    -
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    -
    Since
    Added in version 3.0.
    - -
    -
    - -
    -
    - - - - - - - - -
    EGLSurface glfwGetEGLSurface (GLFWwindowwindow)
    -
    -
    Returns
    The EGLSurface of the specified window, or EGL_NO_SURFACE if an error occurred.
    -
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    -
    Since
    Added in version 3.0.
    - -
    -
    - -
    -
    - - - - - - - - -
    GLXContext glfwGetGLXContext (GLFWwindowwindow)
    -
    -
    Returns
    The GLXContext of the specified window, or NULL if an error occurred.
    -
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    -
    Since
    Added in version 3.0.
    - -
    -
    - -
    -
    - - - - - - - - -
    GLXWindow glfwGetGLXWindow (GLFWwindowwindow)
    -
    -
    Returns
    The GLXWindow of the specified window, or None if an error occurred.
    -
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    -
    Since
    Added in version 3.2.
    - -
    -
    - -
    -
    - - - - - - - - -
    MirConnection* glfwGetMirDisplay (void )
    -
    -
    Returns
    The MirConnection* used by GLFW, or NULL if an error occurred.
    -
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    -
    Since
    Added in version 3.2.
    - -
    -
    - -
    -
    - - - - - - - - -
    int glfwGetMirMonitor (GLFWmonitormonitor)
    -
    -
    Returns
    The Mir output ID of the specified monitor, or zero if an error occurred.
    -
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    -
    Since
    Added in version 3.2.
    - -
    -
    - -
    -
    - - - - - - - - -
    MirSurface* glfwGetMirWindow (GLFWwindowwindow)
    -
    -
    Returns
    The MirSurface* of the specified window, or NULL if an error occurred.
    -
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    -
    Since
    Added in version 3.2.
    - -
    -
    - -
    -
    - - - - - - - - -
    id glfwGetNSGLContext (GLFWwindowwindow)
    -
    -
    Returns
    The NSOpenGLContext of the specified window, or nil if an error occurred.
    -
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    -
    Since
    Added in version 3.0.
    - -
    -
    - -
    -
    - - - - - - - - -
    struct wl_display* glfwGetWaylandDisplay (void )
    -
    -
    Returns
    The struct wl_display* used by GLFW, or NULL if an error occurred.
    -
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    -
    Since
    Added in version 3.2.
    - -
    -
    - -
    -
    - - - - - - - - -
    struct wl_output* glfwGetWaylandMonitor (GLFWmonitormonitor)
    -
    -
    Returns
    The struct wl_output* of the specified monitor, or NULL if an error occurred.
    -
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    -
    Since
    Added in version 3.2.
    - -
    -
    - -
    -
    - - - - - - - - -
    struct wl_surface* glfwGetWaylandWindow (GLFWwindowwindow)
    -
    -
    Returns
    The main struct wl_surface* of the specified window, or NULL if an error occurred.
    -
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    -
    Since
    Added in version 3.2.
    - -
    -
    - -
    -
    - - - - - - - - -
    HGLRC glfwGetWGLContext (GLFWwindowwindow)
    -
    -
    Returns
    The HGLRC of the specified window, or NULL if an error occurred.
    -
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    -
    Since
    Added in version 3.0.
    - -
    -
    -
    @@ -475,7 +181,9 @@ Functions - + +

    ◆ glfwGetWin32Monitor()

    +
    @@ -494,7 +202,9 @@ Functions - + +

    ◆ glfwGetWin32Window()

    +
    @@ -513,12 +223,35 @@ Functions - + +

    ◆ glfwGetWGLContext()

    +
    - + + + + + + +
    RRCrtc glfwGetX11Adapter HGLRC glfwGetWGLContext (GLFWwindowwindow)
    +
    +
    Returns
    The HGLRC of the specified window, or NULL if an error occurred.
    +
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ glfwGetCocoaMonitor()

    + +
    +
    + + + @@ -526,13 +259,57 @@ Functions
    CGDirectDisplayID glfwGetCocoaMonitor ( GLFWmonitor monitor)
    -
    Returns
    The RRCrtc of the specified monitor, or None if an error occurred.
    +
    Returns
    The CGDirectDisplayID of the specified monitor, or kCGNullDirectDisplay if an error occurred.
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    Since
    Added in version 3.1.
    - + +

    ◆ glfwGetCocoaWindow()

    + +
    +
    + + + + + + + + +
    id glfwGetCocoaWindow (GLFWwindowwindow)
    +
    +
    Returns
    The NSWindow of the specified window, or nil if an error occurred.
    +
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ glfwGetNSGLContext()

    + +
    +
    + + + + + + + + +
    id glfwGetNSGLContext (GLFWwindowwindow)
    +
    +
    Returns
    The NSOpenGLContext of the specified window, or nil if an error occurred.
    +
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ glfwGetX11Display()

    +
    @@ -551,7 +328,30 @@ Functions - + +

    ◆ glfwGetX11Adapter()

    + +
    +
    +
    + + + + + + + +
    RRCrtc glfwGetX11Adapter (GLFWmonitormonitor)
    +
    +
    Returns
    The RRCrtc of the specified monitor, or None if an error occurred.
    +
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    +
    Since
    Added in version 3.1.
    + +
    +
    + +

    ◆ glfwGetX11Monitor()

    +
    @@ -570,7 +370,9 @@ Functions - + +

    ◆ glfwGetX11Window()

    +
    @@ -587,12 +389,381 @@ Functions
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    Since
    Added in version 3.0.
    + + + +

    ◆ glfwSetX11SelectionString()

    + +
    +
    +
    + + + + + + + +
    void glfwSetX11SelectionString (const char * string)
    +
    +
    Parameters
    + + +
    [in]stringA UTF-8 encoded string.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Pointer lifetime
    The specified string is copied before this function returns.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Clipboard input and output
    +
    +glfwGetX11SelectionString
    +
    +glfwSetClipboardString
    +
    Since
    Added in version 3.3.
    + +
    +
    + +

    ◆ glfwGetX11SelectionString()

    + +
    +
    + + + + + + + + +
    const char* glfwGetX11SelectionString (void )
    +
    +

    If the selection is empty or if its contents cannot be converted, NULL is returned and a GLFW_FORMAT_UNAVAILABLE error is generated.

    +
    Returns
    The contents of the selection as a UTF-8 encoded string, or NULL if an error occurred.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Pointer lifetime
    The returned string is allocated and freed by GLFW. You should not free it yourself. It is valid until the next call to glfwGetX11SelectionString or glfwSetX11SelectionString, or until the library is terminated.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Clipboard input and output
    +
    +glfwSetX11SelectionString
    +
    +glfwGetClipboardString
    +
    Since
    Added in version 3.3.
    + +
    +
    + +

    ◆ glfwGetGLXContext()

    + +
    +
    + + + + + + + + +
    GLXContext glfwGetGLXContext (GLFWwindowwindow)
    +
    +
    Returns
    The GLXContext of the specified window, or NULL if an error occurred.
    +
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ glfwGetGLXWindow()

    + +
    +
    + + + + + + + + +
    GLXWindow glfwGetGLXWindow (GLFWwindowwindow)
    +
    +
    Returns
    The GLXWindow of the specified window, or None if an error occurred.
    +
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    +
    Since
    Added in version 3.2.
    + +
    +
    + +

    ◆ glfwGetWaylandDisplay()

    + +
    +
    + + + + + + + + +
    struct wl_display* glfwGetWaylandDisplay (void )
    +
    +
    Returns
    The struct wl_display* used by GLFW, or NULL if an error occurred.
    +
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    +
    Since
    Added in version 3.2.
    + +
    +
    + +

    ◆ glfwGetWaylandMonitor()

    + +
    +
    + + + + + + + + +
    struct wl_output* glfwGetWaylandMonitor (GLFWmonitormonitor)
    +
    +
    Returns
    The struct wl_output* of the specified monitor, or NULL if an error occurred.
    +
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    +
    Since
    Added in version 3.2.
    + +
    +
    + +

    ◆ glfwGetWaylandWindow()

    + +
    +
    + + + + + + + + +
    struct wl_surface* glfwGetWaylandWindow (GLFWwindowwindow)
    +
    +
    Returns
    The main struct wl_surface* of the specified window, or NULL if an error occurred.
    +
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    +
    Since
    Added in version 3.2.
    + +
    +
    + +

    ◆ glfwGetEGLDisplay()

    + +
    +
    + + + + + + + + +
    EGLDisplay glfwGetEGLDisplay (void )
    +
    +
    Returns
    The EGLDisplay used by GLFW, or EGL_NO_DISPLAY if an error occurred.
    +
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ glfwGetEGLContext()

    + +
    +
    + + + + + + + + +
    EGLContext glfwGetEGLContext (GLFWwindowwindow)
    +
    +
    Returns
    The EGLContext of the specified window, or EGL_NO_CONTEXT if an error occurred.
    +
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ glfwGetEGLSurface()

    + +
    +
    + + + + + + + + +
    EGLSurface glfwGetEGLSurface (GLFWwindowwindow)
    +
    +
    Returns
    The EGLSurface of the specified window, or EGL_NO_SURFACE if an error occurred.
    +
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ glfwGetOSMesaColorBuffer()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int glfwGetOSMesaColorBuffer (GLFWwindowwindow,
    int * width,
    int * height,
    int * format,
    void ** buffer 
    )
    +
    +
    Parameters
    + + + + + + +
    [in]windowThe window whose color buffer to retrieve.
    [out]widthWhere to store the width of the color buffer, or NULL.
    [out]heightWhere to store the height of the color buffer, or NULL.
    [out]formatWhere to store the OSMesa pixel format of the color buffer, or NULL.
    [out]bufferWhere to store the address of the color buffer, or NULL.
    +
    +
    +
    Returns
    GLFW_TRUE if successful, or GLFW_FALSE if an error occurred.
    +
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    +
    Since
    Added in version 3.3.
    + +
    +
    + +

    ◆ glfwGetOSMesaDepthBuffer()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int glfwGetOSMesaDepthBuffer (GLFWwindowwindow,
    int * width,
    int * height,
    int * bytesPerValue,
    void ** buffer 
    )
    +
    +
    Parameters
    + + + + + + +
    [in]windowThe window whose depth buffer to retrieve.
    [out]widthWhere to store the width of the depth buffer, or NULL.
    [out]heightWhere to store the height of the depth buffer, or NULL.
    [out]bytesPerValueWhere to store the number of bytes per depth buffer element, or NULL.
    [out]bufferWhere to store the address of the depth buffer, or NULL.
    +
    +
    +
    Returns
    GLFW_TRUE if successful, or GLFW_FALSE if an error occurred.
    +
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    +
    Since
    Added in version 3.3.
    + +
    +
    + +

    ◆ glfwGetOSMesaContext()

    + +
    +
    + + + + + + + + +
    OSMesaContext glfwGetOSMesaContext (GLFWwindowwindow)
    +
    +
    Returns
    The OSMesaContext of the specified window, or NULL if an error occurred.
    +
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    +
    Since
    Added in version 3.3.
    +
    diff --git a/ref/glfw/docs/html/group__shapes.html b/ref/glfw/docs/html/group__shapes.html index ec0c7d51..97b17c05 100644 --- a/ref/glfw/docs/html/group__shapes.html +++ b/ref/glfw/docs/html/group__shapes.html @@ -3,7 +3,7 @@ - + GLFW: Standard cursor shapes @@ -11,9 +11,6 @@ - @@ -21,45 +18,31 @@
    - + - + + + +
    Standard cursor shapes
    +

    Description

    +

    See standard cursor creation for how these are used.

    @@ -104,10 +89,10 @@ Macros

    Macros

     The vertical resize arrow shape. More...
     
    -

    Detailed Description

    -

    See standard cursor creation for how these are used.

    Macro Definition Documentation

    - + +

    ◆ GLFW_ARROW_CURSOR

    +
    @@ -120,46 +105,9 @@ Macros - -
    -
    -
    - - - -
    #define GLFW_CROSSHAIR_CURSOR   0x00036003
    -
    -

    The crosshair shape.

    + +

    ◆ GLFW_IBEAM_CURSOR

    -
    -
    - -
    -
    - - - - -
    #define GLFW_HAND_CURSOR   0x00036004
    -
    -

    The hand shape.

    - -
    -
    - -
    -
    - - - - -
    #define GLFW_HRESIZE_CURSOR   0x00036005
    -
    -

    The horizontal resize arrow shape.

    - -
    -
    -
    @@ -172,7 +120,54 @@ Macros - + +

    ◆ GLFW_CROSSHAIR_CURSOR

    + +
    +
    +
    + + + +
    #define GLFW_CROSSHAIR_CURSOR   0x00036003
    +
    +

    The crosshair shape.

    + +
    +
    + +

    ◆ GLFW_HAND_CURSOR

    + +
    +
    + + + + +
    #define GLFW_HAND_CURSOR   0x00036004
    +
    +

    The hand shape.

    + +
    +
    + +

    ◆ GLFW_HRESIZE_CURSOR

    + +
    +
    + + + + +
    #define GLFW_HRESIZE_CURSOR   0x00036005
    +
    +

    The horizontal resize arrow shape.

    + +
    +
    + +

    ◆ GLFW_VRESIZE_CURSOR

    +
    @@ -188,7 +183,7 @@ Macros diff --git a/ref/glfw/docs/html/group__vulkan.html b/ref/glfw/docs/html/group__vulkan.html index c4bbd4f6..bc65626e 100644 --- a/ref/glfw/docs/html/group__vulkan.html +++ b/ref/glfw/docs/html/group__vulkan.html @@ -3,7 +3,7 @@ - +GLFW: Vulkan reference @@ -11,9 +11,6 @@ - @@ -21,45 +18,31 @@
    - + - + + + +
    Vulkan reference
    +

    Description

    +

    This is the reference documentation for Vulkan related functions and types. For more task-oriented information, see the Vulkan guide.

    @@ -93,7 +78,7 @@ Typedefs - + @@ -108,10 +93,10 @@ Functions

    Typedefs

    Functions

    int glfwVulkanSupported (void)
     Returns whether the Vulkan loader has been found. More...
     Returns whether the Vulkan loader and an ICD have been found. More...
     
    const char ** glfwGetRequiredInstanceExtensions (uint32_t *count)
     Returns the Vulkan instance extensions required by GLFW. More...
     Creates a Vulkan surface for the specified window. More...
     
    -

    Detailed Description

    -

    This is the reference documentation for Vulkan related functions and types. For more task-oriented information, see the Vulkan guide.

    Typedef Documentation

    - + +

    ◆ GLFWvkproc

    +
    @@ -123,13 +108,178 @@ Functions

    Generic function pointer used for returning Vulkan API function pointers without forcing a cast from a regular pointer.

    See also
    Querying Vulkan function pointers
    -glfwGetInstanceProcAddress
    +glfwGetInstanceProcAddress
    Since
    Added in version 3.2.

    Function Documentation

    - + +

    ◆ glfwVulkanSupported()

    + +
    +
    +
    + + + + + + + +
    int glfwVulkanSupported (void )
    +
    +

    This function returns whether the Vulkan loader and any minimally functional ICD have been found.

    +

    The availability of a Vulkan loader and even an ICD does not by itself guarantee that surface creation or even instance creation is possible. For example, on Fermi systems Nvidia will install an ICD that provides no actual Vulkan support. Call glfwGetRequiredInstanceExtensions to check whether the extensions necessary for Vulkan surface creation are available and glfwGetPhysicalDevicePresentationSupport to check whether a queue family of a physical device supports image presentation.

    +
    Returns
    GLFW_TRUE if Vulkan is minimally available, or GLFW_FALSE otherwise.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function may be called from any thread.
    +
    See also
    Querying for Vulkan support
    +
    Since
    Added in version 3.2.
    + +
    +
    + +

    ◆ glfwGetRequiredInstanceExtensions()

    + +
    +
    + + + + + + + + +
    const char** glfwGetRequiredInstanceExtensions (uint32_t * count)
    +
    +

    This function returns an array of names of Vulkan instance extensions required by GLFW for creating Vulkan surfaces for GLFW windows. If successful, the list will always contains VK_KHR_surface, so if you don't require any additional extensions you can pass this list directly to the VkInstanceCreateInfo struct.

    +

    If Vulkan is not available on the machine, this function returns NULL and generates a GLFW_API_UNAVAILABLE error. Call glfwVulkanSupported to check whether Vulkan is at least minimally available.

    +

    If Vulkan is available but no set of extensions allowing window surface creation was found, this function returns NULL. You may still use Vulkan for off-screen rendering and compute work.

    +
    Parameters
    + + +
    [out]countWhere to store the number of extensions in the returned array. This is set to zero if an error occurred.
    +
    +
    +
    Returns
    An array of ASCII encoded extension names, or NULL if an error occurred.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_API_UNAVAILABLE.
    +
    Remarks
    Additional extensions may be required by future versions of GLFW. You should check if any extensions you wish to enable are already in the returned array, as it is an error to specify an extension more than once in the VkInstanceCreateInfo struct.
    +
    +macOS: This function currently only supports the VK_MVK_macos_surface extension from MoltenVK.
    +
    Pointer lifetime
    The returned array is allocated and freed by GLFW. You should not free it yourself. It is guaranteed to be valid only until the library is terminated.
    +
    Thread safety
    This function may be called from any thread.
    +
    See also
    Querying required Vulkan extensions
    +
    +glfwCreateWindowSurface
    +
    Since
    Added in version 3.2.
    + +
    +
    + +

    ◆ glfwGetInstanceProcAddress()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLFWvkproc glfwGetInstanceProcAddress (VkInstance instance,
    const char * procname 
    )
    +
    +

    This function returns the address of the specified Vulkan core or extension function for the specified instance. If instance is set to NULL it can return any function exported from the Vulkan loader, including at least the following functions:

    +
      +
    • vkEnumerateInstanceExtensionProperties
    • +
    • vkEnumerateInstanceLayerProperties
    • +
    • vkCreateInstance
    • +
    • vkGetInstanceProcAddr
    • +
    +

    If Vulkan is not available on the machine, this function returns NULL and generates a GLFW_API_UNAVAILABLE error. Call glfwVulkanSupported to check whether Vulkan is at least minimally available.

    +

    This function is equivalent to calling vkGetInstanceProcAddr with a platform-specific query of the Vulkan loader as a fallback.

    +
    Parameters
    + + + +
    [in]instanceThe Vulkan instance to query, or NULL to retrieve functions related to instance creation.
    [in]procnameThe ASCII encoded name of the function.
    +
    +
    +
    Returns
    The address of the function, or NULL if an error occurred.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_API_UNAVAILABLE.
    +
    Pointer lifetime
    The returned function pointer is valid until the library is terminated.
    +
    Thread safety
    This function may be called from any thread.
    +
    See also
    Querying Vulkan function pointers
    +
    Since
    Added in version 3.2.
    + +
    +
    + +

    ◆ glfwGetPhysicalDevicePresentationSupport()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int glfwGetPhysicalDevicePresentationSupport (VkInstance instance,
    VkPhysicalDevice device,
    uint32_t queuefamily 
    )
    +
    +

    This function returns whether the specified queue family of the specified physical device supports presentation to the platform GLFW was built for.

    +

    If Vulkan or the required window surface creation instance extensions are not available on the machine, or if the specified instance was not created with the required extensions, this function returns GLFW_FALSE and generates a GLFW_API_UNAVAILABLE error. Call glfwVulkanSupported to check whether Vulkan is at least minimally available and glfwGetRequiredInstanceExtensions to check what instance extensions are required.

    +
    Parameters
    + + + + +
    [in]instanceThe instance that the physical device belongs to.
    [in]deviceThe physical device that the queue family belongs to.
    [in]queuefamilyThe index of the queue family to query.
    +
    +
    +
    Returns
    GLFW_TRUE if the queue family supports presentation, or GLFW_FALSE otherwise.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_API_UNAVAILABLE and GLFW_PLATFORM_ERROR.
    +
    Remarks
    macOS: This function currently always returns GLFW_TRUE, as the VK_MVK_macos_surface extension does not provide a vkGetPhysicalDevice*PresentationSupport type function.
    +
    Thread safety
    This function may be called from any thread. For synchronization details of Vulkan objects, see the Vulkan specification.
    +
    See also
    Querying for Vulkan presentation support
    +
    Since
    Added in version 3.2.
    + +
    +
    + +

    ◆ glfwCreateWindowSurface()

    +
    @@ -165,8 +315,9 @@ Functions

    This function creates a Vulkan surface for the specified window.

    -

    If the Vulkan loader was not found at initialization, this function returns VK_ERROR_INITIALIZATION_FAILED and generates a GLFW_API_UNAVAILABLE error. Call glfwVulkanSupported to check whether the Vulkan loader was found.

    +

    If the Vulkan loader or at least one minimally functional ICD were not found, this function returns VK_ERROR_INITIALIZATION_FAILED and generates a GLFW_API_UNAVAILABLE error. Call glfwVulkanSupported to check whether Vulkan is at least minimally available.

    If the required window surface creation instance extensions are not available or if the specified instance was not created with these extensions enabled, this function returns VK_ERROR_EXTENSION_NOT_PRESENT and generates a GLFW_API_UNAVAILABLE error. Call glfwGetRequiredInstanceExtensions to check what instance extensions are required.

    +

    The window surface cannot be shared with another API so the window must have been created with the client api hint set to GLFW_NO_API otherwise it generates a GLFW_INVALID_VALUE error and returns VK_ERROR_NATIVE_WINDOW_IN_USE_KHR.

    The window surface must be destroyed before the specified Vulkan instance. It is the responsibility of the caller to destroy the window surface. GLFW does not destroy it for you. Call vkDestroySurfaceKHR to destroy the surface.

    Parameters
    @@ -178,164 +329,16 @@ Functions
    Returns
    VK_SUCCESS if successful, or a Vulkan error code if an error occurred.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_API_UNAVAILABLE and GLFW_PLATFORM_ERROR.
    -
    Remarks
    If an error occurs before the creation call is made, GLFW returns the Vulkan error code most appropriate for the error. Appropriate use of glfwVulkanSupported and glfwGetRequiredInstanceExtensions should eliminate almost all occurrences of these errors.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_API_UNAVAILABLE, GLFW_PLATFORM_ERROR and GLFW_INVALID_VALUE
    +
    Remarks
    If an error occurs before the creation call is made, GLFW returns the Vulkan error code most appropriate for the error. Appropriate use of glfwVulkanSupported and glfwGetRequiredInstanceExtensions should eliminate almost all occurrences of these errors.
    +
    +macOS: This function currently only supports the VK_MVK_macos_surface extension from MoltenVK.
    +
    +macOS: This function creates and sets a CAMetalLayer instance for the window content view, which is required for MoltenVK to function.
    Thread safety
    This function may be called from any thread. For synchronization details of Vulkan objects, see the Vulkan specification.
    See also
    Creating a Vulkan window surface
    -glfwGetRequiredInstanceExtensions
    -
    Since
    Added in version 3.2.
    - - - - -
    -
    -
    - - - - - - - - - - - - - - - - - -
    GLFWvkproc glfwGetInstanceProcAddress (VkInstance instance,
    const char * procname 
    )
    -
    -

    This function returns the address of the specified Vulkan core or extension function for the specified instance. If instance is set to NULL it can return any function exported from the Vulkan loader, including at least the following functions:

    -
      -
    • vkEnumerateInstanceExtensionProperties
    • -
    • vkEnumerateInstanceLayerProperties
    • -
    • vkCreateInstance
    • -
    • vkGetInstanceProcAddr
    • -
    -

    If Vulkan is not available on the machine, this function returns NULL and generates a GLFW_API_UNAVAILABLE error. Call glfwVulkanSupported to check whether Vulkan is available.

    -

    This function is equivalent to calling vkGetInstanceProcAddr with a platform-specific query of the Vulkan loader as a fallback.

    -
    Parameters
    - - - -
    [in]instanceThe Vulkan instance to query, or NULL to retrieve functions related to instance creation.
    [in]procnameThe ASCII encoded name of the function.
    -
    -
    -
    Returns
    The address of the function, or NULL if an error occurred.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_API_UNAVAILABLE.
    -
    Pointer lifetime
    The returned function pointer is valid until the library is terminated.
    -
    Thread safety
    This function may be called from any thread.
    -
    See also
    Querying Vulkan function pointers
    -
    Since
    Added in version 3.2.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    int glfwGetPhysicalDevicePresentationSupport (VkInstance instance,
    VkPhysicalDevice device,
    uint32_t queuefamily 
    )
    -
    -

    This function returns whether the specified queue family of the specified physical device supports presentation to the platform GLFW was built for.

    -

    If Vulkan or the required window surface creation instance extensions are not available on the machine, or if the specified instance was not created with the required extensions, this function returns GLFW_FALSE and generates a GLFW_API_UNAVAILABLE error. Call glfwVulkanSupported to check whether Vulkan is available and glfwGetRequiredInstanceExtensions to check what instance extensions are required.

    -
    Parameters
    - - - - -
    [in]instanceThe instance that the physical device belongs to.
    [in]deviceThe physical device that the queue family belongs to.
    [in]queuefamilyThe index of the queue family to query.
    -
    -
    -
    Returns
    GLFW_TRUE if the queue family supports presentation, or GLFW_FALSE otherwise.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_API_UNAVAILABLE and GLFW_PLATFORM_ERROR.
    -
    Thread safety
    This function may be called from any thread. For synchronization details of Vulkan objects, see the Vulkan specification.
    -
    See also
    Querying for Vulkan presentation support
    -
    Since
    Added in version 3.2.
    - -
    -
    - -
    -
    - - - - - - - - -
    const char** glfwGetRequiredInstanceExtensions (uint32_t * count)
    -
    -

    This function returns an array of names of Vulkan instance extensions required by GLFW for creating Vulkan surfaces for GLFW windows. If successful, the list will always contains VK_KHR_surface, so if you don't require any additional extensions you can pass this list directly to the VkInstanceCreateInfo struct.

    -

    If Vulkan is not available on the machine, this function returns NULL and generates a GLFW_API_UNAVAILABLE error. Call glfwVulkanSupported to check whether Vulkan is available.

    -

    If Vulkan is available but no set of extensions allowing window surface creation was found, this function returns NULL. You may still use Vulkan for off-screen rendering and compute work.

    -
    Parameters
    - - -
    [out]countWhere to store the number of extensions in the returned array. This is set to zero if an error occurred.
    -
    -
    -
    Returns
    An array of ASCII encoded extension names, or NULL if an error occurred.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_API_UNAVAILABLE.
    -
    Remarks
    Additional extensions may be required by future versions of GLFW. You should check if any extensions you wish to enable are already in the returned array, as it is an error to specify an extension more than once in the VkInstanceCreateInfo struct.
    -
    Pointer lifetime
    The returned array is allocated and freed by GLFW. You should not free it yourself. It is guaranteed to be valid only until the library is terminated.
    -
    Thread safety
    This function may be called from any thread.
    -
    See also
    Querying required Vulkan extensions
    -
    -glfwCreateWindowSurface
    -
    Since
    Added in version 3.2.
    - -
    -
    - -
    -
    - - - - - - - - -
    int glfwVulkanSupported (void )
    -
    -

    This function returns whether the Vulkan loader has been found. This check is performed by glfwInit.

    -

    The availability of a Vulkan loader does not by itself guarantee that window surface creation or even device creation is possible. Call glfwGetRequiredInstanceExtensions to check whether the extensions necessary for Vulkan surface creation are available and glfwGetPhysicalDevicePresentationSupport to check whether a queue family of a physical device supports image presentation.

    -
    Returns
    GLFW_TRUE if Vulkan is available, or GLFW_FALSE otherwise.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    -
    Thread safety
    This function may be called from any thread.
    -
    See also
    Querying for Vulkan support
    +glfwGetRequiredInstanceExtensions
    Since
    Added in version 3.2.
    @@ -343,7 +346,7 @@ Functions
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Macros

    #define GLFW_FOCUSED   0x00020001
     Input focus window hint and attribute. More...
     
    #define GLFW_ICONIFIED   0x00020002
     Window iconification window attribute. More...
     
    #define GLFW_RESIZABLE   0x00020003
     Window resize-ability window hint and attribute. More...
     
    #define GLFW_VISIBLE   0x00020004
     Window visibility window hint and attribute. More...
     
    #define GLFW_DECORATED   0x00020005
     Window decoration window hint and attribute. More...
     
    #define GLFW_AUTO_ICONIFY   0x00020006
     Window auto-iconification window hint and attribute. More...
     
    #define GLFW_FLOATING   0x00020007
     Window decoration window hint and attribute. More...
     
    #define GLFW_MAXIMIZED   0x00020008
     Window maximization window hint and attribute. More...
     
    #define GLFW_CENTER_CURSOR   0x00020009
     Cursor centering window hint. More...
     
    #define GLFW_TRANSPARENT_FRAMEBUFFER   0x0002000A
     Window framebuffer transparency hint and attribute. More...
     
    #define GLFW_HOVERED   0x0002000B
     Mouse cursor hover window attribute. More...
     
    #define GLFW_FOCUS_ON_SHOW   0x0002000C
     Input focus on calling show window hint and attribute. More...
     
    #define GLFW_RED_BITS   0x00021001
     Framebuffer bit depth hint. More...
     
    #define GLFW_GREEN_BITS   0x00021002
     Framebuffer bit depth hint. More...
     
    #define GLFW_BLUE_BITS   0x00021003
     Framebuffer bit depth hint. More...
     
    #define GLFW_ALPHA_BITS   0x00021004
     Framebuffer bit depth hint. More...
     
    #define GLFW_DEPTH_BITS   0x00021005
     Framebuffer bit depth hint. More...
     
    #define GLFW_STENCIL_BITS   0x00021006
     Framebuffer bit depth hint. More...
     
    #define GLFW_ACCUM_RED_BITS   0x00021007
     Framebuffer bit depth hint. More...
     
    #define GLFW_ACCUM_GREEN_BITS   0x00021008
     Framebuffer bit depth hint. More...
     
    #define GLFW_ACCUM_BLUE_BITS   0x00021009
     Framebuffer bit depth hint. More...
     
    #define GLFW_ACCUM_ALPHA_BITS   0x0002100A
     Framebuffer bit depth hint. More...
     
    #define GLFW_AUX_BUFFERS   0x0002100B
     Framebuffer auxiliary buffer hint. More...
     
    #define GLFW_STEREO   0x0002100C
     OpenGL stereoscopic rendering hint. More...
     
    #define GLFW_SAMPLES   0x0002100D
     Framebuffer MSAA samples hint. More...
     
    #define GLFW_SRGB_CAPABLE   0x0002100E
     Framebuffer sRGB hint. More...
     
    #define GLFW_REFRESH_RATE   0x0002100F
     Monitor refresh rate hint. More...
     
    #define GLFW_DOUBLEBUFFER   0x00021010
     Framebuffer double buffering hint. More...
     
    #define GLFW_CLIENT_API   0x00022001
     Context client API hint and attribute. More...
     
    #define GLFW_CONTEXT_VERSION_MAJOR   0x00022002
     Context client API major version hint and attribute. More...
     
    #define GLFW_CONTEXT_VERSION_MINOR   0x00022003
     Context client API minor version hint and attribute. More...
     
    #define GLFW_CONTEXT_REVISION   0x00022004
     Context client API revision number hint and attribute. More...
     
    #define GLFW_CONTEXT_ROBUSTNESS   0x00022005
     Context robustness hint and attribute. More...
     
    #define GLFW_OPENGL_FORWARD_COMPAT   0x00022006
     OpenGL forward-compatibility hint and attribute. More...
     
    #define GLFW_OPENGL_DEBUG_CONTEXT   0x00022007
     OpenGL debug context hint and attribute. More...
     
    #define GLFW_OPENGL_PROFILE   0x00022008
     OpenGL profile hint and attribute. More...
     
    #define GLFW_CONTEXT_RELEASE_BEHAVIOR   0x00022009
     Context flush-on-release hint and attribute. More...
     
    #define GLFW_CONTEXT_NO_ERROR   0x0002200A
     Context error suppression hint and attribute. More...
     
    #define GLFW_CONTEXT_CREATION_API   0x0002200B
     Context creation API hint and attribute. More...
     
    #define GLFW_SCALE_TO_MONITOR   0x0002200C
     Window content area scaling window window hint. More...
     
    #define GLFW_COCOA_RETINA_FRAMEBUFFER   0x00023001
     macOS specific window hint. More...
     
    #define GLFW_COCOA_FRAME_NAME   0x00023002
     macOS specific window hint. More...
     
    #define GLFW_COCOA_GRAPHICS_SWITCHING   0x00023003
     macOS specific window hint. More...
     
    #define GLFW_X11_CLASS_NAME   0x00024001
     X11 specific window hint. More...
     
    #define GLFW_X11_INSTANCE_NAME   0x00024002
     X11 specific window hint. More...
     
    @@ -107,9 +231,18 @@ Typedefs + + + + + + + + +

    Typedefs

    typedef struct GLFWwindow GLFWwindow
    typedef void(* GLFWwindowiconifyfun) (GLFWwindow *, int)
     The function signature for window iconify/restore callbacks. More...
     
    typedef void(* GLFWwindowmaximizefun) (GLFWwindow *, int)
     The function signature for window maximize/restore callbacks. More...
     
    typedef void(* GLFWframebuffersizefun) (GLFWwindow *, int, int)
     The function signature for framebuffer resize callbacks. More...
     
    typedef void(* GLFWwindowcontentscalefun) (GLFWwindow *, float, float)
     The function signature for window content scale callbacks. More...
     
    typedef struct GLFWimage GLFWimage
     Image data. More...
     
    @@ -119,6 +252,9 @@ Functions + + + @@ -138,13 +274,13 @@ Functions - + - + - + @@ -153,7 +289,7 @@ Functions - + @@ -161,6 +297,15 @@ Functions + + + + + + + + + @@ -179,6 +324,9 @@ Functions + + + @@ -188,6 +336,9 @@ Functions + + + @@ -212,9 +363,15 @@ Functions + + + + + + @@ -231,35 +388,680 @@ Functions

    Functions

    void glfwWindowHint (int hint, int value)
     Sets the specified window hint to the desired value. More...
     
    void glfwWindowHintString (int hint, const char *value)
     Sets the specified window hint to the desired value. More...
     
    GLFWwindowglfwCreateWindow (int width, int height, const char *title, GLFWmonitor *monitor, GLFWwindow *share)
     Creates a window and its associated context. More...
     
     Sets the icon for the specified window. More...
     
    void glfwGetWindowPos (GLFWwindow *window, int *xpos, int *ypos)
     Retrieves the position of the client area of the specified window. More...
     Retrieves the position of the content area of the specified window. More...
     
    void glfwSetWindowPos (GLFWwindow *window, int xpos, int ypos)
     Sets the position of the client area of the specified window. More...
     Sets the position of the content area of the specified window. More...
     
    void glfwGetWindowSize (GLFWwindow *window, int *width, int *height)
     Retrieves the size of the client area of the specified window. More...
     Retrieves the size of the content area of the specified window. More...
     
    void glfwSetWindowSizeLimits (GLFWwindow *window, int minwidth, int minheight, int maxwidth, int maxheight)
     Sets the size limits of the specified window. More...
     Sets the aspect ratio of the specified window. More...
     
    void glfwSetWindowSize (GLFWwindow *window, int width, int height)
     Sets the size of the client area of the specified window. More...
     Sets the size of the content area of the specified window. More...
     
    void glfwGetFramebufferSize (GLFWwindow *window, int *width, int *height)
     Retrieves the size of the framebuffer of the specified window. More...
    void glfwGetWindowFrameSize (GLFWwindow *window, int *left, int *top, int *right, int *bottom)
     Retrieves the size of the frame of the window. More...
     
    void glfwGetWindowContentScale (GLFWwindow *window, float *xscale, float *yscale)
     Retrieves the content scale for the specified window. More...
     
    float glfwGetWindowOpacity (GLFWwindow *window)
     Returns the opacity of the whole window. More...
     
    void glfwSetWindowOpacity (GLFWwindow *window, float opacity)
     Sets the opacity of the whole window. More...
     
    void glfwIconifyWindow (GLFWwindow *window)
     Iconifies the specified window. More...
     
    void glfwFocusWindow (GLFWwindow *window)
     Brings the specified window to front and sets input focus. More...
     
    void glfwRequestWindowAttention (GLFWwindow *window)
     Requests user attention to the specified window. More...
     
    GLFWmonitorglfwGetWindowMonitor (GLFWwindow *window)
     Returns the monitor that the window uses for full screen mode. More...
     
    int glfwGetWindowAttrib (GLFWwindow *window, int attrib)
     Returns an attribute of the specified window. More...
     
    void glfwSetWindowAttrib (GLFWwindow *window, int attrib, int value)
     Sets an attribute of the specified window. More...
     
    void glfwSetWindowUserPointer (GLFWwindow *window, void *pointer)
     Sets the user pointer of the specified window. More...
     
    GLFWwindowiconifyfun glfwSetWindowIconifyCallback (GLFWwindow *window, GLFWwindowiconifyfun cbfun)
     Sets the iconify callback for the specified window. More...
     
    GLFWwindowmaximizefun glfwSetWindowMaximizeCallback (GLFWwindow *window, GLFWwindowmaximizefun cbfun)
     Sets the maximize callback for the specified window. More...
     
    GLFWframebuffersizefun glfwSetFramebufferSizeCallback (GLFWwindow *window, GLFWframebuffersizefun cbfun)
     Sets the framebuffer resize callback for the specified window. More...
     
    GLFWwindowcontentscalefun glfwSetWindowContentScaleCallback (GLFWwindow *window, GLFWwindowcontentscalefun cbfun)
     Sets the window content scale callback for the specified window. More...
     
    void glfwPollEvents (void)
     Processes all pending events. More...
     
     Swaps the front and back buffers of the specified window. More...
     
    -

    Detailed Description

    -

    This is the reference documentation for window related functions and types, including creation, deletion and event polling. For more task-oriented information, see the Window guide.

    -

    Typedef Documentation

    - +

    Macro Definition Documentation

    + +

    ◆ GLFW_FOCUSED

    +
    - +
    typedef void(* GLFWframebuffersizefun) (GLFWwindow *, int, int)#define GLFW_FOCUSED   0x00020001
    -

    This is the function signature for framebuffer resize callback functions.

    -
    Parameters
    - - - - -
    [in]windowThe window whose framebuffer was resized.
    [in]widthThe new width, in pixels, of the framebuffer.
    [in]heightThe new height, in pixels, of the framebuffer.
    -
    -
    -
    See also
    Framebuffer size
    -
    -glfwSetFramebufferSizeCallback
    -
    Since
    Added in version 3.0.
    +

    Input focus window hint or window attribute.

    - + +

    ◆ GLFW_ICONIFIED

    + +
    +
    + + + + +
    #define GLFW_ICONIFIED   0x00020002
    +
    +

    Window iconification window attribute.

    + +
    +
    + +

    ◆ GLFW_RESIZABLE

    + +
    +
    + + + + +
    #define GLFW_RESIZABLE   0x00020003
    +
    +

    Window resize-ability window hint and window attribute.

    + +
    +
    + +

    ◆ GLFW_VISIBLE

    + +
    +
    + + + + +
    #define GLFW_VISIBLE   0x00020004
    +
    +

    Window visibility window hint and window attribute.

    + +
    +
    + +

    ◆ GLFW_DECORATED

    + +
    +
    + + + + +
    #define GLFW_DECORATED   0x00020005
    +
    +

    Window decoration window hint and window attribute.

    + +
    +
    + +

    ◆ GLFW_AUTO_ICONIFY

    + +
    +
    + + + + +
    #define GLFW_AUTO_ICONIFY   0x00020006
    +
    +

    Window auto-iconification window hint and window attribute.

    + +
    +
    + +

    ◆ GLFW_FLOATING

    + +
    +
    + + + + +
    #define GLFW_FLOATING   0x00020007
    +
    +

    Window decoration window hint and window attribute.

    + +
    +
    + +

    ◆ GLFW_MAXIMIZED

    + +
    +
    + + + + +
    #define GLFW_MAXIMIZED   0x00020008
    +
    +

    Window maximization window hint and window attribute.

    + +
    +
    + +

    ◆ GLFW_CENTER_CURSOR

    + +
    +
    + + + + +
    #define GLFW_CENTER_CURSOR   0x00020009
    +
    +

    Cursor centering window hint.

    + +
    +
    + +

    ◆ GLFW_TRANSPARENT_FRAMEBUFFER

    + +
    +
    + + + + +
    #define GLFW_TRANSPARENT_FRAMEBUFFER   0x0002000A
    +
    +

    Window framebuffer transparency window hint and window attribute.

    + +
    +
    + +

    ◆ GLFW_HOVERED

    + +
    +
    + + + + +
    #define GLFW_HOVERED   0x0002000B
    +
    +

    Mouse cursor hover window attribute.

    + +
    +
    + +

    ◆ GLFW_FOCUS_ON_SHOW

    + +
    +
    + + + + +
    #define GLFW_FOCUS_ON_SHOW   0x0002000C
    +
    +

    Input focus window hint or window attribute.

    + +
    +
    + +

    ◆ GLFW_RED_BITS

    + +
    +
    + + + + +
    #define GLFW_RED_BITS   0x00021001
    +
    +

    Framebuffer bit depth hint.

    + +
    +
    + +

    ◆ GLFW_GREEN_BITS

    + +
    +
    + + + + +
    #define GLFW_GREEN_BITS   0x00021002
    +
    +

    Framebuffer bit depth hint.

    + +
    +
    + +

    ◆ GLFW_BLUE_BITS

    + +
    +
    + + + + +
    #define GLFW_BLUE_BITS   0x00021003
    +
    +

    Framebuffer bit depth hint.

    + +
    +
    + +

    ◆ GLFW_ALPHA_BITS

    + +
    +
    + + + + +
    #define GLFW_ALPHA_BITS   0x00021004
    +
    +

    Framebuffer bit depth hint.

    + +
    +
    + +

    ◆ GLFW_DEPTH_BITS

    + +
    +
    + + + + +
    #define GLFW_DEPTH_BITS   0x00021005
    +
    +

    Framebuffer bit depth hint.

    + +
    +
    + +

    ◆ GLFW_STENCIL_BITS

    + +
    +
    + + + + +
    #define GLFW_STENCIL_BITS   0x00021006
    +
    +

    Framebuffer bit depth hint.

    + +
    +
    + +

    ◆ GLFW_ACCUM_RED_BITS

    + +
    +
    + + + + +
    #define GLFW_ACCUM_RED_BITS   0x00021007
    +
    +

    Framebuffer bit depth hint.

    + +
    +
    + +

    ◆ GLFW_ACCUM_GREEN_BITS

    + +
    +
    + + + + +
    #define GLFW_ACCUM_GREEN_BITS   0x00021008
    +
    +

    Framebuffer bit depth hint.

    + +
    +
    + +

    ◆ GLFW_ACCUM_BLUE_BITS

    + +
    +
    + + + + +
    #define GLFW_ACCUM_BLUE_BITS   0x00021009
    +
    +

    Framebuffer bit depth hint.

    + +
    +
    + +

    ◆ GLFW_ACCUM_ALPHA_BITS

    + +
    +
    + + + + +
    #define GLFW_ACCUM_ALPHA_BITS   0x0002100A
    +
    +

    Framebuffer bit depth hint.

    + +
    +
    + +

    ◆ GLFW_AUX_BUFFERS

    + +
    +
    + + + + +
    #define GLFW_AUX_BUFFERS   0x0002100B
    +
    +

    Framebuffer auxiliary buffer hint.

    + +
    +
    + +

    ◆ GLFW_STEREO

    + +
    +
    + + + + +
    #define GLFW_STEREO   0x0002100C
    +
    +

    OpenGL stereoscopic rendering hint.

    + +
    +
    + +

    ◆ GLFW_SAMPLES

    + +
    +
    + + + + +
    #define GLFW_SAMPLES   0x0002100D
    +
    +

    Framebuffer MSAA samples hint.

    + +
    +
    + +

    ◆ GLFW_SRGB_CAPABLE

    + +
    +
    + + + + +
    #define GLFW_SRGB_CAPABLE   0x0002100E
    +
    +

    Framebuffer sRGB hint.

    + +
    +
    + +

    ◆ GLFW_REFRESH_RATE

    + +
    +
    + + + + +
    #define GLFW_REFRESH_RATE   0x0002100F
    +
    +

    Monitor refresh rate hint.

    + +
    +
    + +

    ◆ GLFW_DOUBLEBUFFER

    + +
    +
    + + + + +
    #define GLFW_DOUBLEBUFFER   0x00021010
    +
    +

    Framebuffer double buffering hint.

    + +
    +
    + +

    ◆ GLFW_CLIENT_API

    + +
    +
    + + + + +
    #define GLFW_CLIENT_API   0x00022001
    +
    +

    Context client API hint and attribute.

    + +
    +
    + +

    ◆ GLFW_CONTEXT_VERSION_MAJOR

    + +
    +
    + + + + +
    #define GLFW_CONTEXT_VERSION_MAJOR   0x00022002
    +
    +

    Context client API major version hint and attribute.

    + +
    +
    + +

    ◆ GLFW_CONTEXT_VERSION_MINOR

    + +
    +
    + + + + +
    #define GLFW_CONTEXT_VERSION_MINOR   0x00022003
    +
    +

    Context client API minor version hint and attribute.

    + +
    +
    + +

    ◆ GLFW_CONTEXT_REVISION

    + +
    +
    + + + + +
    #define GLFW_CONTEXT_REVISION   0x00022004
    +
    +

    Context client API revision number hint and attribute.

    + +
    +
    + +

    ◆ GLFW_CONTEXT_ROBUSTNESS

    + +
    +
    + + + + +
    #define GLFW_CONTEXT_ROBUSTNESS   0x00022005
    +
    +

    Context client API revision number hint and attribute.

    + +
    +
    + +

    ◆ GLFW_OPENGL_FORWARD_COMPAT

    + +
    +
    + + + + +
    #define GLFW_OPENGL_FORWARD_COMPAT   0x00022006
    +
    +

    OpenGL forward-compatibility hint and attribute.

    + +
    +
    + +

    ◆ GLFW_OPENGL_DEBUG_CONTEXT

    + +
    +
    + + + + +
    #define GLFW_OPENGL_DEBUG_CONTEXT   0x00022007
    +
    +

    OpenGL debug context hint and attribute.

    + +
    +
    + +

    ◆ GLFW_OPENGL_PROFILE

    + +
    +
    + + + + +
    #define GLFW_OPENGL_PROFILE   0x00022008
    +
    +

    OpenGL profile hint and attribute.

    + +
    +
    + +

    ◆ GLFW_CONTEXT_RELEASE_BEHAVIOR

    + +
    +
    + + + + +
    #define GLFW_CONTEXT_RELEASE_BEHAVIOR   0x00022009
    +
    +

    Context flush-on-release hint and attribute.

    + +
    +
    + +

    ◆ GLFW_CONTEXT_NO_ERROR

    + +
    +
    + + + + +
    #define GLFW_CONTEXT_NO_ERROR   0x0002200A
    +
    +

    Context error suppression hint and attribute.

    + +
    +
    + +

    ◆ GLFW_CONTEXT_CREATION_API

    + +
    +
    + + + + +
    #define GLFW_CONTEXT_CREATION_API   0x0002200B
    +
    +

    Context creation API hint and attribute.

    + +
    +
    + +

    ◆ GLFW_SCALE_TO_MONITOR

    + +
    +
    + + + + +
    #define GLFW_SCALE_TO_MONITOR   0x0002200C
    +
    + +
    +
    + +

    ◆ GLFW_COCOA_RETINA_FRAMEBUFFER

    + +
    +
    + + + + +
    #define GLFW_COCOA_RETINA_FRAMEBUFFER   0x00023001
    +
    + +
    +
    + +

    ◆ GLFW_COCOA_FRAME_NAME

    + +
    +
    + + + + +
    #define GLFW_COCOA_FRAME_NAME   0x00023002
    +
    + +
    +
    + +

    ◆ GLFW_COCOA_GRAPHICS_SWITCHING

    + +
    +
    + + + + +
    #define GLFW_COCOA_GRAPHICS_SWITCHING   0x00023003
    +
    + +
    +
    + +

    ◆ GLFW_X11_CLASS_NAME

    + +
    +
    + + + + +
    #define GLFW_X11_CLASS_NAME   0x00024001
    +
    + +
    +
    + +

    ◆ GLFW_X11_INSTANCE_NAME

    + +
    +
    + + + + +
    #define GLFW_X11_INSTANCE_NAME   0x00024002
    +
    + +
    +
    +

    Typedef Documentation

    + +

    ◆ GLFWwindow

    +
    @@ -274,79 +1076,9 @@ Functions - -
    -
    -
    - - - -
    typedef void(* GLFWwindowclosefun) (GLFWwindow *)
    -
    -

    This is the function signature for window close callback functions.

    -
    Parameters
    - - -
    [in]windowThe window that the user attempted to close.
    -
    -
    -
    See also
    Window closing and close flag
    -
    -glfwSetWindowCloseCallback
    -
    Since
    Added in version 2.5.
    -
    GLFW 3: Added window handle parameter.
    + +

    ◆ GLFWwindowposfun

    -
    -
    - -
    -
    - - - - -
    typedef void(* GLFWwindowfocusfun) (GLFWwindow *, int)
    -
    -

    This is the function signature for window focus callback functions.

    -
    Parameters
    - - - -
    [in]windowThe window that gained or lost input focus.
    [in]focusedGLFW_TRUE if the window was given input focus, or GLFW_FALSE if it lost it.
    -
    -
    -
    See also
    Window input focus
    -
    -glfwSetWindowFocusCallback
    -
    Since
    Added in version 3.0.
    - -
    -
    - -
    -
    - - - - -
    typedef void(* GLFWwindowiconifyfun) (GLFWwindow *, int)
    -
    -

    This is the function signature for window iconify/restore callback functions.

    -
    Parameters
    - - - -
    [in]windowThe window that was iconified or restored.
    [in]iconifiedGLFW_TRUE if the window was iconified, or GLFW_FALSE if it was restored.
    -
    -
    -
    See also
    Window iconification
    -
    -glfwSetWindowIconifyCallback
    -
    Since
    Added in version 3.0.
    - -
    -
    -
    @@ -359,43 +1091,21 @@ Functions
    Parameters
    - - + +
    [in]windowThe window that was moved.
    [in]xposThe new x-coordinate, in screen coordinates, of the upper-left corner of the client area of the window.
    [in]yposThe new y-coordinate, in screen coordinates, of the upper-left corner of the client area of the window.
    [in]xposThe new x-coordinate, in screen coordinates, of the upper-left corner of the content area of the window.
    [in]yposThe new y-coordinate, in screen coordinates, of the upper-left corner of the content area of the window.
    See also
    Window position
    -glfwSetWindowPosCallback
    +glfwSetWindowPosCallback
    Since
    Added in version 3.0.
    - -
    -
    - - - - -
    typedef void(* GLFWwindowrefreshfun) (GLFWwindow *)
    -
    -

    This is the function signature for window refresh callback functions.

    -
    Parameters
    - - -
    [in]windowThe window whose content needs to be refreshed.
    -
    -
    -
    See also
    Window damage and refresh
    -
    -glfwSetWindowRefreshCallback
    -
    Since
    Added in version 2.5.
    -
    GLFW 3: Added window handle parameter.
    + +

    ◆ GLFWwindowsizefun

    -
    -
    -
    @@ -415,14 +1125,338 @@ Functions
    See also
    Window size
    -glfwSetWindowSizeCallback
    -
    Since
    Added in version 1.0.
    -
    GLFW 3: Added window handle parameter.
    +glfwSetWindowSizeCallback +
    Since
    Added in version 1.0. GLFW 3: Added window handle parameter.
    + + + + +

    ◆ GLFWwindowclosefun

    + +
    +
    +
    + + + +
    typedef void(* GLFWwindowclosefun) (GLFWwindow *)
    +
    +

    This is the function signature for window close callback functions.

    +
    Parameters
    + + +
    [in]windowThe window that the user attempted to close.
    +
    +
    +
    See also
    Window closing and close flag
    +
    +glfwSetWindowCloseCallback
    +
    Since
    Added in version 2.5. GLFW 3: Added window handle parameter.
    + +
    +
    + +

    ◆ GLFWwindowrefreshfun

    + +
    +
    + + + + +
    typedef void(* GLFWwindowrefreshfun) (GLFWwindow *)
    +
    +

    This is the function signature for window refresh callback functions.

    +
    Parameters
    + + +
    [in]windowThe window whose content needs to be refreshed.
    +
    +
    +
    See also
    Window damage and refresh
    +
    +glfwSetWindowRefreshCallback
    +
    Since
    Added in version 2.5. GLFW 3: Added window handle parameter.
    + +
    +
    + +

    ◆ GLFWwindowfocusfun

    + +
    +
    + + + + +
    typedef void(* GLFWwindowfocusfun) (GLFWwindow *, int)
    +
    +

    This is the function signature for window focus callback functions.

    +
    Parameters
    + + + +
    [in]windowThe window that gained or lost input focus.
    [in]focusedGLFW_TRUE if the window was given input focus, or GLFW_FALSE if it lost it.
    +
    +
    +
    See also
    Window input focus
    +
    +glfwSetWindowFocusCallback
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ GLFWwindowiconifyfun

    + +
    +
    + + + + +
    typedef void(* GLFWwindowiconifyfun) (GLFWwindow *, int)
    +
    +

    This is the function signature for window iconify/restore callback functions.

    +
    Parameters
    + + + +
    [in]windowThe window that was iconified or restored.
    [in]iconifiedGLFW_TRUE if the window was iconified, or GLFW_FALSE if it was restored.
    +
    +
    +
    See also
    Window iconification
    +
    +glfwSetWindowIconifyCallback
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ GLFWwindowmaximizefun

    + +
    +
    + + + + +
    typedef void(* GLFWwindowmaximizefun) (GLFWwindow *, int)
    +
    +

    This is the function signature for window maximize/restore callback functions.

    +
    Parameters
    + + + +
    [in]windowThe window that was maximized or restored.
    [in]iconifiedGLFW_TRUE if the window was maximized, or GLFW_FALSE if it was restored.
    +
    +
    +
    See also
    Window maximization
    +
    +glfwSetWindowMaximizeCallback
    +
    Since
    Added in version 3.3.
    + +
    +
    + +

    ◆ GLFWframebuffersizefun

    + +
    +
    + + + + +
    typedef void(* GLFWframebuffersizefun) (GLFWwindow *, int, int)
    +
    +

    This is the function signature for framebuffer resize callback functions.

    +
    Parameters
    + + + + +
    [in]windowThe window whose framebuffer was resized.
    [in]widthThe new width, in pixels, of the framebuffer.
    [in]heightThe new height, in pixels, of the framebuffer.
    +
    +
    +
    See also
    Framebuffer size
    +
    +glfwSetFramebufferSizeCallback
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ GLFWwindowcontentscalefun

    + +
    +
    + + + + +
    typedef void(* GLFWwindowcontentscalefun) (GLFWwindow *, float, float)
    +
    +

    This is the function signature for window content scale callback functions.

    +
    Parameters
    + + + + +
    [in]windowThe window whose content scale changed.
    [in]xscaleThe new x-axis content scale of the window.
    [in]yscaleThe new y-axis content scale of the window.
    +
    +
    +
    See also
    Window content scale
    +
    +glfwSetWindowContentScaleCallback
    +
    Since
    Added in version 3.3.
    + +
    +
    + +

    ◆ GLFWimage

    + +
    +
    + + + + +
    typedef struct GLFWimage GLFWimage
    +
    +

    This describes a single 2D image. See the documentation for each related function what the expected pixel format is.

    +
    See also
    Custom cursor creation
    +
    +Window icon
    +
    Since
    Added in version 2.1. GLFW 3: Removed format and bytes-per-pixel members.

    Function Documentation

    - + +

    ◆ glfwDefaultWindowHints()

    + +
    +
    + + + + + + + + +
    void glfwDefaultWindowHints (void )
    +
    +

    This function resets all window hints to their default values.

    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Window creation hints
    +
    +glfwWindowHint
    +
    +glfwWindowHintString
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ glfwWindowHint()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void glfwWindowHint (int hint,
    int value 
    )
    +
    +

    This function sets hints for the next call to glfwCreateWindow. The hints, once set, retain their values until changed by a call to this function or glfwDefaultWindowHints, or until the library is terminated.

    +

    Only integer value hints can be set with this function. String value hints are set with glfwWindowHintString.

    +

    This function does not check whether the specified hint values are valid. If you set hints to invalid values this will instead be reported by the next call to glfwCreateWindow.

    +

    Some hints are platform specific. These may be set on any platform but they will only affect their specific platform. Other platforms will ignore them. Setting these hints requires no platform specific headers or functions.

    +
    Parameters
    + + + +
    [in]hintThe window hint to set.
    [in]valueThe new value of the window hint.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_INVALID_ENUM.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Window creation hints
    +
    +glfwWindowHintString
    +
    +glfwDefaultWindowHints
    +
    Since
    Added in version 3.0. Replaces glfwOpenWindowHint.
    + +
    +
    + +

    ◆ glfwWindowHintString()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void glfwWindowHintString (int hint,
    const char * value 
    )
    +
    +

    This function sets hints for the next call to glfwCreateWindow. The hints, once set, retain their values until changed by a call to this function or glfwDefaultWindowHints, or until the library is terminated.

    +

    Only string type hints can be set with this function. Integer value hints are set with glfwWindowHint.

    +

    This function does not check whether the specified hint values are valid. If you set hints to invalid values this will instead be reported by the next call to glfwCreateWindow.

    +

    Some hints are platform specific. These may be set on any platform but they will only affect their specific platform. Other platforms will ignore them. Setting these hints requires no platform specific headers or functions.

    +
    Parameters
    + + + +
    [in]hintThe window hint to set.
    [in]valueThe new value of the window hint.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_INVALID_ENUM.
    +
    Pointer lifetime
    The specified string is copied before this function returns.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Window creation hints
    +
    +glfwWindowHint
    +
    +glfwDefaultWindowHints
    +
    Since
    Added in version 3.3.
    + +
    +
    + +

    ◆ glfwCreateWindow()

    +
    @@ -468,8 +1502,8 @@ Functions

    The created window, framebuffer and context may differ from what you requested, as not all parameters and hints are hard constraints. This includes the size of the window, especially for full screen windows. To query the actual attributes of the created window, framebuffer and context, see glfwGetWindowAttrib, glfwGetWindowSize and glfwGetFramebufferSize.

    To create a full screen window, you need to specify the monitor the window will cover. If no monitor is specified, the window will be windowed mode. Unless you have a way for the user to choose a specific monitor, it is recommended that you pick the primary monitor. For more information on how to query connected monitors, see Retrieving monitors.

    For full screen windows, the specified size becomes the resolution of the window's desired video mode. As long as a full screen window is not iconified, the supported video mode most closely matching the desired video mode is set for the specified monitor. For more information about full screen windows, including the creation of so called windowed full screen or borderless full screen windows, see "Windowed full screen" windows.

    -

    Once you have created the window, you can switch it between windowed and full screen mode with glfwSetWindowMonitor. If the window has an OpenGL or OpenGL ES context, it will be unaffected.

    -

    By default, newly created windows use the placement recommended by the window system. To create the window at a specific position, make it initially invisible using the GLFW_VISIBLE window hint, set its position and then show it.

    +

    Once you have created the window, you can switch it between windowed and full screen mode with glfwSetWindowMonitor. This will not affect its OpenGL or OpenGL ES context.

    +

    By default, newly created windows use the placement recommended by the window system. To create the window at a specific position, make it initially invisible using the GLFW_VISIBLE window hint, set its position and then show it.

    As long as at least one full screen window is not iconified, the screensaver is prohibited from starting.

    Window systems put limits on window sizes. Very large or very small window dimensions may be overridden by the window system on creation. Check the actual size after creation.

    The swap interval is not set during window creation and the initial value may vary depending on driver settings and defaults.

    @@ -487,52 +1521,42 @@ Functions
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_INVALID_ENUM, GLFW_INVALID_VALUE, GLFW_API_UNAVAILABLE, GLFW_VERSION_UNAVAILABLE, GLFW_FORMAT_UNAVAILABLE and GLFW_PLATFORM_ERROR.
    Remarks
    Windows: Window creation will fail if the Microsoft GDI software OpenGL implementation is the only one available.
    -Windows: If the executable has an icon resource named GLFW_ICON, it will be set as the initial icon for the window. If no such icon is present, the IDI_WINLOGO icon will be used instead. To set a different icon, see glfwSetWindowIcon.
    +Windows: If the executable has an icon resource named GLFW_ICON, it will be set as the initial icon for the window. If no such icon is present, the IDI_APPLICATION icon will be used instead. To set a different icon, see glfwSetWindowIcon.
    Windows: The context to share resources with must not be current on any other thread.
    -OS X: The GLFW window has no icon, as it is not a document window, but the dock icon will be the same as the application bundle's icon. For more information on bundles, see the Bundle Programming Guide in the Mac Developer Library.
    +macOS: The OS only supports forward-compatible core profile contexts for OpenGL versions 3.2 and later. Before creating an OpenGL context of version 3.2 or later you must set the GLFW_OPENGL_FORWARD_COMPAT and GLFW_OPENGL_PROFILE hints accordingly. OpenGL 3.0 and 3.1 contexts are not supported at all on macOS.
    -OS X: The first time a window is created the menu bar is populated with common commands like Hide, Quit and About. The About entry opens a minimal about dialog with information from the application's bundle. The menu bar can be disabled with a compile-time option.
    +macOS: The GLFW window has no icon, as it is not a document window, but the dock icon will be the same as the application bundle's icon. For more information on bundles, see the Bundle Programming Guide in the Mac Developer Library.
    -OS X: On OS X 10.10 and later the window frame will not be rendered at full resolution on Retina displays unless the NSHighResolutionCapable key is enabled in the application bundle's Info.plist. For more information, see High Resolution Guidelines for OS X in the Mac Developer Library. The GLFW test and example programs use a custom Info.plist template for this, which can be found as CMake/MacOSXBundleInfo.plist.in in the source tree.
    +macOS: The first time a window is created the menu bar is created. If GLFW finds a MainMenu.nib it is loaded and assumed to contain a menu bar. Otherwise a minimal menu bar is created manually with common commands like Hide, Quit and About. The About entry opens a minimal about dialog with information from the application's bundle. Menu bar creation can be disabled entirely with the GLFW_COCOA_MENUBAR init hint. +
    +macOS: On OS X 10.10 and later the window frame will not be rendered at full resolution on Retina displays unless the GLFW_COCOA_RETINA_FRAMEBUFFER hint is GLFW_TRUE and the NSHighResolutionCapable key is enabled in the application bundle's Info.plist. For more information, see High Resolution Guidelines for OS X in the Mac Developer Library. The GLFW test and example programs use a custom Info.plist template for this, which can be found as CMake/MacOSXBundleInfo.plist.in in the source tree.
    +
    +macOS: When activating frame autosaving with GLFW_COCOA_FRAME_NAME, the specified window size and position may be overriden by previously saved values.
    X11: Some window managers will not respect the placement of initially hidden windows.
    -X11: Due to the asynchronous nature of X11, it may take a moment for a window to reach its requested state. This means you may not be able to query the final size, position or other attributes directly after window creation.
    -
    Reentrancy
    This function must not be called from a callback.
    +X11: Due to the asynchronous nature of X11, it may take a moment for a window to reach its requested state. This means you may not be able to query the final size, position or other attributes directly after window creation. +
    +X11: The class part of the WM_CLASS window property will by default be set to the window title passed to this function. The instance part will use the contents of the RESOURCE_NAME environment variable, if present and not empty, or fall back to the window title. Set the GLFW_X11_CLASS_NAME and GLFW_X11_INSTANCE_NAME window hints to override this.
    +
    +Wayland: Compositors should implement the xdg-decoration protocol for GLFW to decorate the window properly. If this protocol isn't supported, or if the compositor prefers client-side decorations, a very simple fallback frame will be drawn using the wp_viewporter protocol. A compositor can still emit close, maximize or fullscreen events, using for instance a keybind mechanism. If neither of these protocols is supported, the window won't be decorated.
    +
    +Wayland: A full screen window will not attempt to change the mode, no matter what the requested size or refresh rate.
    +
    +Wayland: Screensaver inhibition requires the idle-inhibit protocol to be implemented in the user's compositor.
    Thread safety
    This function must only be called from the main thread.
    See also
    Window creation
    -glfwDestroyWindow
    +glfwDestroyWindow
    Since
    Added in version 3.0. Replaces glfwOpenWindow.
    - -
    -
    -
    - - - - - - - -
    void glfwDefaultWindowHints (void )
    -
    -

    This function resets all window hints to their default values.

    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Window creation hints
    -
    -glfwWindowHint
    -
    Since
    Added in version 3.0.
    + +

    ◆ glfwDestroyWindow()

    -
    -
    -
    @@ -559,17 +1583,19 @@ Functions
    Thread safety
    This function must only be called from the main thread.
    See also
    Window creation
    -glfwCreateWindow
    +glfwCreateWindow
    Since
    Added in version 3.0. Replaces glfwCloseWindow.
    - + +

    ◆ glfwWindowShouldClose()

    +
    - + @@ -577,23 +1603,489 @@ Functions
    void glfwFocusWindow int glfwWindowShouldClose ( GLFWwindow window)
    -

    This function brings the specified window to front and sets input focus. The window should already be visible and not iconified.

    -

    By default, both windowed and full screen mode windows are focused when initially created. Set the GLFW_FOCUSED to disable this behavior.

    -

    Do not use this function to steal focus from other applications unless you are certain that is what the user wants. Focus stealing can be extremely disruptive.

    +

    This function returns the value of the close flag of the specified window.

    Parameters
    - + +
    [in]windowThe window to give input focus.
    [in]windowThe window to query.
    +
    +
    +
    Returns
    The value of the close flag.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    +
    See also
    Window closing and close flag
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ glfwSetWindowShouldClose()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void glfwSetWindowShouldClose (GLFWwindowwindow,
    int value 
    )
    +
    +

    This function sets the value of the close flag of the specified window. This can be used to override the user's attempt to close the window, or to signal that it should be closed.

    +
    Parameters
    + + + +
    [in]windowThe window whose flag to change.
    [in]valueThe new value.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    +
    See also
    Window closing and close flag
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ glfwSetWindowTitle()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void glfwSetWindowTitle (GLFWwindowwindow,
    const char * title 
    )
    +
    +

    This function sets the window title, encoded as UTF-8, of the specified window.

    +
    Parameters
    + + + +
    [in]windowThe window whose title to change.
    [in]titleThe UTF-8 encoded window title.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Remarks
    macOS: The window title will not be updated until the next time you process events.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Window title
    +
    Since
    Added in version 1.0. GLFW 3: Added window handle parameter.
    + +
    +
    + +

    ◆ glfwSetWindowIcon()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void glfwSetWindowIcon (GLFWwindowwindow,
    int count,
    const GLFWimageimages 
    )
    +
    +

    This function sets the icon of the specified window. If passed an array of candidate images, those of or closest to the sizes desired by the system are selected. If no images are specified, the window reverts to its default icon.

    +

    The pixels are 32-bit, little-endian, non-premultiplied RGBA, i.e. eight bits per channel with the red channel first. They are arranged canonically as packed sequential rows, starting from the top-left corner.

    +

    The desired image sizes varies depending on platform and system settings. The selected images will be rescaled as needed. Good sizes include 16x16, 32x32 and 48x48.

    +
    Parameters
    + + + + +
    [in]windowThe window whose icon to set.
    [in]countThe number of images in the specified array, or zero to revert to the default window icon.
    [in]imagesThe images to create the icon from. This is ignored if count is zero.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Pointer lifetime
    The specified image data is copied before this function returns.
    +
    Remarks
    macOS: The GLFW window has no icon, as it is not a document window, so this function does nothing. The dock icon will be the same as the application bundle's icon. For more information on bundles, see the Bundle Programming Guide in the Mac Developer Library.
    +
    +Wayland: There is no existing protocol to change an icon, the window will thus inherit the one defined in the application's desktop file. This function always emits GLFW_PLATFORM_ERROR.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Window icon
    +
    Since
    Added in version 3.2.
    + +
    +
    + +

    ◆ glfwGetWindowPos()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void glfwGetWindowPos (GLFWwindowwindow,
    int * xpos,
    int * ypos 
    )
    +
    +

    This function retrieves the position, in screen coordinates, of the upper-left corner of the content area of the specified window.

    +

    Any or all of the position arguments may be NULL. If an error occurs, all non-NULL position arguments will be set to zero.

    +
    Parameters
    + + + + +
    [in]windowThe window to query.
    [out]xposWhere to store the x-coordinate of the upper-left corner of the content area, or NULL.
    [out]yposWhere to store the y-coordinate of the upper-left corner of the content area, or NULL.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Remarks
    Wayland: There is no way for an application to retrieve the global position of its windows, this function will always emit GLFW_PLATFORM_ERROR.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Window position
    +
    +glfwSetWindowPos
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ glfwSetWindowPos()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void glfwSetWindowPos (GLFWwindowwindow,
    int xpos,
    int ypos 
    )
    +
    +

    This function sets the position, in screen coordinates, of the upper-left corner of the content area of the specified windowed mode window. If the window is a full screen window, this function does nothing.

    +

    Do not use this function to move an already visible window unless you have very good reasons for doing so, as it will confuse and annoy the user.

    +

    The window manager may put limits on what positions are allowed. GLFW cannot and should not override these limits.

    +
    Parameters
    + + + + +
    [in]windowThe window to query.
    [in]xposThe x-coordinate of the upper-left corner of the content area.
    [in]yposThe y-coordinate of the upper-left corner of the content area.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Remarks
    Wayland: There is no way for an application to set the global position of its windows, this function will always emit GLFW_PLATFORM_ERROR.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Window position
    +
    +glfwGetWindowPos
    +
    Since
    Added in version 1.0. GLFW 3: Added window handle parameter.
    + +
    +
    + +

    ◆ glfwGetWindowSize()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void glfwGetWindowSize (GLFWwindowwindow,
    int * width,
    int * height 
    )
    +
    +

    This function retrieves the size, in screen coordinates, of the content area of the specified window. If you wish to retrieve the size of the framebuffer of the window in pixels, see glfwGetFramebufferSize.

    +

    Any or all of the size arguments may be NULL. If an error occurs, all non-NULL size arguments will be set to zero.

    +
    Parameters
    + + + +
    [in]windowThe window whose size to retrieve.
    [out]widthWhere to store the width, in screen coordinates, of the content area, or NULL.
    [out]heightWhere to store the height, in screen coordinates, of the content area, or NULL.
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Window input focus
    +
    See also
    Window size
    +
    +glfwSetWindowSize
    +
    Since
    Added in version 1.0. GLFW 3: Added window handle parameter.
    + +
    +
    + +

    ◆ glfwSetWindowSizeLimits()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void glfwSetWindowSizeLimits (GLFWwindowwindow,
    int minwidth,
    int minheight,
    int maxwidth,
    int maxheight 
    )
    +
    +

    This function sets the size limits of the content area of the specified window. If the window is full screen, the size limits only take effect once it is made windowed. If the window is not resizable, this function does nothing.

    +

    The size limits are applied immediately to a windowed mode window and may cause it to be resized.

    +

    The maximum dimensions must be greater than or equal to the minimum dimensions and all must be greater than or equal to zero.

    +
    Parameters
    + + + + + + +
    [in]windowThe window to set limits for.
    [in]minwidthThe minimum width, in screen coordinates, of the content area, or GLFW_DONT_CARE.
    [in]minheightThe minimum height, in screen coordinates, of the content area, or GLFW_DONT_CARE.
    [in]maxwidthThe maximum width, in screen coordinates, of the content area, or GLFW_DONT_CARE.
    [in]maxheightThe maximum height, in screen coordinates, of the content area, or GLFW_DONT_CARE.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_INVALID_VALUE and GLFW_PLATFORM_ERROR.
    +
    Remarks
    If you set size limits and an aspect ratio that conflict, the results are undefined.
    +
    +Wayland: The size limits will not be applied until the window is actually resized, either by the user or by the compositor.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Window size limits
    +
    +glfwSetWindowAspectRatio
    Since
    Added in version 3.2.
    - + +

    ◆ glfwSetWindowAspectRatio()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void glfwSetWindowAspectRatio (GLFWwindowwindow,
    int numer,
    int denom 
    )
    +
    +

    This function sets the required aspect ratio of the content area of the specified window. If the window is full screen, the aspect ratio only takes effect once it is made windowed. If the window is not resizable, this function does nothing.

    +

    The aspect ratio is specified as a numerator and a denominator and both values must be greater than zero. For example, the common 16:9 aspect ratio is specified as 16 and 9, respectively.

    +

    If the numerator and denominator is set to GLFW_DONT_CARE then the aspect ratio limit is disabled.

    +

    The aspect ratio is applied immediately to a windowed mode window and may cause it to be resized.

    +
    Parameters
    + + + + +
    [in]windowThe window to set limits for.
    [in]numerThe numerator of the desired aspect ratio, or GLFW_DONT_CARE.
    [in]denomThe denominator of the desired aspect ratio, or GLFW_DONT_CARE.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_INVALID_VALUE and GLFW_PLATFORM_ERROR.
    +
    Remarks
    If you set size limits and an aspect ratio that conflict, the results are undefined.
    +
    +Wayland: The aspect ratio will not be applied until the window is actually resized, either by the user or by the compositor.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Window size limits
    +
    +glfwSetWindowSizeLimits
    +
    Since
    Added in version 3.2.
    + +
    +
    + +

    ◆ glfwSetWindowSize()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void glfwSetWindowSize (GLFWwindowwindow,
    int width,
    int height 
    )
    +
    +

    This function sets the size, in screen coordinates, of the content area of the specified window.

    +

    For full screen windows, this function updates the resolution of its desired video mode and switches to the video mode closest to it, without affecting the window's context. As the context is unaffected, the bit depths of the framebuffer remain unchanged.

    +

    If you wish to update the refresh rate of the desired video mode in addition to its resolution, see glfwSetWindowMonitor.

    +

    The window manager may put limits on what sizes are allowed. GLFW cannot and should not override these limits.

    +
    Parameters
    + + + + +
    [in]windowThe window to resize.
    [in]widthThe desired width, in screen coordinates, of the window content area.
    [in]heightThe desired height, in screen coordinates, of the window content area.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Remarks
    Wayland: A full screen window will not attempt to change the mode, no matter what the requested size.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Window size
    +
    +glfwGetWindowSize
    +
    +glfwSetWindowMonitor
    +
    Since
    Added in version 1.0. GLFW 3: Added window handle parameter.
    + +
    +
    + +

    ◆ glfwGetFramebufferSize()

    +
    @@ -636,54 +2128,14 @@ Functions
    Thread safety
    This function must only be called from the main thread.
    See also
    Framebuffer size
    -glfwSetFramebufferSizeCallback
    +glfwSetFramebufferSizeCallback
    Since
    Added in version 3.0.
    - -
    -
    -
    - - - - - - - - - - - - - - - - - -
    int glfwGetWindowAttrib (GLFWwindowwindow,
    int attrib 
    )
    -
    -

    This function returns the value of an attribute of the specified window or its OpenGL or OpenGL ES context.

    -
    Parameters
    - - - -
    [in]windowThe window to query.
    [in]attribThe window attribute whose value to return.
    -
    -
    -
    Returns
    The value of the attribute, or zero if an error occurred.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_INVALID_ENUM and GLFW_PLATFORM_ERROR.
    -
    Remarks
    Framebuffer related hints are not window attributes. See Framebuffer related attributes for more information.
    -
    -Zero is a valid value for many window and context related attributes so you cannot use a return value of zero as an indication of errors. However, this function should not fail as long as it is passed valid arguments and the library has been initialized.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Window attributes
    -
    Since
    Added in version 3.0. Replaces glfwGetWindowParam and glfwGetGLVersion.
    + +

    ◆ glfwGetWindowFrameSize()

    -
    -
    -
    @@ -744,42 +2196,14 @@ Zero is a valid value for many window and context related attributes so you cann - -
    -
    -
    - - - - - - - -
    GLFWmonitor* glfwGetWindowMonitor (GLFWwindowwindow)
    -
    -

    This function returns the handle of the monitor that the specified window is in full screen on.

    -
    Parameters
    - - -
    [in]windowThe window to query.
    -
    -
    -
    Returns
    The monitor, or NULL if the window is in windowed mode or an error occurred.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Window monitor
    -
    -glfwSetWindowMonitor
    -
    Since
    Added in version 3.0.
    + +

    ◆ glfwGetWindowContentScale()

    -
    -
    -
    - + @@ -787,14 +2211,14 @@ Zero is a valid value for many window and context related attributes so you cann - - + + - - + + @@ -803,31 +2227,69 @@ Zero is a valid value for many window and context related attributes so you cann
    void glfwGetWindowPos void glfwGetWindowContentScale ( GLFWwindow window,
    int * xpos, float * xscale,
    int * ypos float * yscale 
    -

    This function retrieves the position, in screen coordinates, of the upper-left corner of the client area of the specified window.

    -

    Any or all of the position arguments may be NULL. If an error occurs, all non-NULL position arguments will be set to zero.

    +

    This function retrieves the content scale for the specified window. The content scale is the ratio between the current DPI and the platform's default DPI. This is especially important for text and any UI elements. If the pixel dimensions of your UI scaled by this look appropriate on your machine then it should appear at a reasonable size on other machines regardless of their DPI and scaling settings. This relies on the system DPI and scaling settings being somewhat correct.

    +

    On systems where each monitors can have its own content scale, the window content scale will depend on which monitor the system considers the window to be on.

    Parameters
    - - + +
    [in]windowThe window to query.
    [out]xposWhere to store the x-coordinate of the upper-left corner of the client area, or NULL.
    [out]yposWhere to store the y-coordinate of the upper-left corner of the client area, or NULL.
    [out]xscaleWhere to store the x-axis content scale, or NULL.
    [out]yscaleWhere to store the y-axis content scale, or NULL.
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Window position
    +
    See also
    Window content scale
    -glfwSetWindowPos
    -
    Since
    Added in version 3.0.
    +glfwSetWindowContentScaleCallback +
    +glfwGetMonitorContentScale
    +
    Since
    Added in version 3.3.
    - + +

    ◆ glfwGetWindowOpacity()

    +
    - + + + + + + +
    void glfwGetWindowSize float glfwGetWindowOpacity (GLFWwindowwindow)
    +
    +

    This function returns the opacity of the window, including any decorations.

    +

    The opacity (or alpha) value is a positive finite number between zero and one, where zero is fully transparent and one is fully opaque. If the system does not support whole window transparency, this function always returns one.

    +

    The initial opacity value for newly created windows is one.

    +
    Parameters
    + + +
    [in]windowThe window to query.
    +
    +
    +
    Returns
    The opacity value of the specified window.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Window transparency
    +
    +glfwSetWindowOpacity
    +
    Since
    Added in version 3.3.
    + +
    +
    + +

    ◆ glfwSetWindowOpacity()

    + +
    +
    + + + @@ -835,14 +2297,8 @@ Zero is a valid value for many window and context related attributes so you cann - - - - - - - - + + @@ -851,85 +2307,29 @@ Zero is a valid value for many window and context related attributes so you cann
    void glfwSetWindowOpacity ( GLFWwindow window,
    int * width,
    int * height float opacity 
    -

    This function retrieves the size, in screen coordinates, of the client area of the specified window. If you wish to retrieve the size of the framebuffer of the window in pixels, see glfwGetFramebufferSize.

    -

    Any or all of the size arguments may be NULL. If an error occurs, all non-NULL size arguments will be set to zero.

    +

    This function sets the opacity of the window, including any decorations.

    +

    The opacity (or alpha) value is a positive finite number between zero and one, where zero is fully transparent and one is fully opaque.

    +

    The initial opacity value for newly created windows is one.

    +

    A window created with framebuffer transparency may not use whole window transparency. The results of doing this are undefined.

    Parameters
    - - - + +
    [in]windowThe window whose size to retrieve.
    [out]widthWhere to store the width, in screen coordinates, of the client area, or NULL.
    [out]heightWhere to store the height, in screen coordinates, of the client area, or NULL.
    [in]windowThe window to set the opacity for.
    [in]opacityThe desired opacity of the specified window.
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Window size
    +
    See also
    Window transparency
    -glfwSetWindowSize
    -
    Since
    Added in version 1.0.
    -
    GLFW 3: Added window handle parameter.
    +glfwGetWindowOpacity
    +
    Since
    Added in version 3.3.
    - -
    -
    - - - - - - - - -
    void* glfwGetWindowUserPointer (GLFWwindowwindow)
    -
    -

    This function returns the current value of the user-defined pointer of the specified window. The initial value is NULL.

    -
    Parameters
    - - -
    [in]windowThe window whose pointer to return.
    -
    -
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    -
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    -
    See also
    User pointer
    -
    -glfwSetWindowUserPointer
    -
    Since
    Added in version 3.0.
    + +

    ◆ glfwIconifyWindow()

    -
    -
    - -
    -
    - - - - - - - - -
    void glfwHideWindow (GLFWwindowwindow)
    -
    -

    This function hides the specified window if it was previously visible. If the window is already hidden or is in full screen mode, this function does nothing.

    -
    Parameters
    - - -
    [in]windowThe window to hide.
    -
    -
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Window visibility
    -
    -glfwShowWindow
    -
    Since
    Added in version 3.0.
    - -
    -
    -
    @@ -951,105 +2351,20 @@ Zero is a valid value for many window and context related attributes so you cann
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Remarks
    Wayland: There is no concept of iconification in wl_shell, this function will emit GLFW_PLATFORM_ERROR when using this deprecated protocol.
    Thread safety
    This function must only be called from the main thread.
    See also
    Window iconification
    -glfwRestoreWindow
    +glfwRestoreWindow
    -glfwMaximizeWindow
    -
    Since
    Added in version 2.1.
    -
    GLFW 3: Added window handle parameter.
    +glfwMaximizeWindow +
    Since
    Added in version 2.1. GLFW 3: Added window handle parameter.
    - -
    -
    -
    - - - - - - - -
    void glfwMaximizeWindow (GLFWwindowwindow)
    -
    -

    This function maximizes the specified window if it was previously not maximized. If the window is already maximized, this function does nothing.

    -

    If the specified window is a full screen window, this function does nothing.

    -
    Parameters
    - - -
    [in]windowThe window to maximize.
    -
    -
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    -
    Thread Safety
    This function may only be called from the main thread.
    -
    See also
    Window iconification
    -
    -glfwIconifyWindow
    -
    -glfwRestoreWindow
    -
    Since
    Added in GLFW 3.2.
    + +

    ◆ glfwRestoreWindow()

    -
    -
    - -
    -
    - - - - - - - - -
    void glfwPollEvents (void )
    -
    -

    This function processes only those events that are already in the event queue and then returns immediately. Processing events will cause the window and input callbacks associated with those events to be called.

    -

    On some platforms, a window move, resize or menu operation will cause event processing to block. This is due to how event processing is designed on those platforms. You can use the window refresh callback to redraw the contents of your window when necessary during such operations.

    -

    On some platforms, certain events are sent directly to the application without going through the event queue, causing callbacks to be called outside of a call to one of the event processing functions.

    -

    Event processing is not required for joystick input to work.

    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    -
    Reentrancy
    This function must not be called from a callback.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Event processing
    -
    -glfwWaitEvents
    -
    -glfwWaitEventsTimeout
    -
    Since
    Added in version 1.0.
    - -
    -
    - -
    -
    - - - - - - - - -
    void glfwPostEmptyEvent (void )
    -
    -

    This function posts an empty event from the current thread to the event queue, causing glfwWaitEvents or glfwWaitEventsTimeout to return.

    -

    If no windows exist, this function returns immediately. For synchronization of threads in applications that do not create windows, use your threading library of choice.

    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    -
    Thread safety
    This function may be called from any thread.
    -
    See also
    Event processing
    -
    -glfwWaitEvents
    -
    -glfwWaitEventsTimeout
    -
    Since
    Added in version 3.1.
    - -
    -
    -
    @@ -1074,275 +2389,212 @@ Zero is a valid value for many window and context related attributes so you cann
    Thread safety
    This function must only be called from the main thread.
    See also
    Window iconification
    -glfwIconifyWindow
    +glfwIconifyWindow
    -glfwMaximizeWindow
    -
    Since
    Added in version 2.1.
    -
    GLFW 3: Added window handle parameter.
    +glfwMaximizeWindow +
    Since
    Added in version 2.1. GLFW 3: Added window handle parameter.
    - + +

    ◆ glfwMaximizeWindow()

    +
    - + - - - - + - - - - - - -
    GLFWframebuffersizefun glfwSetFramebufferSizeCallback void glfwMaximizeWindow ( GLFWwindowwindow,
    window) GLFWframebuffersizefun cbfun 
    )
    -

    This function sets the framebuffer resize callback of the specified window, which is called when the framebuffer of the specified window is resized.

    +

    This function maximizes the specified window if it was previously not maximized. If the window is already maximized, this function does nothing.

    +

    If the specified window is a full screen window, this function does nothing.

    Parameters
    - - -
    [in]windowThe window whose callback to set.
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    -
    -
    -
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Framebuffer size
    -
    Since
    Added in version 3.0.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void glfwSetWindowAspectRatio (GLFWwindowwindow,
    int numer,
    int denom 
    )
    -
    -

    This function sets the required aspect ratio of the client area of the specified window. If the window is full screen, the aspect ratio only takes effect once it is made windowed. If the window is not resizable, this function does nothing.

    -

    The aspect ratio is specified as a numerator and a denominator and both values must be greater than zero. For example, the common 16:9 aspect ratio is specified as 16 and 9, respectively.

    -

    If the numerator and denominator is set to GLFW_DONT_CARE then the aspect ratio limit is disabled.

    -

    The aspect ratio is applied immediately to a windowed mode window and may cause it to be resized.

    -
    Parameters
    - - - - -
    [in]windowThe window to set limits for.
    [in]numerThe numerator of the desired aspect ratio, or GLFW_DONT_CARE.
    [in]denomThe denominator of the desired aspect ratio, or GLFW_DONT_CARE.
    -
    -
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_INVALID_VALUE and GLFW_PLATFORM_ERROR.
    -
    Remarks
    If you set size limits and an aspect ratio that conflict, the results are undefined.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Window size limits
    -
    -glfwSetWindowSizeLimits
    -
    Since
    Added in version 3.2.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLFWwindowclosefun glfwSetWindowCloseCallback (GLFWwindowwindow,
    GLFWwindowclosefun cbfun 
    )
    -
    -

    This function sets the close callback of the specified window, which is called when the user attempts to close the window, for example by clicking the close widget in the title bar.

    -

    The close flag is set before this callback is called, but you can modify it at any time with glfwSetWindowShouldClose.

    -

    The close callback is not triggered by glfwDestroyWindow.

    -
    Parameters
    - - - -
    [in]windowThe window whose callback to set.
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    -
    -
    -
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    -
    Remarks
    OS X: Selecting Quit from the application menu will trigger the close callback for all windows.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Window closing and close flag
    -
    Since
    Added in version 2.5.
    -
    GLFW 3: Added window handle parameter and return value.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLFWwindowfocusfun glfwSetWindowFocusCallback (GLFWwindowwindow,
    GLFWwindowfocusfun cbfun 
    )
    -
    -

    This function sets the focus callback of the specified window, which is called when the window gains or loses input focus.

    -

    After the focus callback is called for a window that lost input focus, synthetic key and mouse button release events will be generated for all such that had been pressed. For more information, see glfwSetKeyCallback and glfwSetMouseButtonCallback.

    -
    Parameters
    - - - -
    [in]windowThe window whose callback to set.
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    -
    -
    -
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Window input focus
    -
    Since
    Added in version 3.0.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void glfwSetWindowIcon (GLFWwindowwindow,
    int count,
    const GLFWimageimages 
    )
    -
    -

    This function sets the icon of the specified window. If passed an array of candidate images, those of or closest to the sizes desired by the system are selected. If no images are specified, the window reverts to its default icon.

    -

    The desired image sizes varies depending on platform and system settings. The selected images will be rescaled as needed. Good sizes include 16x16, 32x32 and 48x48.

    -
    Parameters
    - - - - +
    [in]windowThe window whose icon to set.
    [in]countThe number of images in the specified array, or zero to revert to the default window icon.
    [in]imagesThe images to create the icon from. This is ignored if count is zero.
    [in]windowThe window to maximize.
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    -
    Pointer lifetime
    The specified image data is copied before this function returns.
    -
    Remarks
    OS X: The GLFW window has no icon, as it is not a document window, so this function does nothing. The dock icon will be the same as the application bundle's icon. For more information on bundles, see the Bundle Programming Guide in the Mac Developer Library.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Window icon
    -
    Since
    Added in version 3.2.
    +
    Thread Safety
    This function may only be called from the main thread.
    +
    See also
    Window iconification
    +
    +glfwIconifyWindow
    +
    +glfwRestoreWindow
    +
    Since
    Added in GLFW 3.2.
    - + +

    ◆ glfwShowWindow()

    +
    - + - - - - + - - - - - - -
    GLFWwindowiconifyfun glfwSetWindowIconifyCallback void glfwShowWindow ( GLFWwindowwindow,
    window) GLFWwindowiconifyfun cbfun 
    )
    -

    This function sets the iconification callback of the specified window, which is called when the window is iconified or restored.

    +

    This function makes the specified window visible if it was previously hidden. If the window is already visible or is in full screen mode, this function does nothing.

    +

    By default, windowed mode windows are focused when shown Set the GLFW_FOCUS_ON_SHOW window hint to change this behavior for all newly created windows, or change the behavior for an existing window with glfwSetWindowAttrib.

    Parameters
    - - +
    [in]windowThe window whose callback to set.
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    [in]windowThe window to make visible.
    -
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Window iconification
    +
    See also
    Window visibility
    +
    +glfwHideWindow
    Since
    Added in version 3.0.
    - + +

    ◆ glfwHideWindow()

    + +
    +
    + + + + + + + + +
    void glfwHideWindow (GLFWwindowwindow)
    +
    +

    This function hides the specified window if it was previously visible. If the window is already hidden or is in full screen mode, this function does nothing.

    +
    Parameters
    + + +
    [in]windowThe window to hide.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Window visibility
    +
    +glfwShowWindow
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ glfwFocusWindow()

    + +
    +
    + + + + + + + + +
    void glfwFocusWindow (GLFWwindowwindow)
    +
    +

    This function brings the specified window to front and sets input focus. The window should already be visible and not iconified.

    +

    By default, both windowed and full screen mode windows are focused when initially created. Set the GLFW_FOCUSED to disable this behavior.

    +

    Also by default, windowed mode windows are focused when shown with glfwShowWindow. Set the GLFW_FOCUS_ON_SHOW to disable this behavior.

    +

    Do not use this function to steal focus from other applications unless you are certain that is what the user wants. Focus stealing can be extremely disruptive.

    +

    For a less disruptive way of getting the user's attention, see attention requests.

    +
    Parameters
    + + +
    [in]windowThe window to give input focus.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Remarks
    Wayland: It is not possible for an application to bring its windows to front, this function will always emit GLFW_PLATFORM_ERROR.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Window input focus
    +
    +Window attention request
    +
    Since
    Added in version 3.2.
    + +
    +
    + +

    ◆ glfwRequestWindowAttention()

    + +
    +
    + + + + + + + + +
    void glfwRequestWindowAttention (GLFWwindowwindow)
    +
    +

    This function requests user attention to the specified window. On platforms where this is not supported, attention is requested to the application as a whole.

    +

    Once the user has given attention, usually by focusing the window or application, the system will end the request automatically.

    +
    Parameters
    + + +
    [in]windowThe window to request attention to.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Remarks
    macOS: Attention is requested to the application as a whole, not the specific window.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Window attention request
    +
    Since
    Added in version 3.3.
    + +
    +
    + +

    ◆ glfwGetWindowMonitor()

    + +
    +
    + + + + + + + + +
    GLFWmonitor* glfwGetWindowMonitor (GLFWwindowwindow)
    +
    +

    This function returns the handle of the monitor that the specified window is in full screen on.

    +
    Parameters
    + + +
    [in]windowThe window to query.
    +
    +
    +
    Returns
    The monitor, or NULL if the window is in windowed mode or an error occurred.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Window monitor
    +
    +glfwSetWindowMonitor
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ glfwSetWindowMonitor()

    +
    @@ -1397,40 +2649,47 @@ Zero is a valid value for many window and context related attributes so you cann

    This function sets the monitor that the window uses for full screen mode or, if the monitor is NULL, makes it windowed mode.

    When setting a monitor, this function updates the width, height and refresh rate of the desired video mode and switches to the video mode closest to it. The window position is ignored when setting a monitor.

    -

    When the monitor is NULL, the position, width and height are used to place the window client area. The refresh rate is ignored when no monitor is specified.

    +

    When the monitor is NULL, the position, width and height are used to place the window content area. The refresh rate is ignored when no monitor is specified.

    If you only wish to update the resolution of a full screen window or the size of a windowed mode window, see glfwSetWindowSize.

    -

    When a window transitions from full screen to windowed mode, this function restores any previous window settings such as whether it is decorated, floating, resizable, has size or aspect ratio limits, etc..

    +

    When a window transitions from full screen to windowed mode, this function restores any previous window settings such as whether it is decorated, floating, resizable, has size or aspect ratio limits, etc.

    Parameters
    - - - - + + + +
    [in]windowThe window whose monitor, size or video mode to set.
    [in]monitorThe desired monitor, or NULL to set windowed mode.
    [in]xposThe desired x-coordinate of the upper-left corner of the client area.
    [in]yposThe desired y-coordinate of the upper-left corner of the client area.
    [in]widthThe desired with, in screen coordinates, of the client area or video mode.
    [in]heightThe desired height, in screen coordinates, of the client area or video mode.
    [in]xposThe desired x-coordinate of the upper-left corner of the content area.
    [in]yposThe desired y-coordinate of the upper-left corner of the content area.
    [in]widthThe desired with, in screen coordinates, of the content area or video mode.
    [in]heightThe desired height, in screen coordinates, of the content area or video mode.
    [in]refreshRateThe desired refresh rate, in Hz, of the video mode, or GLFW_DONT_CARE.
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Remarks
    The OpenGL or OpenGL ES context will not be destroyed or otherwise affected by any resizing or mode switching, although you may need to update your viewport if the framebuffer size has changed.
    +
    +Wayland: The desired window position is ignored, as there is no way for an application to set this property.
    +
    +Wayland: Setting the window to full screen will not attempt to change the mode, no matter what the requested size or refresh rate.
    Thread safety
    This function must only be called from the main thread.
    See also
    Window monitor
    Full screen windows
    -glfwGetWindowMonitor
    +glfwGetWindowMonitor
    -glfwSetWindowSize
    +glfwSetWindowSize
    Since
    Added in version 3.2.
    - + +

    ◆ glfwGetWindowAttrib()

    +
    - + @@ -1439,13 +2698,7 @@ Zero is a valid value for many window and context related attributes so you cann - - - - - - - + @@ -1454,33 +2707,35 @@ Zero is a valid value for many window and context related attributes so you cann
    void glfwSetWindowPos int glfwGetWindowAttrib ( GLFWwindow window, int xpos,
    int ypos attrib 
    -

    This function sets the position, in screen coordinates, of the upper-left corner of the client area of the specified windowed mode window. If the window is a full screen window, this function does nothing.

    -

    Do not use this function to move an already visible window unless you have very good reasons for doing so, as it will confuse and annoy the user.

    -

    The window manager may put limits on what positions are allowed. GLFW cannot and should not override these limits.

    +

    This function returns the value of an attribute of the specified window or its OpenGL or OpenGL ES context.

    Parameters
    - - +
    [in]windowThe window to query.
    [in]xposThe x-coordinate of the upper-left corner of the client area.
    [in]yposThe y-coordinate of the upper-left corner of the client area.
    [in]attribThe window attribute whose value to return.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Window position
    +
    Returns
    The value of the attribute, or zero if an error occurred.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_INVALID_ENUM and GLFW_PLATFORM_ERROR.
    +
    Remarks
    Framebuffer related hints are not window attributes. See Framebuffer related attributes for more information.
    -glfwGetWindowPos
    -
    Since
    Added in version 1.0.
    -
    GLFW 3: Added window handle parameter.
    +Zero is a valid value for many window and context related attributes so you cannot use a return value of zero as an indication of errors. However, this function should not fail as long as it is passed valid arguments and the library has been initialized.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Window attributes
    +
    +glfwSetWindowAttrib
    +
    Since
    Added in version 3.0. Replaces glfwGetWindowParam and glfwGetGLVersion.
    - + +

    ◆ glfwSetWindowAttrib()

    +
    - + @@ -1488,82 +2743,8 @@ Zero is a valid value for many window and context related attributes so you cann - - - - - - - - -
    GLFWwindowposfun glfwSetWindowPosCallback void glfwSetWindowAttrib ( GLFWwindow window,
    GLFWwindowposfun cbfun 
    )
    -
    -

    This function sets the position callback of the specified window, which is called when the window is moved. The callback is provided with the screen position of the upper-left corner of the client area of the window.

    -
    Parameters
    - - - -
    [in]windowThe window whose callback to set.
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    -
    -
    -
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Window position
    -
    Since
    Added in version 3.0.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLFWwindowrefreshfun glfwSetWindowRefreshCallback (GLFWwindowwindow,
    GLFWwindowrefreshfun cbfun 
    )
    -
    -

    This function sets the refresh callback of the specified window, which is called when the client area of the window needs to be redrawn, for example if the window has been exposed after having been covered by another window.

    -

    On compositing window systems such as Aero, Compiz or Aqua, where the window contents are saved off-screen, this callback may be called only very infrequently or never at all.

    -
    Parameters
    - - - -
    [in]windowThe window whose callback to set.
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    -
    -
    -
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Window damage and refresh
    -
    Since
    Added in version 2.5.
    -
    GLFW 3: Added window handle parameter and return value.
    - -
    -
    - -
    -
    - - - - - - + + @@ -1578,219 +2759,31 @@ Zero is a valid value for many window and context related attributes so you cann
    void glfwSetWindowShouldClose (GLFWwindowwindow, int attrib,
    -

    This function sets the value of the close flag of the specified window. This can be used to override the user's attempt to close the window, or to signal that it should be closed.

    +

    This function sets the value of an attribute of the specified window.

    +

    The supported attributes are GLFW_DECORATED, GLFW_RESIZABLE, GLFW_FLOATING, GLFW_AUTO_ICONIFY and GLFW_FOCUS_ON_SHOW.

    +

    Some of these attributes are ignored for full screen windows. The new value will take effect if the window is later made windowed.

    +

    Some of these attributes are ignored for windowed mode windows. The new value will take effect if the window is later made full screen.

    Parameters
    - - + + +
    [in]windowThe window whose flag to change.
    [in]valueThe new value.
    [in]windowThe window to set the attribute for.
    [in]attribA supported window attribute.
    [in]valueGLFW_TRUE or GLFW_FALSE.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    -
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    -
    See also
    Window closing and close flag
    -
    Since
    Added in version 3.0.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    void glfwSetWindowSize (GLFWwindowwindow,
    int width,
    int height 
    )
    -
    -

    This function sets the size, in screen coordinates, of the client area of the specified window.

    -

    For full screen windows, this function updates the resolution of its desired video mode and switches to the video mode closest to it, without affecting the window's context. As the context is unaffected, the bit depths of the framebuffer remain unchanged.

    -

    If you wish to update the refresh rate of the desired video mode in addition to its resolution, see glfwSetWindowMonitor.

    -

    The window manager may put limits on what sizes are allowed. GLFW cannot and should not override these limits.

    -
    Parameters
    - - - - -
    [in]windowThe window to resize.
    [in]widthThe desired width, in screen coordinates, of the window client area.
    [in]heightThe desired height, in screen coordinates, of the window client area.
    -
    -
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_INVALID_ENUM, GLFW_INVALID_VALUE and GLFW_PLATFORM_ERROR.
    +
    Remarks
    Calling glfwGetWindowAttrib will always return the latest value, even if that value is ignored by the current mode of the window.
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Window size
    +
    See also
    Window attributes
    -glfwGetWindowSize
    -
    -glfwSetWindowMonitor
    -
    Since
    Added in version 1.0.
    -
    GLFW 3: Added window handle parameter.
    +glfwGetWindowAttrib
    +
    Since
    Added in version 3.3.
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    GLFWwindowsizefun glfwSetWindowSizeCallback (GLFWwindowwindow,
    GLFWwindowsizefun cbfun 
    )
    -
    -

    This function sets the size callback of the specified window, which is called when the window is resized. The callback is provided with the size, in screen coordinates, of the client area of the window.

    -
    Parameters
    - - - -
    [in]windowThe window whose callback to set.
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    -
    -
    -
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Window size
    -
    Since
    Added in version 1.0.
    -
    GLFW 3: Added window handle parameter and return value.
    + +

    ◆ glfwSetWindowUserPointer()

    -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    void glfwSetWindowSizeLimits (GLFWwindowwindow,
    int minwidth,
    int minheight,
    int maxwidth,
    int maxheight 
    )
    -
    -

    This function sets the size limits of the client area of the specified window. If the window is full screen, the size limits only take effect once it is made windowed. If the window is not resizable, this function does nothing.

    -

    The size limits are applied immediately to a windowed mode window and may cause it to be resized.

    -

    The maximum dimensions must be greater than or equal to the minimum dimensions and all must be greater than or equal to zero.

    -
    Parameters
    - - - - - - -
    [in]windowThe window to set limits for.
    [in]minwidthThe minimum width, in screen coordinates, of the client area, or GLFW_DONT_CARE.
    [in]minheightThe minimum height, in screen coordinates, of the client area, or GLFW_DONT_CARE.
    [in]maxwidthThe maximum width, in screen coordinates, of the client area, or GLFW_DONT_CARE.
    [in]maxheightThe maximum height, in screen coordinates, of the client area, or GLFW_DONT_CARE.
    -
    -
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_INVALID_VALUE and GLFW_PLATFORM_ERROR.
    -
    Remarks
    If you set size limits and an aspect ratio that conflict, the results are undefined.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Window size limits
    -
    -glfwSetWindowAspectRatio
    -
    Since
    Added in version 3.2.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void glfwSetWindowTitle (GLFWwindowwindow,
    const char * title 
    )
    -
    -

    This function sets the window title, encoded as UTF-8, of the specified window.

    -
    Parameters
    - - - -
    [in]windowThe window whose title to change.
    [in]titleThe UTF-8 encoded window title.
    -
    -
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    -
    Remarks
    OS X: The window title will not be updated until the next time you process events.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Window title
    -
    Since
    Added in version 1.0.
    -
    GLFW 3: Added window handle parameter.
    - -
    -
    -
    @@ -1825,17 +2818,19 @@ Zero is a valid value for many window and context related attributes so you cann
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    See also
    User pointer
    -glfwGetWindowUserPointer
    +glfwGetWindowUserPointer
    Since
    Added in version 3.0.
    - + +

    ◆ glfwGetWindowUserPointer()

    +
    - + @@ -1843,23 +2838,532 @@ Zero is a valid value for many window and context related attributes so you cann
    void glfwShowWindow void* glfwGetWindowUserPointer ( GLFWwindow window)
    -

    This function makes the specified window visible if it was previously hidden. If the window is already visible or is in full screen mode, this function does nothing.

    +

    This function returns the current value of the user-defined pointer of the specified window. The initial value is NULL.

    Parameters
    - +
    [in]windowThe window to make visible.
    [in]windowThe window whose pointer to return.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Window visibility
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    +
    See also
    User pointer
    -glfwHideWindow
    +glfwSetWindowUserPointer
    Since
    Added in version 3.0.
    - + +

    ◆ glfwSetWindowPosCallback()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLFWwindowposfun glfwSetWindowPosCallback (GLFWwindowwindow,
    GLFWwindowposfun cbfun 
    )
    +
    +

    This function sets the position callback of the specified window, which is called when the window is moved. The callback is provided with the position, in screen coordinates, of the upper-left corner of the content area of the window.

    +
    Parameters
    + + + +
    [in]windowThe window whose callback to set.
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    +
    +
    +
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Remarks
    Wayland: This callback will never be called, as there is no way for an application to know its global position.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Window position
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ glfwSetWindowSizeCallback()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLFWwindowsizefun glfwSetWindowSizeCallback (GLFWwindowwindow,
    GLFWwindowsizefun cbfun 
    )
    +
    +

    This function sets the size callback of the specified window, which is called when the window is resized. The callback is provided with the size, in screen coordinates, of the content area of the window.

    +
    Parameters
    + + + +
    [in]windowThe window whose callback to set.
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    +
    +
    +
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Window size
    +
    Since
    Added in version 1.0. GLFW 3: Added window handle parameter and return value.
    + +
    +
    + +

    ◆ glfwSetWindowCloseCallback()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLFWwindowclosefun glfwSetWindowCloseCallback (GLFWwindowwindow,
    GLFWwindowclosefun cbfun 
    )
    +
    +

    This function sets the close callback of the specified window, which is called when the user attempts to close the window, for example by clicking the close widget in the title bar.

    +

    The close flag is set before this callback is called, but you can modify it at any time with glfwSetWindowShouldClose.

    +

    The close callback is not triggered by glfwDestroyWindow.

    +
    Parameters
    + + + +
    [in]windowThe window whose callback to set.
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    +
    +
    +
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Remarks
    macOS: Selecting Quit from the application menu will trigger the close callback for all windows.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Window closing and close flag
    +
    Since
    Added in version 2.5. GLFW 3: Added window handle parameter and return value.
    + +
    +
    + +

    ◆ glfwSetWindowRefreshCallback()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLFWwindowrefreshfun glfwSetWindowRefreshCallback (GLFWwindowwindow,
    GLFWwindowrefreshfun cbfun 
    )
    +
    +

    This function sets the refresh callback of the specified window, which is called when the content area of the window needs to be redrawn, for example if the window has been exposed after having been covered by another window.

    +

    On compositing window systems such as Aero, Compiz, Aqua or Wayland, where the window contents are saved off-screen, this callback may be called only very infrequently or never at all.

    +
    Parameters
    + + + +
    [in]windowThe window whose callback to set.
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    +
    +
    +
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Window damage and refresh
    +
    Since
    Added in version 2.5. GLFW 3: Added window handle parameter and return value.
    + +
    +
    + +

    ◆ glfwSetWindowFocusCallback()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLFWwindowfocusfun glfwSetWindowFocusCallback (GLFWwindowwindow,
    GLFWwindowfocusfun cbfun 
    )
    +
    +

    This function sets the focus callback of the specified window, which is called when the window gains or loses input focus.

    +

    After the focus callback is called for a window that lost input focus, synthetic key and mouse button release events will be generated for all such that had been pressed. For more information, see glfwSetKeyCallback and glfwSetMouseButtonCallback.

    +
    Parameters
    + + + +
    [in]windowThe window whose callback to set.
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    +
    +
    +
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Window input focus
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ glfwSetWindowIconifyCallback()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLFWwindowiconifyfun glfwSetWindowIconifyCallback (GLFWwindowwindow,
    GLFWwindowiconifyfun cbfun 
    )
    +
    +

    This function sets the iconification callback of the specified window, which is called when the window is iconified or restored.

    +
    Parameters
    + + + +
    [in]windowThe window whose callback to set.
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    +
    +
    +
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Remarks
    Wayland: The wl_shell protocol has no concept of iconification, this callback will never be called when using this deprecated protocol.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Window iconification
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ glfwSetWindowMaximizeCallback()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLFWwindowmaximizefun glfwSetWindowMaximizeCallback (GLFWwindowwindow,
    GLFWwindowmaximizefun cbfun 
    )
    +
    +

    This function sets the maximization callback of the specified window, which is called when the window is maximized or restored.

    +
    Parameters
    + + + +
    [in]windowThe window whose callback to set.
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    +
    +
    +
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Window maximization
    +
    Since
    Added in version 3.3.
    + +
    +
    + +

    ◆ glfwSetFramebufferSizeCallback()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLFWframebuffersizefun glfwSetFramebufferSizeCallback (GLFWwindowwindow,
    GLFWframebuffersizefun cbfun 
    )
    +
    +

    This function sets the framebuffer resize callback of the specified window, which is called when the framebuffer of the specified window is resized.

    +
    Parameters
    + + + +
    [in]windowThe window whose callback to set.
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    +
    +
    +
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Framebuffer size
    +
    Since
    Added in version 3.0.
    + +
    +
    + +

    ◆ glfwSetWindowContentScaleCallback()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    GLFWwindowcontentscalefun glfwSetWindowContentScaleCallback (GLFWwindowwindow,
    GLFWwindowcontentscalefun cbfun 
    )
    +
    +

    This function sets the window content scale callback of the specified window, which is called when the content scale of the specified window changes.

    +
    Parameters
    + + + +
    [in]windowThe window whose callback to set.
    [in]cbfunThe new callback, or NULL to remove the currently set callback.
    +
    +
    +
    Returns
    The previously set callback, or NULL if no callback was set or the library had not been initialized.
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Window content scale
    +
    +glfwGetWindowContentScale
    +
    Since
    Added in version 3.3.
    + +
    +
    + +

    ◆ glfwPollEvents()

    + +
    +
    + + + + + + + + +
    void glfwPollEvents (void )
    +
    +

    This function processes only those events that are already in the event queue and then returns immediately. Processing events will cause the window and input callbacks associated with those events to be called.

    +

    On some platforms, a window move, resize or menu operation will cause event processing to block. This is due to how event processing is designed on those platforms. You can use the window refresh callback to redraw the contents of your window when necessary during such operations.

    +

    Do not assume that callbacks you set will only be called in response to event processing functions like this one. While it is necessary to poll for events, window systems that require GLFW to register callbacks of its own can pass events to GLFW in response to many window system function calls. GLFW will pass those events on to the application callbacks before returning.

    +

    Event processing is not required for joystick input to work.

    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Reentrancy
    This function must not be called from a callback.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Event processing
    +
    +glfwWaitEvents
    +
    +glfwWaitEventsTimeout
    +
    Since
    Added in version 1.0.
    + +
    +
    + +

    ◆ glfwWaitEvents()

    + +
    +
    + + + + + + + + +
    void glfwWaitEvents (void )
    +
    +

    This function puts the calling thread to sleep until at least one event is available in the event queue. Once one or more events are available, it behaves exactly like glfwPollEvents, i.e. the events in the queue are processed and the function then returns immediately. Processing events will cause the window and input callbacks associated with those events to be called.

    +

    Since not all events are associated with callbacks, this function may return without a callback having been called even if you are monitoring all callbacks.

    +

    On some platforms, a window move, resize or menu operation will cause event processing to block. This is due to how event processing is designed on those platforms. You can use the window refresh callback to redraw the contents of your window when necessary during such operations.

    +

    Do not assume that callbacks you set will only be called in response to event processing functions like this one. While it is necessary to poll for events, window systems that require GLFW to register callbacks of its own can pass events to GLFW in response to many window system function calls. GLFW will pass those events on to the application callbacks before returning.

    +

    Event processing is not required for joystick input to work.

    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Reentrancy
    This function must not be called from a callback.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Event processing
    +
    +glfwPollEvents
    +
    +glfwWaitEventsTimeout
    +
    Since
    Added in version 2.5.
    + +
    +
    + +

    ◆ glfwWaitEventsTimeout()

    + +
    +
    + + + + + + + + +
    void glfwWaitEventsTimeout (double timeout)
    +
    +

    This function puts the calling thread to sleep until at least one event is available in the event queue, or until the specified timeout is reached. If one or more events are available, it behaves exactly like glfwPollEvents, i.e. the events in the queue are processed and the function then returns immediately. Processing events will cause the window and input callbacks associated with those events to be called.

    +

    The timeout value must be a positive finite number.

    +

    Since not all events are associated with callbacks, this function may return without a callback having been called even if you are monitoring all callbacks.

    +

    On some platforms, a window move, resize or menu operation will cause event processing to block. This is due to how event processing is designed on those platforms. You can use the window refresh callback to redraw the contents of your window when necessary during such operations.

    +

    Do not assume that callbacks you set will only be called in response to event processing functions like this one. While it is necessary to poll for events, window systems that require GLFW to register callbacks of its own can pass events to GLFW in response to many window system function calls. GLFW will pass those events on to the application callbacks before returning.

    +

    Event processing is not required for joystick input to work.

    +
    Parameters
    + + +
    [in]timeoutThe maximum amount of time, in seconds, to wait.
    +
    +
    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED, GLFW_INVALID_VALUE and GLFW_PLATFORM_ERROR.
    +
    Reentrancy
    This function must not be called from a callback.
    +
    Thread safety
    This function must only be called from the main thread.
    +
    See also
    Event processing
    +
    +glfwPollEvents
    +
    +glfwWaitEvents
    +
    Since
    Added in version 3.2.
    + +
    +
    + +

    ◆ glfwPostEmptyEvent()

    + +
    +
    + + + + + + + + +
    void glfwPostEmptyEvent (void )
    +
    +

    This function posts an empty event from the current thread to the event queue, causing glfwWaitEvents or glfwWaitEventsTimeout to return.

    +
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    +
    Thread safety
    This function may be called from any thread.
    +
    See also
    Event processing
    +
    +glfwWaitEvents
    +
    +glfwWaitEventsTimeout
    +
    Since
    Added in version 3.1.
    + +
    +
    + +

    ◆ glfwSwapBuffers()

    +
    @@ -1886,153 +3390,15 @@ Zero is a valid value for many window and context related attributes so you cann
    Thread safety
    This function may be called from any thread.
    See also
    Buffer swapping
    -glfwSwapInterval
    -
    Since
    Added in version 1.0.
    -
    GLFW 3: Added window handle parameter.
    - - - - -
    -
    -
    - - - - - - - -
    void glfwWaitEvents (void )
    -
    -

    This function puts the calling thread to sleep until at least one event is available in the event queue. Once one or more events are available, it behaves exactly like glfwPollEvents, i.e. the events in the queue are processed and the function then returns immediately. Processing events will cause the window and input callbacks associated with those events to be called.

    -

    Since not all events are associated with callbacks, this function may return without a callback having been called even if you are monitoring all callbacks.

    -

    On some platforms, a window move, resize or menu operation will cause event processing to block. This is due to how event processing is designed on those platforms. You can use the window refresh callback to redraw the contents of your window when necessary during such operations.

    -

    On some platforms, certain callbacks may be called outside of a call to one of the event processing functions.

    -

    If no windows exist, this function returns immediately. For synchronization of threads in applications that do not create windows, use your threading library of choice.

    -

    Event processing is not required for joystick input to work.

    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_PLATFORM_ERROR.
    -
    Reentrancy
    This function must not be called from a callback.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Event processing
    -
    -glfwPollEvents
    -
    -glfwWaitEventsTimeout
    -
    Since
    Added in version 2.5.
    - -
    -
    - -
    -
    - - - - - - - - -
    void glfwWaitEventsTimeout (double timeout)
    -
    -

    This function puts the calling thread to sleep until at least one event is available in the event queue, or until the specified timeout is reached. If one or more events are available, it behaves exactly like glfwPollEvents, i.e. the events in the queue are processed and the function then returns immediately. Processing events will cause the window and input callbacks associated with those events to be called.

    -

    The timeout value must be a positive finite number.

    -

    Since not all events are associated with callbacks, this function may return without a callback having been called even if you are monitoring all callbacks.

    -

    On some platforms, a window move, resize or menu operation will cause event processing to block. This is due to how event processing is designed on those platforms. You can use the window refresh callback to redraw the contents of your window when necessary during such operations.

    -

    On some platforms, certain callbacks may be called outside of a call to one of the event processing functions.

    -

    If no windows exist, this function returns immediately. For synchronization of threads in applications that do not create windows, use your threading library of choice.

    -

    Event processing is not required for joystick input to work.

    -
    Parameters
    - - -
    [in]timeoutThe maximum amount of time, in seconds, to wait.
    -
    -
    -
    Reentrancy
    This function must not be called from a callback.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Event processing
    -
    -glfwPollEvents
    -
    -glfwWaitEvents
    -
    Since
    Added in version 3.2.
    - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - -
    void glfwWindowHint (int hint,
    int value 
    )
    -
    -

    This function sets hints for the next call to glfwCreateWindow. The hints, once set, retain their values until changed by a call to glfwWindowHint or glfwDefaultWindowHints, or until the library is terminated.

    -

    This function does not check whether the specified hint values are valid. If you set hints to invalid values this will instead be reported by the next call to glfwCreateWindow.

    -
    Parameters
    - - - -
    [in]hintThe window hint to set.
    [in]valueThe new value of the window hint.
    -
    -
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED and GLFW_INVALID_ENUM.
    -
    Thread safety
    This function must only be called from the main thread.
    -
    See also
    Window creation hints
    -
    -glfwDefaultWindowHints
    -
    Since
    Added in version 3.0. Replaces glfwOpenWindowHint.
    - -
    -
    - -
    -
    - - - - - - - - -
    int glfwWindowShouldClose (GLFWwindowwindow)
    -
    -

    This function returns the value of the close flag of the specified window.

    -
    Parameters
    - - -
    [in]windowThe window to query.
    -
    -
    -
    Returns
    The value of the close flag.
    -
    Errors
    Possible errors include GLFW_NOT_INITIALIZED.
    -
    Thread safety
    This function may be called from any thread. Access is not synchronized.
    -
    See also
    Window closing and close flag
    -
    Since
    Added in version 3.0.
    +glfwSwapInterval +
    Since
    Added in version 1.0. GLFW 3: Added window handle parameter.
    diff --git a/ref/glfw/docs/html/index.html b/ref/glfw/docs/html/index.html index 3c0518e4..1da005ec 100644 --- a/ref/glfw/docs/html/index.html +++ b/ref/glfw/docs/html/index.html @@ -3,7 +3,7 @@ - + GLFW: Main Page @@ -11,9 +11,6 @@ - @@ -21,45 +18,31 @@
    - + - + + + +
    -
    +

    Introduction

    GLFW is a free, Open Source, multi-platform library for OpenGL, OpenGL ES and Vulkan application development. It provides a simple, platform-independent API for creating windows, contexts and surfaces, reading input, handling events, etc.

    -

    See New features in 3.2 for release highlights or the version history for details.

    +

    Release notes for version 3.3 list new features, caveats and deprecations.

    Getting started is a guide for users new to GLFW. It takes you through how to write a small but complete program.

    There are guides for each section of the API:

      @@ -94,13 +77,14 @@ Introduction

      The reference documentation provides more detailed information about specific functions.

      Moving from GLFW 2 to 3 explains what has changed and how to update existing code to use the new API.

      There is a section on Guarantees and limitations for pointer lifetimes, reentrancy, thread safety, event order and backward and forward compatibility.

      -

      The FAQ answers many common questions about the design, implementation and use of GLFW.

      +

      The FAQ answers many common questions about the design, implementation and use of GLFW.

      Finally, Standards conformance explains what APIs, standards and protocols GLFW uses and what happens when they are not present on a given machine.

      -

      This documentation was generated with Doxygen. The sources for it are available in both the source distribution and GitHub repository.

      -
    +

    This documentation was generated with Doxygen. The sources for it are available in both the source distribution and GitHub repository.

    +
    + diff --git a/ref/glfw/docs/html/input_8dox.html b/ref/glfw/docs/html/input_8dox.html index 17c061af..420c0479 100644 --- a/ref/glfw/docs/html/input_8dox.html +++ b/ref/glfw/docs/html/input_8dox.html @@ -3,7 +3,7 @@ - + GLFW: input.dox File Reference @@ -11,9 +11,6 @@ - @@ -21,51 +18,31 @@
    - + - - + + + +
    diff --git a/ref/glfw/docs/html/input_guide.html b/ref/glfw/docs/html/input_guide.html index e0fc5a7b..bb8ba0a7 100644 --- a/ref/glfw/docs/html/input_guide.html +++ b/ref/glfw/docs/html/input_guide.html @@ -3,7 +3,7 @@ - + GLFW: Input guide @@ -11,9 +11,6 @@ - @@ -21,45 +18,31 @@
    - + - + + + +
    -
    +
    Input guide
    @@ -88,7 +71,8 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  • Mouse input
    • Cursor position
    • -
    • Cursor modes
    • +
    • Cursor mode
    • +
    • Raw mouse motion
    • Cursor objects -

      GLFW provides many kinds of input. While some can only be polled, like time, or only received via callbacks, like scrolling, there are those that provide both callbacks and polling. Where a callback is provided, that is the recommended way to receive that kind of input. The more you can use callbacks the less time your users' machines will need to spend polling.

      +

      GLFW provides many kinds of input. While some can only be polled, like time, or only received via callbacks, like scrolling, many provide both callbacks and polling. Callbacks are more work to use than polling but is less CPU intensive and guarantees that you do not miss state changes.

      All input callbacks receive a window handle. By using the window user pointer, you can access non-global structures or objects from your callbacks.

      To get a better feel for how the various events callbacks behave, run the events test program. It register every callback supported by GLFW and prints out all arguments provided for every event, along with time and sequence information.

      Event processing

      -

      GLFW needs to communicate regularly with the window system both in order to receive events and to show that the application hasn't locked up. Event processing must be done regularly while you have any windows and is normally done each frame after buffer swapping. Even when you have no windows, event polling needs to be done in order to receive monitor connection events.

      -

      There are two functions for processing pending events. glfwPollEvents, processes only those events that have already been received and then returns immediately.

      -

      This is the best choice when rendering continually, like most games do.

      +

      GLFW needs to poll the window system for events both to provide input to the application and to prove to the window system that the application hasn't locked up. Event processing is normally done each frame after buffer swapping. Even when you have no windows, event polling needs to be done in order to receive monitor and joystick connection events.

      +

      There are three functions for processing pending events. glfwPollEvents, processes only those events that have already been received and then returns immediately.

      +

      This is the best choice when rendering continuously, like most games do.

      If you only need to update the contents of the window when you receive new input, glfwWaitEvents is a better choice.

      -

      It puts the thread to sleep until at least one event has been received and then processes all received events. This saves a great deal of CPU cycles and is useful for, for example, editing tools. There must be at least one GLFW window for this function to sleep.

      -

      If you want to wait for events but have UI elements that need periodic updates, call glfwWaitEventsTimeout.

      +

      It puts the thread to sleep until at least one event has been received and then processes all received events. This saves a great deal of CPU cycles and is useful for, for example, editing tools.

      +

      If you want to wait for events but have UI elements or other tasks that need periodic updates, glfwWaitEventsTimeout lets you specify a timeout.

      It puts the thread to sleep until at least one event has been received, or until the specified number of seconds have elapsed. It then processes any received events.

      If the main thread is sleeping in glfwWaitEvents, you can wake it from another thread by posting an empty event to the event queue with glfwPostEmptyEvent.

      -

      Do not assume that callbacks will only be called through either of the above functions. While it is necessary to process events in the event queue, some window systems will send some events directly to the application, which in turn causes callbacks to be called outside of regular event processing.

      +

      Do not assume that callbacks will only be called in response to the above functions. While it is necessary to process events in one or more of the ways above, window systems that require GLFW to register callbacks of its own can pass events to GLFW in response to many window system function calls. GLFW will pass those events on to the application callbacks before returning.

      +

      For example, on Windows the system function that glfwSetWindowSize is implemented with will send window size events directly to the event callback that every window has and that GLFW implements for its windows. If you have set a window size callback GLFW will call it in turn with the new size before everything returns back out of the glfwSetWindowSize call.

      Keyboard input

      GLFW divides keyboard input into two categories; key events and character events. Key events relate to actual physical keyboard keys, whereas character events relate to the Unicode code points generated by pressing some of them.

      @@ -142,107 +131,184 @@ Key input

      If you wish to be notified when a physical key is pressed or released or when it repeats, set a key callback.

      glfwSetKeyCallback(window, key_callback);

      The callback function receives the keyboard key, platform-specific scancode, key action and modifier bits.

      void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
      {
      if (key == GLFW_KEY_E && action == GLFW_PRESS)
      activate_airship();
      }

      The action is one of GLFW_PRESS, GLFW_REPEAT or GLFW_RELEASE. The key will be GLFW_KEY_UNKNOWN if GLFW lacks a key token for it, for example E-mail and Play keys.

      -

      The scancode is unique for every key, regardless of whether it has a key token. Scancodes are platform-specific but consistent over time, so keys will have different scancodes depending on the platform but they are safe to save to disk.

      -

      Key states for named keys are also saved in per-window state arrays that can be polled with glfwGetKey.

      -
      int state = glfwGetKey(window, GLFW_KEY_E);
      if (state == GLFW_PRESS)
      activate_airship();

      The returned state is one of GLFW_PRESS or GLFW_RELEASE.

      -

      This function only returns cached key event state. It does not poll the system for the current state of the key.

      -

      Whenever you poll state, you risk missing the state change you are looking for. If a pressed key is released again before you poll its state, you will have missed the key press. The recommended solution for this is to use a key callback, but there is also the GLFW_STICKY_KEYS input mode.

      -

      When sticky keys mode is enabled, the pollable state of a key will remain GLFW_PRESS until the state of that key is polled with glfwGetKey. Once it has been polled, if a key release event had been processed in the meantime, the state will reset to GLFW_RELEASE, otherwise it will remain GLFW_PRESS.

      +

      The scancode is unique for every key, regardless of whether it has a key token. Scancodes are platform-specific but consistent over time, so keys will have different scancodes depending on the platform but they are safe to save to disk. You can query the scancode for any named key on the current platform with glfwGetKeyScancode.

      +
      const int scancode = glfwGetKeyScancode(GLFW_KEY_X);
      set_key_mapping(scancode, swap_weapons);

      The last reported state for every named key is also saved in per-window state arrays that can be polled with glfwGetKey.

      +
      int state = glfwGetKey(window, GLFW_KEY_E);
      if (state == GLFW_PRESS)
      {
      activate_airship();
      }

      The returned state is one of GLFW_PRESS or GLFW_RELEASE.

      +

      This function only returns cached key event state. It does not poll the system for the current physical state of the key.

      +

      Whenever you poll state, you risk missing the state change you are looking for. If a pressed key is released again before you poll its state, you will have missed the key press. The recommended solution for this is to use a key callback, but there is also the GLFW_STICKY_KEYS input mode.

      +

      When sticky keys mode is enabled, the pollable state of a key will remain GLFW_PRESS until the state of that key is polled with glfwGetKey. Once it has been polled, if a key release event had been processed in the meantime, the state will reset to GLFW_RELEASE, otherwise it will remain GLFW_PRESS.

      +

      If you wish to know what the state of the Caps Lock and Num Lock keys was when input events were generated, set the GLFW_LOCK_KEY_MODS input mode.

      +

      When this input mode is enabled, any callback that receives modifier bits will have the GLFW_MOD_CAPS_LOCK bit set if Caps Lock was on when the event occurred and the GLFW_MOD_NUM_LOCK bit set if Num Lock was on.

      The GLFW_KEY_LAST constant holds the highest value of any named key.

      Text input

      -

      GLFW supports text input in the form of a stream of Unicode code points, as produced by the operating system text input system. Unlike key input, text input obeys keyboard layouts and modifier keys and supports composing characters using dead keys. Once received, you can encode the code points into UTF-8 or any other encoding you prefer.

      -

      Because an unsigned int is 32 bits long on all platforms supported by GLFW, you can treat the code point argument as native endian UTF-32.

      -

      There are two callbacks for receiving Unicode code points. If you wish to offer regular text input, set a character callback.

      +

      GLFW supports text input in the form of a stream of Unicode code points, as produced by the operating system text input system. Unlike key input, text input obeys keyboard layouts and modifier keys and supports composing characters using dead keys. Once received, you can encode the code points into UTF-8 or any other encoding you prefer.

      +

      Because an unsigned int is 32 bits long on all platforms supported by GLFW, you can treat the code point argument as native endian UTF-32.

      +

      If you wish to offer regular text input, set a character callback.

      glfwSetCharCallback(window, character_callback);

      The callback function receives Unicode code points for key events that would have led to regular text input and generally behaves as a standard text field on that platform.

      -
      void character_callback(GLFWwindow* window, unsigned int codepoint)
      {
      }

      If you wish to receive even those Unicode code points generated with modifier key combinations that a plain text field would ignore, or just want to know exactly what modifier keys were used, set a character with modifiers callback.

      -
      glfwSetCharModsCallback(window, charmods_callback);

      The callback function receives Unicode code points and modifier bits.

      -
      void charmods_callback(GLFWwindow* window, unsigned int codepoint, int mods)
      {
      }

      +
      void character_callback(GLFWwindow* window, unsigned int codepoint)
      {
      }

      Key names

      If you wish to refer to keys by name, you can query the keyboard layout dependent name of printable keys with glfwGetKeyName.

      const char* key_name = glfwGetKeyName(GLFW_KEY_W, 0);
      show_tutorial_hint("Press %s to move forward", key_name);

      This function can handle both keys and scancodes. If the specified key is GLFW_KEY_UNKNOWN then the scancode is used, otherwise it is ignored. This matches the behavior of the key callback, meaning the callback arguments can always be passed unmodified to this function.

      Mouse input

      -

      Mouse input comes in many forms, including cursor motion, button presses and scrolling offsets. The cursor appearance can also be changed, either to a custom image or a standard cursor shape from the system theme.

      +

      Mouse input comes in many forms, including mouse motion, button presses and scrolling offsets. The cursor appearance can also be changed, either to a custom image or a standard cursor shape from the system theme.

      Cursor position

      If you wish to be notified when the cursor moves over the window, set a cursor position callback.

      -
      glfwSetCursorPosCallback(window, cursor_pos_callback);

      The callback functions receives the cursor position, measured in screen coordinates but relative to the top-left corner of the window client area. On platforms that provide it, the full sub-pixel cursor position is passed on.

      +
      glfwSetCursorPosCallback(window, cursor_position_callback);

      The callback functions receives the cursor position, measured in screen coordinates but relative to the top-left corner of the window content area. On platforms that provide it, the full sub-pixel cursor position is passed on.

      static void cursor_position_callback(GLFWwindow* window, double xpos, double ypos)
      {
      }

      The cursor position is also saved per-window and can be polled with glfwGetCursorPos.

      double xpos, ypos;
      glfwGetCursorPos(window, &xpos, &ypos);

      -Cursor modes

      -

      The GLFW_CURSOR input mode provides several cursor modes for special forms of mouse motion input. By default, the cursor mode is GLFW_CURSOR_NORMAL, meaning the regular arrow cursor (or another cursor set with glfwSetCursor) is used and cursor motion is not limited.

      +Cursor mode +

      The GLFW_CURSOR input mode provides several cursor modes for special forms of mouse motion input. By default, the cursor mode is GLFW_CURSOR_NORMAL, meaning the regular arrow cursor (or another cursor set with glfwSetCursor) is used and cursor motion is not limited.

      If you wish to implement mouse motion based camera controls or other input schemes that require unlimited mouse movement, set the cursor mode to GLFW_CURSOR_DISABLED.

      This will hide the cursor and lock it to the specified window. GLFW will then take care of all the details of cursor re-centering and offset calculation and providing the application with a virtual cursor position. This virtual position is provided normally via both the cursor position callback and through polling.

      Note
      You should not implement your own version of this functionality using other features of GLFW. It is not supported and will not work as robustly as GLFW_CURSOR_DISABLED.
      -

      If you just wish the cursor to become hidden when it is over a window, set the cursor mode to GLFW_CURSOR_HIDDEN.

      +

      If you only wish the cursor to become hidden when it is over a window but still want it to behave normally, set the cursor mode to GLFW_CURSOR_HIDDEN.

      This mode puts no limit on the motion of the cursor.

      To exit out of either of these special modes, restore the GLFW_CURSOR_NORMAL cursor mode.

      -

      +

      +

      +Raw mouse motion

      +

      When the cursor is disabled, raw (unscaled and unaccelerated) mouse motion can be enabled if available.

      +

      Raw mouse motion is closer to the actual motion of the mouse across a surface. It is not affected by the scaling and acceleration applied to the motion of the desktop cursor. That processing is suitable for a cursor while raw motion is better for controlling for example a 3D camera. Because of this, raw mouse motion is only provided when the cursor is disabled.

      +

      Call glfwRawMouseMotionSupported to check if the current machine provides raw motion and set the GLFW_RAW_MOUSE_MOTION input mode to enable it. It is disabled by default.

      +

      If supported, raw mouse motion can be enabled or disabled per-window and at any time but it will only be provided when the cursor is disabled.

      +

      Cursor objects

      -

      GLFW supports creating both custom and system theme cursor images, encapsulated as GLFWcursor objects. They are created with glfwCreateCursor or glfwCreateStandardCursor and destroyed with glfwDestroyCursor, or glfwTerminate, if any remain.

      +

      GLFW supports creating both custom and system theme cursor images, encapsulated as GLFWcursor objects. They are created with glfwCreateCursor or glfwCreateStandardCursor and destroyed with glfwDestroyCursor, or glfwTerminate, if any remain.

      Custom cursor creation

      A custom cursor is created with glfwCreateCursor, which returns a handle to the created cursor object. For example, this creates a 16x16 white square cursor with the hot-spot in the upper-left corner:

      -
      unsigned char pixels[16 * 16 * 4];
      memset(pixels, 0xff, sizeof(pixels));
      GLFWimage image;
      image.width = 16;
      image.height = 16;
      image.pixels = pixels;
      GLFWcursor* cursor = glfwCreateCursor(&image, 0, 0);

      If cursor creation fails, NULL will be returned, so it is necessary to check the return value.

      -

      The image data is 32-bit, little-endian, non-premultiplied RGBA, i.e. eight bits per channel. The pixels are arranged canonically as sequential rows, starting from the top-left corner.

      +
      unsigned char pixels[16 * 16 * 4];
      memset(pixels, 0xff, sizeof(pixels));
      GLFWimage image;
      image.width = 16;
      image.height = 16;
      image.pixels = pixels;
      GLFWcursor* cursor = glfwCreateCursor(&image, 0, 0);

      If cursor creation fails, NULL will be returned, so it is necessary to check the return value.

      +

      The image data is 32-bit, little-endian, non-premultiplied RGBA, i.e. eight bits per channel with the red channel first. The pixels are arranged canonically as sequential rows, starting from the top-left corner.

      Standard cursor creation

      A cursor with a standard shape from the current system cursor theme can be can be created with glfwCreateStandardCursor.

      -

      These cursor objects behave in the exact same way as those created with glfwCreateCursor except that the system cursor theme provides the actual image.

      +

      These cursor objects behave in the exact same way as those created with glfwCreateCursor except that the system cursor theme provides the actual image.

      Cursor destruction

      When a cursor is no longer needed, destroy it with glfwDestroyCursor.

      -

      Cursor destruction always succeeds. All cursors remaining when glfwTerminate is called are destroyed as well.

      +

      Cursor destruction always succeeds. If the cursor is current for any window, that window will revert to the default cursor. This does not affect the cursor mode. All remaining cursors are destroyed when glfwTerminate is called.

      Cursor setting

      A cursor can be set as current for a window with glfwSetCursor.

      -
      glfwSetCursor(window, cursor);

      Once set, the cursor image will be used as long as the system cursor is over the client area of the window and the cursor mode is set to GLFW_CURSOR_NORMAL.

      +
      glfwSetCursor(window, cursor);

      Once set, the cursor image will be used as long as the system cursor is over the content area of the window and the cursor mode is set to GLFW_CURSOR_NORMAL.

      A single cursor may be set for any number of windows.

      -

      To remove a cursor from a window, set the cursor of that window to NULL.

      -
      glfwSetCursor(window, NULL);

      When a cursor is destroyed, it is removed from any window where it is set. This does not affect the cursor modes of those windows.

      +

      To revert to the default cursor, set the cursor of that window to NULL.

      +
      glfwSetCursor(window, NULL);

      When a cursor is destroyed, any window that has it set will revert to the default cursor. This does not affect the cursor mode.

      Cursor enter/leave events

      -

      If you wish to be notified when the cursor enters or leaves the client area of a window, set a cursor enter/leave callback.

      +

      If you wish to be notified when the cursor enters or leaves the content area of a window, set a cursor enter/leave callback.

      glfwSetCursorEnterCallback(window, cursor_enter_callback);

      The callback function receives the new classification of the cursor.

      -
      void cursor_enter_callback(GLFWwindow* window, int entered)
      {
      if (entered)
      {
      // The cursor entered the client area of the window
      }
      else
      {
      // The cursor left the client area of the window
      }
      }

      +
      void cursor_enter_callback(GLFWwindow* window, int entered)
      {
      if (entered)
      {
      // The cursor entered the content area of the window
      }
      else
      {
      // The cursor left the content area of the window
      }
      }

      You can query whether the cursor is currently inside the content area of the window with the GLFW_HOVERED window attribute.

      +
      {
      highlight_interface();
      }

      Mouse button input

      If you wish to be notified when a mouse button is pressed or released, set a mouse button callback.

      glfwSetMouseButtonCallback(window, mouse_button_callback);

      The callback function receives the mouse button, button action and modifier bits.

      void mouse_button_callback(GLFWwindow* window, int button, int action, int mods)
      {
      if (button == GLFW_MOUSE_BUTTON_RIGHT && action == GLFW_PRESS)
      popup_menu();
      }

      The action is one of GLFW_PRESS or GLFW_RELEASE.

      Mouse button states for named buttons are also saved in per-window state arrays that can be polled with glfwGetMouseButton.

      -
      if (state == GLFW_PRESS)
      upgrade_cow();

      The returned state is one of GLFW_PRESS or GLFW_RELEASE.

      +
      if (state == GLFW_PRESS)
      {
      upgrade_cow();
      }

      The returned state is one of GLFW_PRESS or GLFW_RELEASE.

      This function only returns cached mouse button event state. It does not poll the system for the current state of the mouse button.

      -

      Whenever you poll state, you risk missing the state change you are looking for. If a pressed mouse button is released again before you poll its state, you will have missed the button press. The recommended solution for this is to use a mouse button callback, but there is also the GLFW_STICKY_MOUSE_BUTTONS input mode.

      -

      When sticky mouse buttons mode is enabled, the pollable state of a mouse button will remain GLFW_PRESS until the state of that button is polled with glfwGetMouseButton. Once it has been polled, if a mouse button release event had been processed in the meantime, the state will reset to GLFW_RELEASE, otherwise it will remain GLFW_PRESS.

      +

      Whenever you poll state, you risk missing the state change you are looking for. If a pressed mouse button is released again before you poll its state, you will have missed the button press. The recommended solution for this is to use a mouse button callback, but there is also the GLFW_STICKY_MOUSE_BUTTONS input mode.

      +

      When sticky mouse buttons mode is enabled, the pollable state of a mouse button will remain GLFW_PRESS until the state of that button is polled with glfwGetMouseButton. Once it has been polled, if a mouse button release event had been processed in the meantime, the state will reset to GLFW_RELEASE, otherwise it will remain GLFW_PRESS.

      The GLFW_MOUSE_BUTTON_LAST constant holds the highest value of any named button.

      Scroll input

      If you wish to be notified when the user scrolls, whether with a mouse wheel or touchpad gesture, set a scroll callback.

      glfwSetScrollCallback(window, scroll_callback);

      The callback function receives two-dimensional scroll offsets.

      -
      void scroll_callback(GLFWwindow* window, double xoffset, double yoffset)
      {
      }

      A simple mouse wheel, being vertical, provides offsets along the Y-axis.

      +
      void scroll_callback(GLFWwindow* window, double xoffset, double yoffset)
      {
      }

      A normal mouse wheel, being vertical, provides offsets along the Y-axis.

      Joystick input

      -

      The joystick functions expose connected joysticks and controllers, with both referred to as joysticks. It supports up to sixteen joysticks, ranging from GLFW_JOYSTICK_1, GLFW_JOYSTICK_2 up to GLFW_JOYSTICK_LAST. You can test whether a joystick is present with glfwJoystickPresent.

      -

      When GLFW is initialized, detected joysticks are added to to the beginning of the array, starting with GLFW_JOYSTICK_1. Once a joystick is detected, it keeps its assigned index until it is disconnected, so as joysticks are connected and disconnected, they will become spread out.

      -

      Joystick state is updated as needed when a joystick function is called and does not require a window to be created or glfwPollEvents or glfwWaitEvents to be called.

      +

      The joystick functions expose connected joysticks and controllers, with both referred to as joysticks. It supports up to sixteen joysticks, ranging from GLFW_JOYSTICK_1, GLFW_JOYSTICK_2 up to and including GLFW_JOYSTICK_16 or GLFW_JOYSTICK_LAST. You can test whether a joystick is present with glfwJoystickPresent.

      +

      Each joystick has zero or more axes, zero or more buttons, zero or more hats, a human-readable name, a user pointer and an SDL compatible GUID.

      +

      When GLFW is initialized, detected joysticks are added to the beginning of the array. Once a joystick is detected, it keeps its assigned ID until it is disconnected or the library is terminated, so as joysticks are connected and disconnected, there may appear gaps in the IDs.

      +

      Joystick axis, button and hat state is updated when polled and does not require a window to be created or events to be processed. However, if you want joystick connection and disconnection events reliably delivered to the joystick callback then you must process events.

      +

      To see all the properties of all connected joysticks in real-time, run the joysticks test program.

      Joystick axis states

      -

      The positions of all axes of a joystick are returned by glfwGetJoystickAxes. See the reference documentation for the lifetime of the returned array.

      -
      int count;
      const float* axes = glfwGetJoystickAxes(GLFW_JOYSTICK_1, &count);

      Each element in the returned array is a value between -1.0 and 1.0.

      +

      The positions of all axes of a joystick are returned by glfwGetJoystickAxes. See the reference documentation for the lifetime of the returned array.

      +
      int count;
      const float* axes = glfwGetJoystickAxes(GLFW_JOYSTICK_5, &count);

      Each element in the returned array is a value between -1.0 and 1.0.

      Joystick button states

      -

      The states of all buttons of a joystick are returned by glfwGetJoystickButtons. See the reference documentation for the lifetime of the returned array.

      -
      int count;
      const unsigned char* axes = glfwGetJoystickButtons(GLFW_JOYSTICK_1, &count);

      Each element in the returned array is either GLFW_PRESS or GLFW_RELEASE.

      +

      The states of all buttons of a joystick are returned by glfwGetJoystickButtons. See the reference documentation for the lifetime of the returned array.

      +
      int count;
      const unsigned char* buttons = glfwGetJoystickButtons(GLFW_JOYSTICK_3, &count);

      Each element in the returned array is either GLFW_PRESS or GLFW_RELEASE.

      +

      For backward compatibility with earlier versions that did not have glfwGetJoystickHats, the button array by default also includes all hats. See the reference documentation for glfwGetJoystickButtons for details.

      +

      +Joystick hat states

      +

      The states of all hats are returned by glfwGetJoystickHats. See the reference documentation for the lifetime of the returned array.

      +
      int count;
      const unsigned char* hats = glfwGetJoystickHats(GLFW_JOYSTICK_7, &count);

      Each element in the returned array is one of the following:

      + + + + + + + + + + + + + + + + + + + + + +
      Name Value
      GLFW_HAT_CENTERED 0
      GLFW_HAT_UP 1
      GLFW_HAT_RIGHT 2
      GLFW_HAT_DOWN 4
      GLFW_HAT_LEFT 8
      GLFW_HAT_RIGHT_UP GLFW_HAT_RIGHT | GLFW_HAT_UP
      GLFW_HAT_RIGHT_DOWN GLFW_HAT_RIGHT | GLFW_HAT_DOWN
      GLFW_HAT_LEFT_UP GLFW_HAT_LEFT | GLFW_HAT_UP
      GLFW_HAT_LEFT_DOWN GLFW_HAT_LEFT | GLFW_HAT_DOWN
      +

      The diagonal directions are bitwise combinations of the primary (up, right, down and left) directions and you can test for these individually by ANDing it with the corresponding direction.

      +
      if (hats[2] & GLFW_HAT_RIGHT)
      {
      // State of hat 2 could be right-up, right or right-down
      }

      For backward compatibility with earlier versions that did not have glfwGetJoystickHats, all hats are by default also included in the button array. See the reference documentation for glfwGetJoystickButtons for details.

      Joystick name

      -

      The human-readable, UTF-8 encoded name of a joystick is returned by glfwGetJoystickName. See the reference documentation for the lifetime of the returned string.

      -

      Joystick names are not guaranteed to be unique. Two joysticks of the same model and make may have the same name. Only the joystick token is guaranteed to be unique, and only until that joystick is disconnected.

      +

      The human-readable, UTF-8 encoded name of a joystick is returned by glfwGetJoystickName. See the reference documentation for the lifetime of the returned string.

      +

      Joystick names are not guaranteed to be unique. Two joysticks of the same model and make may have the same name. Only the joystick token is guaranteed to be unique, and only until that joystick is disconnected.

      +

      +Joystick user pointer

      +

      Each joystick has a user pointer that can be set with glfwSetJoystickUserPointer and queried with glfwGetJoystickUserPointer. This can be used for any purpose you need and will not be modified by GLFW. The value will be kept until the joystick is disconnected or until the library is terminated.

      +

      The initial value of the pointer is NULL.

      Joystick configuration changes

      If you wish to be notified when a joystick is connected or disconnected, set a joystick callback.

      glfwSetJoystickCallback(joystick_callback);

      The callback function receives the ID of the joystick that has been connected and disconnected and the event that occurred.

      -
      void joystick_callback(int joy, int event)
      {
      if (event == GLFW_CONNECTED)
      {
      // The joystick was connected
      }
      else if (event == GLFW_DISCONNECTED)
      {
      // The joystick was disconnected
      }
      }

      +
      void joystick_callback(int jid, int event)
      {
      if (event == GLFW_CONNECTED)
      {
      // The joystick was connected
      }
      else if (event == GLFW_DISCONNECTED)
      {
      // The joystick was disconnected
      }
      }

      For joystick connection and disconnection events to be delivered on all platforms, you need to call one of the event processing functions. Joystick disconnection may also be detected and the callback called by joystick functions. The function will then return whatever it returns for a disconnected joystick.

      +

      Only glfwGetJoystickName and glfwGetJoystickUserPointer will return useful values for a disconnected joystick and only before the monitor callback returns.

      +

      +Gamepad input

      +

      The joystick functions provide unlabeled axes, buttons and hats, with no indication of where they are located on the device. Their order may also vary between platforms even with the same device.

      +

      To solve this problem the SDL community crowdsourced the SDL_GameControllerDB project, a database of mappings from many different devices to an Xbox-like gamepad.

      +

      GLFW supports this mapping format and contains a copy of the mappings available at the time of release. See Gamepad mappings for how to update this at runtime. Mappings will be assigned to joysticks automatically any time a joystick is connected or the mappings are updated.

      +

      You can check whether a joystick is both present and has a gamepad mapping with glfwJoystickIsGamepad.

      +
      {
      // Use as gamepad
      }

      If you are only interested in gamepad input you can use this function instead of glfwJoystickPresent.

      +

      You can query the human-readable name provided by the gamepad mapping with glfwGetGamepadName. This may or may not be the same as the joystick name.

      +
      const char* name = glfwGetGamepadName(GLFW_JOYSTICK_7);

      To retrieve the gamepad state of a joystick, call glfwGetGamepadState.

      +
      {
      {
      input_jump();
      }
      }

      The GLFWgamepadstate struct has two arrays; one for button states and one for axis states. The values for each button and axis are the same as for the glfwGetJoystickButtons and glfwGetJoystickAxes functions, i.e. GLFW_PRESS or GLFW_RELEASE for buttons and -1.0 to 1.0 inclusive for axes.

      +

      The sizes of the arrays and the positions within each array are fixed.

      +

      The button indices are GLFW_GAMEPAD_BUTTON_A, GLFW_GAMEPAD_BUTTON_B, GLFW_GAMEPAD_BUTTON_X, GLFW_GAMEPAD_BUTTON_Y, GLFW_GAMEPAD_BUTTON_LEFT_BUMPER, GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER, GLFW_GAMEPAD_BUTTON_BACK, GLFW_GAMEPAD_BUTTON_START, GLFW_GAMEPAD_BUTTON_GUIDE, GLFW_GAMEPAD_BUTTON_LEFT_THUMB, GLFW_GAMEPAD_BUTTON_RIGHT_THUMB, GLFW_GAMEPAD_BUTTON_DPAD_UP, GLFW_GAMEPAD_BUTTON_DPAD_RIGHT, GLFW_GAMEPAD_BUTTON_DPAD_DOWN and GLFW_GAMEPAD_BUTTON_DPAD_LEFT.

      +

      For those who prefer, there are also the GLFW_GAMEPAD_BUTTON_CROSS, GLFW_GAMEPAD_BUTTON_CIRCLE, GLFW_GAMEPAD_BUTTON_SQUARE and GLFW_GAMEPAD_BUTTON_TRIANGLE aliases for the A, B, X and Y button indices.

      +

      The axis indices are GLFW_GAMEPAD_AXIS_LEFT_X, GLFW_GAMEPAD_AXIS_LEFT_Y, GLFW_GAMEPAD_AXIS_RIGHT_X, GLFW_GAMEPAD_AXIS_RIGHT_Y, GLFW_GAMEPAD_AXIS_LEFT_TRIGGER and GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER.

      +

      The GLFW_GAMEPAD_BUTTON_LAST and GLFW_GAMEPAD_AXIS_LAST constants equal the largest available index for each array.

      +

      +Gamepad mappings

      +

      GLFW contains a copy of the mappings available in SDL_GameControllerDB at the time of release. Newer ones can be added at runtime with glfwUpdateGamepadMappings.

      +
      const char* mappings = load_file_contents("game/data/gamecontrollerdb.txt");

      This function supports everything from single lines up to and including the unmodified contents of the whole gamecontrollerdb.txt file.

      +

      Below is a description of the mapping format. Please keep in mind that this description is not authoritative. The format is defined by the SDL and SDL_GameControllerDB projects and their documentation and code takes precedence.

      +

      Each mapping is a single line of comma-separated values describing the GUID, name and layout of the gamepad. Lines that do not begin with a hexadecimal digit are ignored.

      +

      The first value is always the gamepad GUID, a 32 character long hexadecimal string that typically identifies its make, model, revision and the type of connection to the computer. When this information is not available, the GUID is generated using the gamepad name. GLFW uses the SDL 2.0.5+ GUID format but can convert from the older formats.

      +

      The second value is always the human-readable name of the gamepad.

      +

      All subsequent values are in the form <field>:<value> and describe the layout of the mapping. These fields may not all be present and may occur in any order.

      +

      The button fields are a, b, c, d, back, start, guide, dpup, dpright, dpdown, dpleft, leftshoulder, rightshoulder, leftstick and rightstick.

      +

      The axis fields are leftx, lefty, rightx, righty, lefttrigger and righttrigger.

      +

      The value of an axis or button field can be a joystick button, a joystick axis, a hat bitmask or empty. Joystick buttons are specified as bN, for example b2 for the third button. Joystick axes are specified as aN, for example a7 for the eighth button. Joystick hat bit masks are specified as hN.N, for example h0.8 for left on the first hat. More than one bit may be set in the mask.

      +

      Before an axis there may be a + or - range modifier, for example +a3 for the positive half of the fourth axis. This restricts input to only the positive or negative halves of the joystick axis. After an axis or half-axis there may be the ~ inversion modifier, for example a2~ or -a7~. This negates the values of the gamepad axis.

      +

      The hat bit mask match the hat states in the joystick functions.

      +

      There is also the special platform field that specifies which platform the mapping is valid for. Possible values are Windows, Mac OS X and Linux.

      +

      Below is an example of what a gamepad mapping might look like. It is the one built into GLFW for Xbox controllers accessed via the XInput API on Windows. This example has been broken into several lines to fit on the page, but real gamepad mappings must be a single line.

      +
      78696e70757401000000000000000000,XInput Gamepad (GLFW),platform:Windows,a:b0,
      b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,leftstick:b8,
      rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,
      righttrigger:a5,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,
      Note
      GLFW does not yet support the output range and modifiers + and - that were recently added to SDL. The input modifiers +, - and ~ are supported and described above.
      +

      Time input

      GLFW provides high-resolution time input, in seconds, with glfwGetTime.

      double seconds = glfwGetTime();

      It returns the number of seconds since the timer was started when the library was initialized with glfwInit. The platform-specific time sources used usually have micro- or nanosecond resolution.

      @@ -253,18 +319,18 @@ Time input
      uint64_t freqency = glfwGetTimerFrequency();

      Clipboard input and output

      If the system clipboard contains a UTF-8 encoded string or if it can be converted to one, you can retrieve it with glfwGetClipboardString. See the reference documentation for the lifetime of the returned string.

      -
      const char* text = glfwGetClipboardString(window);
      if (text)
      insert_text(text);

      If the clipboard is empty or if its contents could not be converted, NULL is returned.

      +
      const char* text = glfwGetClipboardString(NULL);
      if (text)
      {
      insert_text(text);
      }

      If the clipboard is empty or if its contents could not be converted, NULL is returned.

      The contents of the system clipboard can be set to a UTF-8 encoded string with glfwSetClipboardString.

      -
      glfwSetClipboardString(window, "A string with words in it");

      The clipboard functions take a window handle argument because some window systems require a window to communicate with the system clipboard. Any valid window may be used.

      -

      +
      glfwSetClipboardString(NULL, "A string with words in it");

      Path drop input

      If you wish to receive the paths of files and/or directories dropped on a window, set a file drop callback.

      glfwSetDropCallback(window, drop_callback);

      The callback function receives an array of paths encoded as UTF-8.

      void drop_callback(GLFWwindow* window, int count, const char** paths)
      {
      int i;
      for (i = 0; i < count; i++)
      handle_dropped_file(paths[i]);
      }

      The path array and its strings are only valid until the file drop callback returns, as they may have been generated specifically for that event. You need to make a deep copy of the array if you want to keep the paths.

      -
  • +
    +
    diff --git a/ref/glfw/docs/html/intro_8dox.html b/ref/glfw/docs/html/intro_8dox.html index 5fa7002e..e5f598b3 100644 --- a/ref/glfw/docs/html/intro_8dox.html +++ b/ref/glfw/docs/html/intro_8dox.html @@ -3,7 +3,7 @@ - + GLFW: intro.dox File Reference @@ -11,9 +11,6 @@ - @@ -21,51 +18,31 @@
    - + - - + + + +
    diff --git a/ref/glfw/docs/html/intro_guide.html b/ref/glfw/docs/html/intro_guide.html index 68880bdf..c7ba5d5e 100644 --- a/ref/glfw/docs/html/intro_guide.html +++ b/ref/glfw/docs/html/intro_guide.html @@ -3,7 +3,7 @@ - + GLFW: Introduction to the API @@ -11,9 +11,6 @@ - @@ -21,45 +18,31 @@
    - + - + + + +
    -
    +
    Introduction to the API

    Table of Contents

    • Initialization and termination
    • @@ -117,7 +105,9 @@ Initialization and termination @@ -125,8 +115,32 @@ Initialization and termination

      Initializing GLFW

      The library is initialized with glfwInit, which returns GLFW_FALSE if an error occurred.

      -
      if (!glfwInit())
      {
      // Handle initialization failure
      }

      If any part of initialization fails, any parts that succeeded are terminated as if glfwTerminate had been called. The library only needs to be initialized once and additional calls to an already initialized library will simply return GLFW_TRUE immediately.

      -

      Once the library has been successfully initialized, it should be terminated before the application exits. Modern systems are very good at freeing resources allocated by programs that simply exit, but GLFW sometimes has to change global system settings and these might not be restored without termination.

      +
      if (!glfwInit())
      {
      // Handle initialization failure
      }

      If any part of initialization fails, any parts that succeeded are terminated as if glfwTerminate had been called. The library only needs to be initialized once and additional calls to an already initialized library will return GLFW_TRUE immediately.

      +

      Once the library has been successfully initialized, it should be terminated before the application exits. Modern systems are very good at freeing resources allocated by programs that exit, but GLFW sometimes has to change global system settings and these might not be restored without termination.

      +

      +Initialization hints

      +

      Initialization hints are set before glfwInit and affect how the library behaves until termination. Hints are set with glfwInitHint.

      +

      The values you set hints to are never reset by GLFW, but they only take effect during initialization. Once GLFW has been initialized, any values you set will be ignored until the library is terminated and initialized again.

      +

      Some hints are platform specific. These may be set on any platform but they will only affect their specific platform. Other platforms will ignore them. Setting these hints requires no platform specific headers or functions.

      +

      +Shared init hints

      +

      GLFW_JOYSTICK_HAT_BUTTONS specifies whether to also expose joystick hats as buttons, for compatibility with earlier versions of GLFW that did not have glfwGetJoystickHats. Set this with glfwInitHint.

      +

      +macOS specific init hints

      +

      GLFW_COCOA_CHDIR_RESOURCES specifies whether to set the current directory to the application to the Contents/Resources subdirectory of the application's bundle, if present. Set this with glfwInitHint.

      +

      GLFW_COCOA_MENUBAR specifies whether to create a basic menu bar, either from a nib or manually, when the first window is created, which is when AppKit is initialized. Set this with glfwInitHint.

      +

      +Supported and default values

      + + + + + + + + + +
      Initialization hint Default value Supported values
      GLFW_JOYSTICK_HAT_BUTTONS GLFW_TRUE GLFW_TRUE or GLFW_FALSE
      GLFW_COCOA_CHDIR_RESOURCES GLFW_TRUE GLFW_TRUE or GLFW_FALSE
      GLFW_COCOA_MENUBAR GLFW_TRUE GLFW_TRUE or GLFW_FALSE

      Terminating GLFW

      Before your application exits, you should terminate the GLFW library if it has been initialized. This is done with glfwTerminate.

      @@ -134,21 +148,26 @@ Terminating GLFW

      Once the library is terminated, it is as if it had never been initialized and you will need to initialize it again before being able to use GLFW. If the library was not initialized or had already been terminated, it return immediately.

      Error handling

      -

      Some GLFW functions have return values that indicate an error, but this is often not very helpful when trying to figure out why the error occurred. Some functions also return otherwise valid values on error. Finally, far from all GLFW functions have return values.

      -

      This is where the error callback comes in. This callback is called whenever an error occurs. It is set with glfwSetErrorCallback, a function that may be called regardless of whether GLFW is initialized.

      -
      glfwSetErrorCallback(error_callback);

      The error callback receives a human-readable description of the error and (when possible) its cause. The description encoded as UTF-8. The callback is also provided with an error code.

      -
      void error_callback(int error, const char* description)
      {
      puts(description);
      }

      The error code indicates the general category of the error. Some error codes, such as GLFW_NOT_INITIALIZED has only a single meaning, whereas others like GLFW_PLATFORM_ERROR are used for many different errors.

      -

      The description string is only valid until the error callback returns, as it may have been generated specifically for that error. This lets GLFW provide much more specific error descriptions but means you must make a copy if you want to keep the description string.

      -
      Note
      Relying on erroneous behavior is not forward compatible. In other words, do not rely on a currently invalid call to generate a specific error, as that same call may in future versions generate a different error or become valid.
      +

      Some GLFW functions have return values that indicate an error, but this is often not very helpful when trying to figure out what happened or why it occurred. Other functions have no return value reserved for errors, so error notification needs a separate channel. Finally, far from all GLFW functions have return values.

      +

      The last error code for the calling thread can be queried at any time with glfwGetError.

      +
      int code = glfwGetError(NULL);
      if (code != GLFW_NO_ERROR)
      handle_error(code);

      If no error has occurred since the last call, GLFW_NO_ERROR (zero) is returned. The error is cleared before the function returns.

      +

      The error code indicates the general category of the error. Some error codes, such as GLFW_NOT_INITIALIZED has only a single meaning, whereas others like GLFW_PLATFORM_ERROR are used for many different errors.

      +

      GLFW often has more information about an error than its general category. You can retrieve a UTF-8 encoded human-readable description along with the error code. If no error has occurred since the last call, the description is set to NULL.

      +
      const char* description;
      int code = glfwGetError(&description);
      if (description)
      display_error_message(code, description);

      The retrieved description string is only valid until the next error occurs. This means you must make a copy of it if you want to keep it.

      +

      You can also set an error callback, which will be called each time an error occurs. It is set with glfwSetErrorCallback.

      +
      glfwSetErrorCallback(error_callback);

      The error callback receives the same error code and human-readable description returned by glfwGetError.

      +
      void error_callback(int code, const char* description)
      {
      display_error_message(code, description);
      }

      The error callback is called after the error is stored, so calling glfwGetError from within the error callback returns the same values as the callback argument.

      +

      The description string passed to the callback is only valid until the error callback returns. This means you must make a copy of it if you want to keep it.

      +

      Reported errors are never fatal. As long as GLFW was successfully initialized, it will remain initialized and in a safe state until terminated regardless of how many errors occur. If an error occurs during initialization that causes glfwInit to fail, any part of the library that was initialized will be safely terminated.

      +

      Do not rely on a currently invalid call to generate a specific error, as in the future that same call may generate a different error or become valid.

      Coordinate systems

      -

      GLFW has two primary coordinate systems: the virtual screen and the window client area or content area. Both use the same unit: virtual screen coordinates, or just screen coordinates, which don't necessarily correspond to pixels.

      -
      - -
      -

      Both the virtual screen and the client area coordinate systems have the X-axis pointing to the right and the Y-axis pointing down.

      -

      Window and monitor positions are specified as the position of the upper-left corners of their content areas relative to the virtual screen, while cursor positions are specified relative to a window's client area.

      -

      Because the origin of the window's client area coordinate system is also the point from which the window position is specified, you can translate client area coordinates to the virtual screen by adding the window position. The window frame, when present, extends out from the client area but does not affect the window position.

      +

      GLFW has two primary coordinate systems: the virtual screen and the window content area or content area. Both use the same unit: virtual screen coordinates, or just screen coordinates, which don't necessarily correspond to pixels.

      + +/> +

      Both the virtual screen and the content area coordinate systems have the X-axis pointing to the right and the Y-axis pointing down.

      +

      Window and monitor positions are specified as the position of the upper-left corners of their content areas relative to the virtual screen, while cursor positions are specified relative to a window's content area.

      +

      Because the origin of the window's content area coordinate system is also the point from which the window position is specified, you can translate content area coordinates to the virtual screen by adding the window position. The window frame, when present, extends out from the content area but does not affect the window position.

      Almost all positions and sizes in GLFW are measured in screen coordinates relative to one of the two origins above. This includes cursor positions, window positions and sizes, window frame sizes, monitor positions and video mode resolutions.

      Two exceptions are the monitor physical size, which is measured in millimetres, and framebuffer size, which is measured in pixels.

      Pixels and screen coordinates may map 1:1 on your machine, but they won't on every other machine, for example on a Mac with a Retina display. The ratio between screen coordinates and pixels may also change at run-time depending on which monitor the window is currently considered to be on.

      @@ -163,12 +182,9 @@ Pointer lifetimes

      Pointer lifetimes are guaranteed not to be shortened in future minor or patch releases.

      Reentrancy

      -

      GLFW event processing and object creation and destruction are not reentrant. This means that the following functions must not be called from any callback function:

      +

      GLFW event processing and object destruction are not reentrant. This means that the following functions must not be called from any callback function:

        -
      • glfwCreateWindow
      • glfwDestroyWindow
      • -
      • glfwCreateCursor
      • -
      • glfwCreateStandardCursor
      • glfwDestroyCursor
      • glfwPollEvents
      • glfwWaitEvents
      • @@ -178,19 +194,26 @@ Reentrancy

        These functions may be made reentrant in future minor or patch releases, but functions not on this list will not be made non-reentrant.

        Thread safety

        -

        Most GLFW functions must only be called from the main thread, but some may be called from any thread. However, no GLFW function may be called from any thread but the main thread until GLFW has been successfully initialized, including functions that may called before initialization.

        +

        Most GLFW functions must only be called from the main thread (the thread that calls main), but some may be called from any thread once the library has been initialized. Before initialization the whole library is thread-unsafe.

        The reference documentation for every GLFW function states whether it is limited to the main thread.

        -

        Initialization and termination, event processing and the creation and destruction of windows, contexts and cursors are all limited to the main thread due to limitations of one or several platforms.

        +

        Initialization, termination, event processing and the creation and destruction of windows, cursors and OpenGL and OpenGL ES contexts are all restricted to the main thread due to limitations of one or several platforms.

        Because event processing must be performed on the main thread, all callbacks except for the error callback will only be called on that thread. The error callback may be called on any thread, as any GLFW function may generate errors.

        -

        The posting of empty events may be done from any thread. The window user pointer and close flag may also be accessed and modified from any thread, but this is not synchronized by GLFW. The following window related functions may be called from any thread:

        +

        The error code and description may be queried from any thread.

        + +

        Empty events may be posted from any thread.

        +

        The window user pointer and close flag may be read and written from any thread, but this is not synchronized by GLFW.

        + -

        Rendering may be done on any thread. The following context related functions may be called from any thread:

        +

        These functions for working with OpenGL and OpenGL ES contexts may be called from any thread, but the window object is not synchronized by GLFW.

        -

        The raw timer may be queried from any thread. The following raw timer related functions may be called from any thread:

        +

        The raw timer functions may be called from any thread.

        -

        The regular timer may be used from any thread, but the reading and writing of the timer offset is not synchronized by GLFW. The following timer related functions may be called from any thread:

        +

        The regular timer may be used from any thread, but reading and writing the timer offset is not synchronized by GLFW.

        -

        Library version information may be queried from any thread. The following version related functions may be called from any thread:

        +

        Library version information may be queried from any thread.

        -

        Vulkan objects may be created and information queried from any thread. The following Vulkan related functions may be called from any thread:

        +

        All Vulkan related functions may be called from any thread.

        -

        GLFW uses no synchronization objects internally except for thread-local storage to keep track of the current context for each thread. Synchronization is left to the application.

        +

        GLFW uses synchronization objects internally only to manage the per-thread context and error states. Additional synchronization is left to the application.

        Functions that may currently be called from any thread will always remain so, but functions that are currently limited to the main thread may be updated to allow calls from any thread in future releases.

        Version compatibility

        -

        GLFW guarantees source and binary backward compatibility with earlier minor versions of the API. This means that you can drop in a newer version of the library and existing programs will continue to compile and existing binaries will continue to run.

        +

        GLFW uses Semantic Versioning. This guarantees source and binary backward compatibility with earlier minor versions of the API. This means that you can drop in a newer version of the library and existing programs will continue to compile and existing binaries will continue to run.

        Once a function or constant has been added, the signature of that function or value of that constant will remain unchanged until the next major version of GLFW. No compatibility of any kind is guaranteed between major versions.

        Undocumented behavior, i.e. behavior that is not described in the documentation, may change at any time until it is documented.

        -

        If the reference documentation and the implementation differ, the reference documentation is correct and the implementation will be fixed in the next release.

        +

        If the reference documentation and the implementation differ, the reference documentation will almost always take precedence and the implementation will be fixed in the next release. The reference documentation will also take precedence over anything stated in a guide.

        Event order

        The order of arrival of related events is not guaranteed to be consistent across platforms. The exception is synthetic key and mouse button release events, which are always delivered after the window defocus event.

        @@ -254,10 +277,11 @@ Version string
      • Any additional options or APIs

      For example, when compiling GLFW 3.0 with MinGW using the Win32 and WGL back ends, the version string may look something like this:

      -
      3.0.0 Win32 WGL MinGW
    +
    3.0.0 Win32 WGL MinGW
    +
    diff --git a/ref/glfw/docs/html/jquery.js b/ref/glfw/docs/html/jquery.js index d52a1c77..1ee895ca 100644 --- a/ref/glfw/docs/html/jquery.js +++ b/ref/glfw/docs/html/jquery.js @@ -1,5 +1,5 @@ -/* - * jQuery JavaScript Library v1.7.1 +/*! + * jQuery JavaScript Library v1.7.2 * http://jquery.com/ * * Copyright 2011, John Resig @@ -11,16 +11,16 @@ * Copyright 2011, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * - * Date: Mon Nov 21 21:11:03 2011 -0500 + * Date: Wed Mar 21 12:46:34 2012 -0700 */ -(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
    a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
    ";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
    t
    ";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
    ";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); -/* +(function(bd,L){var av=bd.document,bu=bd.navigator,bm=bd.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bd.jQuery,bH=bd.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.2",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bd.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bd.attachEvent("onload",bF.ready);var b0=false;try{b0=bd.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0!=null&&b0==b0.window},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bd.JSON&&bd.JSON.parse){return bd.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){if(typeof b2!=="string"||!b2){return null}var b0,b1;try{if(bd.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bd.execScript||function(b1){bd["eval"].call(bd,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aK.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aK.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
    a";bH=bv.getElementsByTagName("*");bE=bv.getElementsByTagName("a")[0];if(!bH||!bH.length||!bE){return{}}bF=av.createElement("select");bx=bF.appendChild(av.createElement("option"));bD=bv.getElementsByTagName("input")[0];bI={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bE.getAttribute("style")),hrefNormalized:(bE.getAttribute("href")==="/a"),opacity:/^0.55/.test(bE.style.opacity),cssFloat:!!bE.style.cssFloat,checkOn:(bD.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true,pixelMargin:true};b.boxModel=bI.boxModel=(av.compatMode==="CSS1Compat");bD.checked=true;bI.noCloneChecked=bD.cloneNode(true).checked;bF.disabled=true;bI.optDisabled=!bx.disabled;try{delete bv.test}catch(bB){bI.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bI.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bD=av.createElement("input");bD.value="t";bD.setAttribute("type","radio");bI.radioValue=bD.value==="t";bD.setAttribute("checked","checked");bD.setAttribute("name","t");bv.appendChild(bD);bC=av.createDocumentFragment();bC.appendChild(bv.lastChild);bI.checkClone=bC.cloneNode(true).cloneNode(true).lastChild.checked;bI.appendChecked=bD.checked;bC.removeChild(bD);bC.appendChild(bv);if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bA="on"+by;bw=(bA in bv);if(!bw){bv.setAttribute(bA,"return;");bw=(typeof bv[bA]==="function")}bI[by+"Bubbles"]=bw}}bC.removeChild(bv);bC=bF=bx=bv=bD=null;b(function(){var bM,bV,bW,bU,bO,bP,bR,bL,bK,bQ,bN,e,bT,bS=av.getElementsByTagName("body")[0];if(!bS){return}bL=1;bT="padding:0;margin:0;border:";bN="position:absolute;top:0;left:0;width:1px;height:1px;";e=bT+"0;visibility:hidden;";bK="style='"+bN+bT+"5px solid #000;";bQ="
    ";bM=av.createElement("div");bM.style.cssText=e+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bS.insertBefore(bM,bS.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
    t
    ";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bI.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);if(bd.getComputedStyle){bv.innerHTML="";bR=av.createElement("div");bR.style.width="0";bR.style.marginRight="0";bv.style.width="2px";bv.appendChild(bR);bI.reliableMarginRight=(parseInt((bd.getComputedStyle(bR,null)||{marginRight:0}).marginRight,10)||0)===0}if(typeof bv.style.zoom!=="undefined"){bv.innerHTML="";bv.style.width=bv.style.padding="1px";bv.style.border=0;bv.style.overflow="hidden";bv.style.display="inline";bv.style.zoom=1;bI.inlineBlockNeedsLayout=(bv.offsetWidth===3);bv.style.display="block";bv.style.overflow="visible";bv.innerHTML="
    ";bI.shrinkWrapBlocks=(bv.offsetWidth!==3)}bv.style.cssText=bN+e;bv.innerHTML=bQ;bV=bv.firstChild;bW=bV.firstChild;bO=bV.nextSibling.firstChild.firstChild;bP={doesNotAddBorder:(bW.offsetTop!==5),doesAddBorderForTableAndCells:(bO.offsetTop===5)};bW.style.position="fixed";bW.style.top="20px";bP.fixedPosition=(bW.offsetTop===20||bW.offsetTop===15);bW.style.position=bW.style.top="";bV.style.overflow="hidden";bV.style.position="relative";bP.subtractsBorderForOverflowNotVisible=(bW.offsetTop===-5);bP.doesNotIncludeMarginInBodyOffset=(bS.offsetTop!==bL);if(bd.getComputedStyle){bv.style.marginTop="1%";bI.pixelMargin=(bd.getComputedStyle(bv,null)||{marginTop:0}).marginTop!=="1%"}if(typeof bM.style.zoom!=="undefined"){bM.style.zoom=1}bS.removeChild(bM);bR=bv=bM=null;b.extend(bI,bP)});return bI})();var aT=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA1,null,false)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function a6(bx,bw,by){if(by===L&&bx.nodeType===1){var bv="data-"+bw.replace(aA,"-$1").toLowerCase();by=bx.getAttribute(bv);if(typeof by==="string"){try{by=by==="true"?true:by==="false"?false:by==="null"?null:b.isNumeric(by)?+by:aT.test(by)?b.parseJSON(by):by}catch(bz){}b.data(bx,bw,by)}else{by=L}}return by}function S(bv){for(var e in bv){if(e==="data"&&b.isEmptyObject(bv[e])){continue}if(e!=="toJSON"){return false}}return true}function bj(by,bx,bA){var bw=bx+"defer",bv=bx+"queue",e=bx+"mark",bz=b._data(by,bw);if(bz&&(bA==="queue"||!b._data(by,bv))&&(bA==="mark"||!b._data(by,e))){setTimeout(function(){if(!b._data(by,bv)&&!b._data(by,e)){b.removeData(by,bw,true);bz.fire()}},0)}}b.extend({_mark:function(bv,e){if(bv){e=(e||"fx")+"mark";b._data(bv,e,(b._data(bv,e)||0)+1)}},_unmark:function(by,bx,bv){if(by!==true){bv=bx;bx=by;by=false}if(bx){bv=bv||"fx";var e=bv+"mark",bw=by?0:((b._data(bx,e)||1)-1);if(bw){b._data(bx,e,bw)}else{b.removeData(bx,e,true);bj(bx,bv,"mark")}}},queue:function(bv,e,bx){var bw;if(bv){e=(e||"fx")+"queue";bw=b._data(bv,e);if(bx){if(!bw||b.isArray(bx)){bw=b._data(bv,e,b.makeArray(bx))}else{bw.push(bx)}}return bw||[]}},dequeue:function(by,bx){bx=bx||"fx";var bv=b.queue(by,bx),bw=bv.shift(),e={};if(bw==="inprogress"){bw=bv.shift()}if(bw){if(bx==="fx"){bv.unshift("inprogress")}b._data(by,bx+".run",e);bw.call(by,function(){b.dequeue(by,bx)},e)}if(!bv.length){b.removeData(by,bx+"queue "+bx+".run",true);bj(by,bx,"queue")}}});b.fn.extend({queue:function(e,bv){var bw=2;if(typeof e!=="string"){bv=e;e="fx";bw--}if(arguments.length1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,bv){return b.access(this,b.prop,e,bv,arguments.length>1)},removeProp:function(e){e=b.propFix[e]||e;return this.each(function(){try{this[e]=L;delete this[e]}catch(bv){}})},addClass:function(by){var bA,bw,bv,bx,bz,bB,e;if(b.isFunction(by)){return this.each(function(bC){b(this).addClass(by.call(this,bC,this.className))})}if(by&&typeof by==="string"){bA=by.split(ag);for(bw=0,bv=this.length;bw-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.type]||b.valHooks[bw.nodeName.toLowerCase()];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aV,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aZ:bf)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(by,bA){var bz,bB,bw,e,bv,bx=0;if(bA&&by.nodeType===1){bB=bA.toLowerCase().split(ag);e=bB.length;for(;bx=0)}}})});var be=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/(?:^|\s)hover(\.\S+)?\b/,aP=/^key/,bg=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler;by=bv.selector}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bd,bI])}}for(bC=0;bCbC){bv.push({elem:this,matches:bD.slice(bC)})}for(bJ=0;bJ0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aP.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bg.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); +/*! * Sizzle CSS Selector Engine * Copyright 2011, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * More information: http://sizzlejs.com/ */ -(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

    ";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
    ";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/
    ","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
    ","
    "]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
    ").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/* +(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}bE.match.globalPOS=bD;var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

    ";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
    ";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(B(bx[0])||B(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function B(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||bb.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aH(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aS.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aS="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ah=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,v=/
    ]","i"),o=/checked\s*(?:[^=]|=\s*.checked.)/i,bn=/\/(java|ecma)script/i,aO=/^\s*",""],legend:[1,"
    ","
    "],thead:[1,"
    ","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
    ","
    "]}b.fn.extend({text:function(e){return b.access(this,function(bv){return bv===L?b.text(this):this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(bv))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(e){return b.access(this,function(by){var bx=this[0]||{},bw=0,bv=this.length;if(by===L){return bx.nodeType===1?bx.innerHTML.replace(ah,""):null}if(typeof by==="string"&&!ae.test(by)&&(b.support.leadingWhitespace||!ar.test(by))&&!ax[(d.exec(by)||["",""])[1].toLowerCase()]){by=by.replace(R,"<$1>");try{for(;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bh(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function D(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function am(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||b.isXMLDoc(by)||!ai.test("<"+by.nodeName+">")?by.cloneNode(true):am(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){aj(by,bz);e=bh(by);bv=bh(bz);for(bx=0;e[bx];++bx){if(bv[bx]){aj(e[bx],bv[bx])}}}if(bA){s(by,bz);if(bw){e=bh(by);bv=bh(bz);for(bx=0;e[bx];++bx){s(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bI,bw,bv,bx){var bA,bH,bD,bJ=[];bw=bw||av;if(typeof bw.createElement==="undefined"){bw=bw.ownerDocument||bw[0]&&bw[0].ownerDocument||av}for(var bE=0,bG;(bG=bI[bE])!=null;bE++){if(typeof bG==="number"){bG+=""}if(!bG){continue}if(typeof bG==="string"){if(!W.test(bG)){bG=bw.createTextNode(bG)}else{bG=bG.replace(R,"<$1>");var bN=(d.exec(bG)||["",""])[1].toLowerCase(),bz=ax[bN]||ax._default,bK=bz[0],bB=bw.createElement("div"),bL=ac.childNodes,bM;if(bw===av){ac.appendChild(bB)}else{a(bw).appendChild(bB)}bB.innerHTML=bz[1]+bG+bz[2];while(bK--){bB=bB.lastChild}if(!b.support.tbody){var by=v.test(bG),e=bN==="table"&&!by?bB.firstChild&&bB.firstChild.childNodes:bz[1]===""&&!by?bB.childNodes:[];for(bD=e.length-1;bD>=0;--bD){if(b.nodeName(e[bD],"tbody")&&!e[bD].childNodes.length){e[bD].parentNode.removeChild(e[bD])}}}if(!b.support.leadingWhitespace&&ar.test(bG)){bB.insertBefore(bw.createTextNode(ar.exec(bG)[0]),bB.firstChild)}bG=bB.childNodes;if(bB){bB.parentNode.removeChild(bB);if(bL.length>0){bM=bL[bL.length-1];if(bM&&bM.parentNode){bM.parentNode.removeChild(bM)}}}}}var bF;if(!b.support.appendChecked){if(bG[0]&&typeof(bF=bG.length)==="number"){for(bD=0;bD1)};b.extend({cssHooks:{opacity:{get:function(bw,bv){if(bv){var e=Z(bw,"opacity");return e===""?"1":e}else{return bw.style.opacity}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(bx,bw,bD,by){if(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB,bC,bz=b.camelCase(bw),bv=bx.style,bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;if(bD!==L){bC=typeof bD;if(bC==="string"&&(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(b.css(bx,bw));bC="number"}if(bD==null||bC==="number"&&isNaN(bD)){return}if(bC==="number"&&!b.cssNumber[bz]){bD+="px"}if(!bE||!("set" in bE)||(bD=bE.set(bx,bD))!==L){try{bv[bw]=bD}catch(bA){}}}else{if(bE&&"get" in bE&&(bB=bE.get(bx,false,by))!==L){return bB}return bv[bw]}},css:function(by,bx,bv){var bw,e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;if(bx==="cssFloat"){bx="float"}if(e&&"get" in e&&(bw=e.get(by,true,bv))!==L){return bw}else{if(Z){return Z(by,bx)}}},swap:function(by,bx,bz){var e={},bw,bv;for(bv in bx){e[bv]=by.style[bv];by.style[bv]=bx[bv]}bw=bz.call(by);for(bv in bx){by.style[bv]=e[bv]}return bw}});b.curCSS=b.css;if(av.defaultView&&av.defaultView.getComputedStyle){aJ=function(bA,bw){var bv,bz,e,by,bx=bA.style;bw=bw.replace(y,"-$1").toLowerCase();if((bz=bA.ownerDocument.defaultView)&&(e=bz.getComputedStyle(bA,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(bA.ownerDocument.documentElement,bA)){bv=b.style(bA,bw)}}if(!b.support.pixelMargin&&e&&aE.test(bw)&&a1.test(bv)){by=bx.width;bx.width=bv;bv=e.width;bx.width=by}return bv}}if(av.documentElement.currentStyle){aY=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv==null&&bx&&(by=bx[bw])){bv=by}if(a1.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":bv;bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aJ||aY;function af(by,bw,bv){var bz=bw==="width"?by.offsetWidth:by.offsetHeight,bx=bw==="width"?1:0,e=4;if(bz>0){if(bv!=="border"){for(;bx=1&&b.trim(bw.replace(al,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=al.test(bw)?bw.replace(al,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bv,e){return b.swap(bv,{display:"inline-block"},function(){if(e){return Z(bv,"margin-right")}else{return bv.style.marginRight}})}}}});if(b.expr&&b.expr.filters){b.expr.filters.hidden=function(bw){var bv=bw.offsetWidth,e=bw.offsetHeight;return(bv===0&&e===0)||(!b.support.reliableHiddenOffsets&&((bw.style&&bw.style.display)||b.css(bw,"display"))==="none")};b.expr.filters.visible=function(e){return !b.expr.filters.hidden(e)}}b.each({margin:"",padding:"",border:"Width"},function(e,bv){b.cssHooks[e+bv]={expand:function(by){var bx,bz=typeof by==="string"?by.split(" "):[by],bw={};for(bx=0;bx<4;bx++){bw[e+G[bx]+bv]=bz[bx]||bz[bx-2]||bz[0]}return bw}}});var k=/%20/g,ap=/\[\]$/,bs=/\r?\n/g,bq=/#.*$/,aD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,a0=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aN=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,aR=/^(?:GET|HEAD)$/,c=/^\/\//,M=/\?/,a7=/)<[^<]*)*<\/script>/gi,p=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,z=b.fn.load,aa={},q={},aF,r,aW=["*/"]+["*"];try{aF=bm.href}catch(aw){aF=av.createElement("a");aF.href="";aF=aF.href}r=K.exec(aF.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
    ").append(bD.replace(a7,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||p.test(this.nodeName)||a0.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){an(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}an(bv,e);return bv},ajaxSettings:{url:aF,isLocal:aN.test(r[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aW},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bd.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(q),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bk(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=F(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,r[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=r[1]||bI[2]!=r[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(r[3]||(r[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aX(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aR.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aW+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aX(q,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){u(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function u(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{u(bw+"["+(typeof bz==="object"?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&b.type(by)==="object"){for(var e in by){u(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bk(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function F(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!ba){ba=av.createElement("iframe");ba.frameBorder=ba.width=ba.height=0}e.appendChild(ba);if(!m||!ba.createElement){m=(ba.contentWindow||ba.contentDocument).document;m.write((b.support.boxModel?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(ba)}Q[bx]=bw}return Q[bx]}var a8,V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){a8=function(by,bH,bw,bB){try{bB=by.getBoundingClientRect()}catch(bF){}if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aL(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{a8=function(bz,bE,bx){var bC,bw=bz.offsetParent,bv=bz,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.fn.offset=function(e){if(arguments.length){return e===L?this:this.each(function(bx){b.offset.setOffset(this,e,bx)})}var bv=this[0],bw=bv&&bv.ownerDocument;if(!bw){return null}if(bv===bw.body){return b.offset.bodyOffset(bv)}return a8(bv,bw,bw.documentElement)};b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(bw,bv){var e=/Y/.test(bv);b.fn[bw]=function(bx){return b.access(this,function(by,bB,bA){var bz=aL(by);if(bA===L){return bz?(bv in bz)?bz[bv]:b.support.boxModel&&bz.document.documentElement[bB]||bz.document.body[bB]:by[bB]}if(bz){bz.scrollTo(!e?bA:b(bz).scrollLeft(),e?bA:b(bz).scrollTop())}else{by[bB]=bA}},bw,bx,arguments.length,null)}});function aL(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each({Height:"height",Width:"width"},function(bw,bx){var bv="client"+bw,e="scroll"+bw,by="offset"+bw;b.fn["inner"+bw]=function(){var bz=this[0];return bz?bz.style?parseFloat(b.css(bz,bx,"padding")):this[bx]():null};b.fn["outer"+bw]=function(bA){var bz=this[0];return bz?bz.style?parseFloat(b.css(bz,bx,bA?"margin":"border")):this[bx]():null};b.fn[bx]=function(bz){return b.access(this,function(bC,bB,bD){var bF,bE,bG,bA;if(b.isWindow(bC)){bF=bC.document;bE=bF.documentElement[bv];return b.support.boxModel&&bE||bF.body&&bF.body[bv]||bE}if(bC.nodeType===9){bF=bC.documentElement;if(bF[bv]>=bF[e]){return bF[bv]}return Math.max(bC.body[e],bF[e],bC.body[by],bF[by])}if(bD===L){bG=b.css(bC,bB);bA=parseFloat(bG);return b.isNumeric(bA)?bA:bG}b(bC).css(bB,bD)},bx,bz,arguments.length,null)}});bd.jQuery=bd.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*! * jQuery UI 1.8.18 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) @@ -29,7 +29,7 @@ * * http://docs.jquery.com/UI */ -(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/* +(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*! * jQuery UI Widget 1.8.18 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) @@ -38,7 +38,7 @@ * * http://docs.jquery.com/UI/Widget */ -(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/* +(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*! * jQuery UI Mouse 1.8.18 * * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) @@ -50,7 +50,7 @@ * Depends: * jquery.ui.widget.js */ -(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
    ').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g
    ');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/* +(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
    ').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*! * jQuery hashchange event - v1.3 - 7/21/2010 * http://benalman.com/projects/jquery-hashchange-plugin/ * @@ -58,11 +58,30 @@ * Dual licensed under the MIT and GPL licenses. * http://benalman.com/about/license/ */ -(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('